本文整理匯總了C++中DistMatrix::Matrix方法的典型用法代碼示例。如果您正苦於以下問題:C++ DistMatrix::Matrix方法的具體用法?C++ DistMatrix::Matrix怎麽用?C++ DistMatrix::Matrix使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類DistMatrix
的用法示例。
在下文中一共展示了DistMatrix::Matrix方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C++代碼示例。
示例1: HessenbergSchur
void ConsistentlyComputeDecomposition
( DistMatrix<Field,MC,MR,BLOCK>& H,
DistMatrix<Complex<Base<Field>>,STAR,STAR>& w,
Matrix<Field>& Z,
const HessenbergSchurCtrl& ctrl=HessenbergSchurCtrl() )
{
EL_DEBUG_CSE
// Because double-precision floating-point computation is often
// non-deterministic due to extra-precision computation being frequent but
// not guaranteed, we must be careful to not allow this non-determinism to
// be amplified by the forward instability of Francis sweeps.
const Grid& grid = H.Grid();
const int owner = H.Owner(0,0);
DistMatrix<Field,CIRC,CIRC> H_CIRC_CIRC( grid, owner );
H_CIRC_CIRC = H;
w.Resize( H.Height(), 1 );
if( H_CIRC_CIRC.CrossRank() == H_CIRC_CIRC.Root() )
HessenbergSchur( H_CIRC_CIRC.Matrix(), w.Matrix(), Z, ctrl );
else
Z.Resize( H.Height(), H.Height() );
H = H_CIRC_CIRC;
El::Broadcast( w.Matrix(), H_CIRC_CIRC.CrossComm(), H_CIRC_CIRC.Root() );
El::Broadcast( Z, H_CIRC_CIRC.CrossComm(), H_CIRC_CIRC.Root() );
}
示例2: if
inline void
MakeJordan( DistMatrix<T,U,V>& J, T lambda )
{
DEBUG_ONLY(CallStackEntry cse("MakeJordan"))
Zero( J.Matrix() );
const Int localHeight = J.LocalHeight();
const Int localWidth = J.LocalWidth();
const Int colShift = J.ColShift();
const Int rowShift = J.RowShift();
const Int colStride = J.ColStride();
const Int rowStride = J.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( i == j )
J.SetLocal( iLoc, jLoc, lambda );
else if( i == j-1 )
J.SetLocal( iLoc, jLoc, T(1) );
}
}
}
示例3: entry
inline void
LocalLU( DistMatrix<F,STAR,STAR>& A )
{
#ifndef RELEASE
CallStackEntry entry("LocalLU");
#endif
LU( A.Matrix() );
}
示例4: cse
inline void
LocalHermitianInverse
( UpperOrLower uplo, DistMatrix<F,STAR,STAR>& A,
LDLPivotType pivotType=BUNCH_KAUFMAN_A )
{
DEBUG_ONLY(CallStackEntry cse("LocalHermitianInverse"))
SymmetricInverse( uplo, A.Matrix(), true, pivotType );
}
示例5: entry
inline void
LocalHPDInverse( UpperOrLower uplo, DistMatrix<F,STAR,STAR>& A )
{
#ifndef RELEASE
CallStackEntry entry("LocalHPDInverse");
#endif
HPDInverse( uplo, A.Matrix() );
}
示例6: entry
inline void
Conjugate( DistMatrix<T,U,V>& A )
{
#ifndef RELEASE
CallStackEntry entry("Conjugate (in-place)");
#endif
Conjugate( A.Matrix() );
}
示例7: entry
inline void
LocalTrdtrmm
( Orientation orientation, UpperOrLower uplo, DistMatrix<T,STAR,STAR>& A )
{
#ifndef RELEASE
CallStackEntry entry("LocalTrdtrmm");
#endif
Trdtrmm( orientation, uplo, A.Matrix() );
}
示例8: cse
inline void LocalGer
( T alpha, const DistMatrix<T,xColDist,xRowDist>& x,
const DistMatrix<T,yColDist,yRowDist>& y,
DistMatrix<T,AColDist,ARowDist>& A )
{
DEBUG_ONLY(CallStackEntry cse("LocalGer"))
// TODO: Add error checking here
Ger( alpha, x.LockedMatrix(), y.LockedMatrix(), A.Matrix() );
}
示例9: RowMaxNorms
void RowMaxNorms
( const DistMatrix<F,U,V>& A, DistMatrix<Base<F>,U,STAR>& norms )
{
DEBUG_CSE
norms.AlignWith( A );
norms.Resize( A.Height(), 1 );
RowMaxNorms( A.LockedMatrix(), norms.Matrix() );
AllReduce( norms, A.RowComm(), mpi::MAX );
}
示例10: PushCallStack
inline void
DiagonalScale
( LeftOrRight side, Orientation orientation,
const DistMatrix<typename Base<T>::type,U,V>& d, DistMatrix<T,W,Z>& X )
{
#ifndef RELEASE
PushCallStack("DiagonalScale");
#endif
typedef typename Base<T>::type R;
if( side == LEFT )
{
if( U == W && V == STAR && d.ColAlignment() == X.ColAlignment() )
{
DiagonalScale( LEFT, orientation, d.LockedMatrix(), X.Matrix() );
}
else
{
DistMatrix<R,W,STAR> d_W_STAR( X.Grid() );
d_W_STAR = d;
DiagonalScale
( LEFT, orientation, d_W_STAR.LockedMatrix(), X.Matrix() );
}
}
else
{
if( U == Z && V == STAR && d.ColAlignment() == X.RowAlignment() )
{
DiagonalScale( RIGHT, orientation, d.LockedMatrix(), X.Matrix() );
}
else
{
DistMatrix<R,Z,STAR> d_Z_STAR( X.Grid() );
d_Z_STAR = d;
DiagonalScale
( RIGHT, orientation, d_Z_STAR.LockedMatrix(), X.Matrix() );
}
}
#ifndef RELEASE
PopCallStack();
#endif
}
示例11: PushCallStack
inline void
LocalHPDInverse( UpperOrLower uplo, DistMatrix<F,STAR,STAR>& A )
{
#ifndef RELEASE
PushCallStack("LocalHPDInverse");
#endif
HPDInverse( uplo, A.Matrix() );
#ifndef RELEASE
PopCallStack();
#endif
}
示例12: entry
inline void LocalGer
( T alpha, const DistMatrix<T,xColDist,xRowDist>& x,
const DistMatrix<T,yColDist,yRowDist>& y,
DistMatrix<T,AColDist,ARowDist>& A )
{
#ifndef RELEASE
CallStackEntry entry("LocalGer");
// TODO: Add error checking here
#endif
Ger( alpha, x.LockedMatrix(), y.LockedMatrix(), A.Matrix() );
}
示例13: PushCallStack
inline void
Zero( DistMatrix<T,U,V>& A )
{
#ifndef RELEASE
PushCallStack("Zero");
#endif
Zero( A.Matrix() );
#ifndef RELEASE
PopCallStack();
#endif
}
示例14: AssertSameGrids
void AllGather
( const DistMatrix<T, U, V >& A,
DistMatrix<T,Collect<U>(),Collect<V>()>& B )
{
EL_DEBUG_CSE
AssertSameGrids( A, B );
const Int height = A.Height();
const Int width = A.Width();
B.SetGrid( A.Grid() );
B.Resize( height, width );
if( A.Participating() )
{
if( A.DistSize() == 1 )
{
Copy( A.LockedMatrix(), B.Matrix() );
}
else
{
const Int colStride = A.ColStride();
const Int rowStride = A.RowStride();
const Int distStride = colStride*rowStride;
const Int maxLocalHeight = MaxLength(height,colStride);
const Int maxLocalWidth = MaxLength(width,rowStride);
const Int portionSize = mpi::Pad( maxLocalHeight*maxLocalWidth );
vector<T> buf;
FastResize( buf, (distStride+1)*portionSize );
T* sendBuf = &buf[0];
T* recvBuf = &buf[portionSize];
// Pack
util::InterleaveMatrix
( A.LocalHeight(), A.LocalWidth(),
A.LockedBuffer(), 1, A.LDim(),
sendBuf, 1, A.LocalHeight() );
// Communicate
mpi::AllGather
( sendBuf, portionSize, recvBuf, portionSize, A.DistComm() );
// Unpack
util::StridedUnpack
( height, width,
A.ColAlign(), colStride,
A.RowAlign(), rowStride,
recvBuf, portionSize,
B.Buffer(), B.LDim() );
}
}
if( A.Grid().InGrid() && A.CrossComm() != mpi::COMM_SELF )
El::Broadcast( B, A.CrossComm(), A.Root() );
}
示例15: Zero
void RowTwoNorms
( const DistMatrix<F,U,V>& A, DistMatrix<Base<F>,U,STAR>& norms )
{
DEBUG_CSE
norms.AlignWith( A );
norms.Resize( A.Height(), 1 );
if( A.Width() == 0 )
{
Zero( norms );
return;
}
RowTwoNormsHelper( A.LockedMatrix(), norms.Matrix(), A.RowComm() );
}