本文整理汇总了C++中DistMatrix::RowShift方法的典型用法代码示例。如果您正苦于以下问题:C++ DistMatrix::RowShift方法的具体用法?C++ DistMatrix::RowShift怎么用?C++ DistMatrix::RowShift使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DistMatrix
的用法示例。
在下文中一共展示了DistMatrix::RowShift方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: entry
inline void
MakeDiscreteFourier( DistMatrix<Complex<R>,U,V>& A )
{
#ifndef RELEASE
CallStackEntry entry("MakeDiscreteFourier");
#endif
typedef Complex<R> F;
const int m = A.Height();
const int n = A.Width();
if( m != n )
throw std::logic_error("Cannot make a non-square DFT matrix");
const R pi = 4*Atan( R(1) );
const F nSqrt = Sqrt( R(n) );
const int localHeight = A.LocalHeight();
const int localWidth = A.LocalWidth();
const int colShift = A.ColShift();
const int rowShift = A.RowShift();
const int colStride = A.ColStride();
const int rowStride = A.RowStride();
for( int jLocal=0; jLocal<localWidth; ++jLocal )
{
const int j = rowShift + jLocal*rowStride;
for( int iLocal=0; iLocal<localHeight; ++iLocal )
{
const int i = colShift + iLocal*colStride;
A.SetLocal( iLocal, jLocal, Exp(-2*pi*i*j/n)/nSqrt );
const R theta = -2*pi*i*j/n;
const Complex<R> alpha( Cos(theta), Sin(theta) );
A.SetLocal( iLocal, jLocal, alpha/nSqrt );
}
}
}
示例2: file
inline void
BinaryFlat
( DistMatrix<T,STAR,V>& A, Int height, Int width, const std::string filename )
{
DEBUG_ONLY(CallStackEntry cse("read::BinaryFlat"))
std::ifstream file( filename.c_str(), std::ios::binary );
if( !file.is_open() )
RuntimeError("Could not open ",filename);
const Int numBytes = FileSize( file );
const Int numBytesExp = height*width*sizeof(T);
if( numBytes != numBytesExp )
RuntimeError
("Expected file to be ",numBytesExp," bytes but found ",numBytes);
A.Resize( height, width );
const Int localWidth = A.LocalWidth();
const Int rowShift = A.RowShift();
const Int rowStride = A.RowStride();
for( Int jLoc=0; jLoc<localWidth; ++jLoc )
{
const Int j = rowShift + jLoc*rowStride;
const Int localIndex = j*height;
const std::streamoff pos = localIndex*sizeof(T);
file.seekg( pos );
file.read( (char*)A.Buffer(0,jLoc), height*sizeof(T) );
}
}
示例3: entry
inline void
Riemann( DistMatrix<T,U,V>& R, int n )
{
#ifndef RELEASE
CallStackEntry entry("Riemann");
#endif
R.ResizeTo( n, n );
const int localHeight = R.LocalHeight();
const int localWidth = R.LocalWidth();
const int colShift = R.ColShift();
const int rowShift = R.RowShift();
const int colStride = R.ColStride();
const int rowStride = R.RowStride();
for( int jLocal=0; jLocal<localWidth; ++jLocal )
{
const int j = rowShift + jLocal*rowStride;
for( int iLocal=0; iLocal<localHeight; ++iLocal )
{
const int i = colShift + iLocal*colStride;
if( ((j+2)%(i+2))==0 )
R.SetLocal( iLocal, jLocal, T(i+1) );
else
R.SetLocal( iLocal, jLocal, T(-1) );
}
}
}
示例4: entry
inline void
Hankel( DistMatrix<T,U,V>& A, Int m, Int n, const std::vector<T>& a )
{
#ifndef RELEASE
CallStackEntry entry("Hankel");
#endif
const Int length = m+n-1;
if( a.size() != (Unsigned)length )
LogicError("a was the wrong size");
A.ResizeTo( m, n );
const Int localHeight = A.LocalHeight();
const Int localWidth = A.LocalWidth();
const Int colShift = A.ColShift();
const Int rowShift = A.RowShift();
const Int colStride = A.ColStride();
const Int rowStride = A.RowStride();
for( Int jLoc=0; jLoc<localWidth; ++jLoc )
{
const Int j = rowShift + jLoc*rowStride;
for( Int iLoc=0; iLoc<localHeight; ++iLoc )
{
const Int i = colShift + iLoc*colStride;
A.SetLocal( iLoc, jLoc, a[i+j] );
}
}
}
示例5: entry
inline void
Wilkinson( DistMatrix<T,U,V>& A, int k )
{
#ifndef RELEASE
CallStackEntry entry("Wilkinson");
#endif
const int n = 2*k+1;
A.ResizeTo( n, n );
MakeZeros( A );
const int localHeight = A.LocalHeight();
const int localWidth = A.LocalWidth();
const int colShift = A.ColShift();
const int rowShift = A.RowShift();
const int colStride = A.ColStride();
const int rowStride = A.RowStride();
for( int jLocal=0; jLocal<localWidth; ++jLocal )
{
const int j = rowShift + jLocal*rowStride;
for( int iLocal=0; iLocal<localHeight; ++iLocal )
{
const int i = colShift + iLocal*colStride;
if( i == j )
{
if( j <= k )
A.SetLocal( iLocal, jLocal, T(k-j) );
else
A.SetLocal( iLocal, jLocal, T(j-k) );
}
else if( i == j-1 || i == j+1 )
A.SetLocal( iLocal, jLocal, T(1) );
}
}
}
示例6: entry
inline void
Redheffer( DistMatrix<T,U,V>& R, Int n )
{
#ifndef RELEASE
CallStackEntry entry("Redheffer");
#endif
R.ResizeTo( n, n );
const Int localHeight = R.LocalHeight();
const Int localWidth = R.LocalWidth();
const Int colShift = R.ColShift();
const Int rowShift = R.RowShift();
const Int colStride = R.ColStride();
const Int rowStride = R.RowStride();
for( Int jLoc=0; jLoc<localWidth; ++jLoc )
{
const Int j = rowShift + jLoc*rowStride;
for( Int iLoc=0; iLoc<localHeight; ++iLoc )
{
const Int i = colShift + iLoc*colStride;
if( j==0 || ((j+1)%(i+1))==0 )
R.SetLocal( iLoc, jLoc, T(1) );
else
R.SetLocal( iLoc, jLoc, T(0) );
}
}
}
示例7: entry
inline void
MakeLegendre( DistMatrix<F,U,V>& A )
{
#ifndef RELEASE
CallStackEntry entry("MakeLegendre");
#endif
if( A.Height() != A.Width() )
LogicError("Cannot make a non-square matrix Legendre");
MakeZeros( A );
const Int localHeight = A.LocalHeight();
const Int localWidth = A.LocalWidth();
const Int colShift = A.ColShift();
const Int rowShift = A.RowShift();
const Int colStride = A.ColStride();
const Int rowStride = A.RowStride();
for( Int jLoc=0; jLoc<localWidth; ++jLoc )
{
const Int j = rowShift + jLoc*rowStride;
for( Int iLoc=0; iLoc<localHeight; ++iLoc )
{
const Int i = colShift + iLoc*colStride;
if( j == i+1 || j == i-1 )
{
const Int k = Max( i, j );
const F gamma = F(1) / Pow( F(2)*k, F(2) );
const F beta = F(1) / (2*Sqrt(F(1)-gamma));
A.SetLocal( iLoc, jLoc, beta );
}
}
}
}
示例8: logic_error
inline void
MakeHilbert( DistMatrix<F,U,V>& A )
{
#ifndef RELEASE
PushCallStack("MakeHilbert");
#endif
const int m = A.Height();
const int n = A.Width();
if( m != n )
throw std::logic_error("Cannot make a non-square matrix Hilbert");
const F one = static_cast<F>(1);
const int localHeight = A.LocalHeight();
const int localWidth = A.LocalWidth();
const int colShift = A.ColShift();
const int rowShift = A.RowShift();
const int colStride = A.ColStride();
const int rowStride = A.RowStride();
for( int jLocal=0; jLocal<localWidth; ++jLocal )
{
const int j = rowShift + jLocal*rowStride;
for( int iLocal=0; iLocal<localHeight; ++iLocal )
{
const int i = colShift + iLocal*colStride;
A.SetLocalEntry( iLocal, jLocal, one/(i+j+1) );
}
}
#ifndef RELEASE
PopCallStack();
#endif
}
示例9: log_uniform
//w = -log(rand(m,n));
void log_uniform(DistMatrix<R> &U){
//boost::random::gamma_distribution<> dist(df/2.0,2.0);
boost::random::uniform_01<> dist;
boost::random::mt19937 rng(static_cast<boost::uint32_t>(commRank));
double temp;
const int colShift = U.ColShift(); // first row we own
const int rowShift = U.RowShift(); // first col we own
const int colStride = U.ColStride();
const int rowStride = U.RowStride();
const int localHeight = U.LocalHeight();
const int localWidth = U.LocalWidth();
for( int iLocal=0; iLocal<localHeight; ++iLocal ){
for( int jLocal=0; jLocal<localWidth; ++jLocal ){
const int i = colShift + iLocal*colStride;
const int j = rowShift + jLocal*rowStride;
temp = dist(rng);
U.SetLocal(iLocal, jLocal, log(temp));
}
}
}
示例10: calc_x_if
void calc_x_if(const R alpha,const R beta,const R c, const R delta,DistMatrix<R> &x, DistMatrix<R> &phi,DistMatrix<R> &w){
R temp; // phi
R temp2; // w
R aphi;
R a1phi;
const R pi = 4*atan(1);
const R zeta = beta * tan(pi * alpha/2);
const int colShift = x.ColShift(); // first row we own
const int rowShift = x.RowShift(); // first col we own
const int colStride = x.ColStride();
const int rowStride = x.RowStride();
const int localHeight = x.LocalHeight();
const int localWidth = x.LocalWidth();
for( int iLocal=0; iLocal<localHeight; ++iLocal ){
for( int jLocal=0; jLocal<localWidth; ++jLocal ){
const int i = colShift + iLocal*colStride;
const int j = rowShift + jLocal*rowStride;
temp = phi.GetLocal(iLocal,jLocal);//phi
temp2 = w.GetLocal(iLocal,jLocal); //w
aphi = alpha * temp;
a1phi = (1-alpha)*temp;
x.SetLocal(iLocal, jLocal, (-1 * sqrt(abs(delta + c *( ( (sin(aphi)+zeta * cos(aphi))/ cos(temp)) * -1 * pow( abs( ((cos(a1phi) + zeta * sin(a1phi))/ (temp2 * cos(temp))) ) ,((1-alpha)/alpha) ) + beta * tan(pi * alpha/2) )))) );
}
}
}
示例11: entry
inline void
MakeHilbert( DistMatrix<F,U,V>& A )
{
#ifndef RELEASE
CallStackEntry entry("MakeHilbert");
#endif
const Int m = A.Height();
const Int n = A.Width();
if( m != n )
LogicError("Cannot make a non-square matrix Hilbert");
const F one = F(1);
const Int localHeight = A.LocalHeight();
const Int localWidth = A.LocalWidth();
const Int colShift = A.ColShift();
const Int rowShift = A.RowShift();
const Int colStride = A.ColStride();
const Int rowStride = A.RowStride();
for( Int jLoc=0; jLoc<localWidth; ++jLoc )
{
const Int j = rowShift + jLoc*rowStride;
for( Int iLoc=0; iLoc<localHeight; ++iLoc )
{
const Int i = colShift + iLoc*colStride;
A.SetLocal( iLoc, jLoc, one/(i+j+1) );
}
}
}
示例12: logic_error
inline typename Base<F>::type
HermitianEntrywiseOneNorm( UpperOrLower uplo, const DistMatrix<F>& A )
{
#ifndef RELEASE
PushCallStack("HermitianEntrywiseOneNorm");
#endif
if( A.Height() != A.Width() )
throw std::logic_error("Hermitian matrices must be square.");
const int r = A.Grid().Height();
const int c = A.Grid().Width();
const int colShift = A.ColShift();
const int rowShift = A.RowShift();
typedef typename Base<F>::type R;
R localSum = 0;
const int localWidth = A.LocalWidth();
if( uplo == UPPER )
{
for( int jLocal=0; jLocal<localWidth; ++jLocal )
{
int j = rowShift + jLocal*c;
int numUpperRows = Length(j+1,colShift,r);
for( int iLocal=0; iLocal<numUpperRows; ++iLocal )
{
int i = colShift + iLocal*r;
const R alpha = Abs(A.GetLocal(iLocal,jLocal));
if( i ==j )
localSum += alpha;
else
localSum += 2*alpha;
}
}
}
else
{
for( int jLocal=0; jLocal<localWidth; ++jLocal )
{
int j = rowShift + jLocal*c;
int numStrictlyUpperRows = Length(j,colShift,r);
for( int iLocal=numStrictlyUpperRows;
iLocal<A.LocalHeight(); ++iLocal )
{
int i = colShift + iLocal*r;
const R alpha = Abs(A.GetLocal(iLocal,jLocal));
if( i ==j )
localSum += alpha;
else
localSum += 2*alpha;
}
}
}
R norm;
mpi::AllReduce( &localSum, &norm, 1, mpi::SUM, A.Grid().VCComm() );
#ifndef RELEASE
PopCallStack();
#endif
return norm;
}
示例13: dotproduct
void dotproduct(DistMatrix<R> &A,DistMatrix<R> &B){
if(A.Height() != B.Height()){
//ERROR!
}
if(A.Width() != B.Width()){
//ERROR!
}
double temp,temp1;
const int colShift = A.ColShift(); // first row we own
const int rowShift = A.RowShift(); // first col we own
const int colStride = A.ColStride();
const int rowStride = A.RowStride();
const int localHeight = A.LocalHeight();
const int localWidth = A.LocalWidth();
for( int iLocal=0; iLocal<localHeight; ++iLocal ){
for( int jLocal=0; jLocal<localWidth; ++jLocal ){
const int i = colShift + iLocal*colStride;
const int j = rowShift + jLocal*rowStride;
temp = A.GetLocal(iLocal, jLocal);
temp1 = B.GetLocal(iLocal,jLocal);
B.SetLocal(iLocal, jLocal, (temp*temp1));
}
}
}
示例14: calc_x_else
void calc_x_else(const R alpha, const R beta,const R c, const R delta, DistMatrix<R> &x, DistMatrix<R> &phi,DistMatrix<R> &w){
R bphi;
R temp;
R temp2;
const R pi = 4*atan(1);
const int colShift = x.ColShift(); // first row we own
const int rowShift = x.RowShift(); // first col we own
const int colStride = x.ColStride();
const int rowStride = x.RowStride();
const int localHeight = x.LocalHeight();
const int localWidth = x.LocalWidth();
for( int iLocal=0; iLocal<localHeight; ++iLocal ){
for( int jLocal=0; jLocal<localWidth; ++jLocal ){
const int i = colShift + iLocal*colStride;
const int j = rowShift + jLocal*rowStride;
temp = phi.GetLocal(0,jLocal);//phi
temp2 = w.GetLocal(0,jLocal); //w
bphi = (pi/2) + beta * temp;
//cout<< (delta + c * (((2/pi) * (bphi * tan(temp) - beta * log((pi/2) * temp2 * cos(temp) / bphi))) + (beta * tan (pi *alpha/2))))<<endl;
x.SetLocal(iLocal, jLocal, (-1* sqrt(abs(delta + c * (((2/pi) * (bphi * tan(temp) - beta * log((pi/2) * temp2 * cos(temp) / bphi))) + (beta * tan (pi *alpha/2)))))));
}
}
}
示例15: logic_error
inline void
MakeOneTwoOne( DistMatrix<T,U,V>& A )
{
#ifndef RELEASE
PushCallStack("MakeOneTwoOne");
#endif
if( A.Height() != A.Width() )
throw std::logic_error("Cannot make a non-square matrix 1-2-1");
MakeZeros( A );
const int localHeight = A.LocalHeight();
const int localWidth = A.LocalWidth();
const int colShift = A.ColShift();
const int rowShift = A.RowShift();
const int colStride = A.ColStride();
const int rowStride = A.RowStride();
for( int jLocal=0; jLocal<localWidth; ++jLocal )
{
const int j = rowShift + jLocal*rowStride;
for( int iLocal=0; iLocal<localHeight; ++iLocal )
{
const int i = colShift + iLocal*colStride;
if( i == j )
A.SetLocal( iLocal, jLocal, T(2) );
else if( i == j-1 || i == j+1 )
A.SetLocal( iLocal, jLocal, T(1) );
}
}
#ifndef RELEASE
PopCallStack();
#endif
}