COMBINATORIAL_BLAS  1.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Classes | Public Types | Public Member Functions | Friends | List of all members
SpParMat< IT, NT, DER > Class Template Reference

#include <BFSFriends.h>

Classes

class  ScalarReadSaveHandler
 

Public Types

typedef DER::LocalIT LocalIT
 
typedef DER::LocalNT LocalNT
 
typedef IT GlobalIT
 
typedef NT GlobalNT
 

Public Member Functions

 SpParMat ()
 Deprecated. Don't call the default constructor. More...
 
 SpParMat (MPI_Comm world)
 
 SpParMat (shared_ptr< CommGrid > grid)
 
 SpParMat (DER *myseq, shared_ptr< CommGrid > grid)
 
 SpParMat (ifstream &input, MPI_Comm &world)
 
 SpParMat (DER *myseq, MPI_Comm &world)
 
template<class DELIT >
 SpParMat (const DistEdgeList< DELIT > &rhs, bool removeloops=true)
 
 SpParMat (const SpParMat< IT, NT, DER > &rhs)
 
 SpParMat (IT total_m, IT total_n, const FullyDistVec< IT, IT > &, const FullyDistVec< IT, IT > &, const FullyDistVec< IT, NT > &, bool SumDuplicates=false)
 All vectors are zero-based indexed (as usual) More...
 
 SpParMat (IT total_m, IT total_n, const FullyDistVec< IT, IT > &, const FullyDistVec< IT, IT > &, const NT &, bool SumDuplicates=false)
 
SpParMat< IT, NT, DER > & operator= (const SpParMat< IT, NT, DER > &rhs)
 
SpParMat< IT, NT, DER > & operator+= (const SpParMat< IT, NT, DER > &rhs)
 
 ~SpParMat ()
 
template<typename SR >
void Square ()
 
float LoadImbalance () const
 
void Transpose ()
 
void FreeMemory ()
 
void EWiseMult (const SpParMat< IT, NT, DER > &rhs, bool exclude)
 
void EWiseScale (const DenseParMat< IT, NT > &rhs)
 
void Find (FullyDistVec< IT, IT > &, FullyDistVec< IT, IT > &, FullyDistVec< IT, NT > &) const
 
void Find (FullyDistVec< IT, IT > &, FullyDistVec< IT, IT > &) const
 
template<typename _BinaryOperation >
void DimApply (Dim dim, const FullyDistVec< IT, NT > &v, _BinaryOperation __binary_op)
 
template<typename _BinaryOperation , typename _UnaryOperation >
DenseParVec< IT, NT > Reduce (Dim dim, _BinaryOperation __binary_op, NT id, _UnaryOperation __unary_op) const
 
template<typename _BinaryOperation >
DenseParVec< IT, NT > Reduce (Dim dim, _BinaryOperation __binary_op, NT id) const
 
template<typename VT , typename _BinaryOperation , typename _UnaryOperation >
void Reduce (DenseParVec< IT, VT > &rvec, Dim dim, _BinaryOperation __binary_op, VT id, _UnaryOperation __unary_op) const
 
template<typename VT , typename _BinaryOperation >
void Reduce (DenseParVec< IT, VT > &rvec, Dim dim, _BinaryOperation __binary_op, VT id) const
 
template<typename VT , typename GIT , typename _BinaryOperation , typename _UnaryOperation >
void Reduce (FullyDistVec< GIT, VT > &rvec, Dim dim, _BinaryOperation __binary_op, VT id, _UnaryOperation __unary_op, MPI_Op mympiop) const
 
template<typename VT , typename GIT , typename _BinaryOperation , typename _UnaryOperation >
void Reduce (FullyDistVec< GIT, VT > &rvec, Dim dim, _BinaryOperation __binary_op, VT id, _UnaryOperation __unary_op) const
 
template<typename VT , typename GIT , typename _BinaryOperation >
void Reduce (FullyDistVec< GIT, VT > &rvec, Dim dim, _BinaryOperation __binary_op, VT id) const
 
template<typename VT , typename GIT , typename _BinaryOperation >
void Reduce (FullyDistVec< GIT, VT > &rvec, Dim dim, _BinaryOperation __binary_op, VT id, MPI_Op mympiop) const
 
template<typename VT , typename GIT , typename _BinaryOperation >
void MaskedReduce (FullyDistVec< GIT, VT > &rvec, FullyDistSpVec< GIT, VT > &mask, Dim dim, _BinaryOperation __binary_op, VT id, bool exclude=false) const
 
template<typename VT , typename GIT , typename _BinaryOperation , typename _UnaryOperation >
void MaskedReduce (FullyDistVec< GIT, VT > &rvec, FullyDistSpVec< GIT, VT > &mask, Dim dim, _BinaryOperation __binary_op, VT id, _UnaryOperation __unary_op, bool exclude=false) const
 
template<typename _UnaryOperation >
void Apply (_UnaryOperation __unary_op)
 
IT RemoveLoops ()
 
template<typename LIT , typename OT >
void OptimizeForGraph500 (OptBuf< LIT, OT > &optbuf)
 
void ActivateThreading (int numsplits)
 
template<typename _UnaryOperation >
SpParMat< IT, NT, DER > PruneI (_UnaryOperation __unary_op, bool inPlace=true)
 
template<typename _UnaryOperation >
SpParMat< IT, NT, DER > Prune (_UnaryOperation __unary_op, bool inPlace=true)
 
template<typename _BinaryOperation >
void UpdateDense (DenseParMat< IT, NT > &rhs, _BinaryOperation __binary_op) const
 
void Dump (string filename) const
 
void PrintInfo () const
 
template<typename NNT , typename NDER >
 operator SpParMat< IT, NNT, NDER > () const
 Type conversion operator. More...
 
template<typename NIT , typename NNT , typename NDER >
 operator SpParMat< NIT, NNT, NDER > () const
 Type conversion operator (for indices as well) More...
 
IT getnrow () const
 
IT getncol () const
 
IT getnnz () const
 
SpParMat< IT, NT, DER > SubsRefCol (const vector< IT > &ci) const
 Column indexing with special parallel semantics. More...
 
template<typename SelectFirstSR , typename SelectSecondSR >
SpParMat< IT, NT, DER > SubsRef_SR (const FullyDistVec< IT, IT > &ri, const FullyDistVec< IT, IT > &ci, bool inplace=false)
 General indexing with serial semantics. More...
 
SpParMat< IT, NT, DER > operator() (const FullyDistVec< IT, IT > &ri, const FullyDistVec< IT, IT > &ci, bool inplace=false)
 
void Prune (const FullyDistVec< IT, IT > &ri, const FullyDistVec< IT, IT > &ci)
 prune all entries whose row indices are in ri and column indices are in ci More...
 
void SpAsgn (const FullyDistVec< IT, IT > &ri, const FullyDistVec< IT, IT > &ci, SpParMat< IT, NT, DER > &B)
 
SpParMat< IT, NT, DER > operator() (const SpParVec< IT, IT > &ri, const SpParVec< IT, IT > &ci) const
 
bool operator== (const SpParMat< IT, NT, DER > &rhs) const
 
void ParallelReadMM (const string &filename)
 
template<class HANDLER >
void ReadDistribute (const string &filename, int master, bool nonum, HANDLER handler, bool transpose=false, bool pario=false)
 
void ReadDistribute (const string &filename, int master, bool nonum=false, bool pario=false)
 
template<class HANDLER >
void SaveGathered (string filename, HANDLER handler, bool transpose=false) const
 
void SaveGathered (string filename) const
 
ofstream & put (ofstream &outfile) const
 
void PrintForPatoh (string filename) const
 
shared_ptr< CommGridgetcommgrid () const
 
DER::LocalIT getlocalrows () const
 
DER::LocalIT getlocalcols () const
 
DER::LocalIT getlocalnnz () const
 
DER & seq ()
 
DER * seqptr ()
 

Friends

template<class IU , class NU >
class DenseParMat
 
template<typename SR , typename NUO , typename UDERO , typename IU , typename NU1 , typename NU2 , typename UDER1 , typename UDER2 >
SpParMat< IU, NUO, UDERO > Mult_AnXBn_DoubleBuff (SpParMat< IU, NU1, UDER1 > &A, SpParMat< IU, NU2, UDER2 > &B, bool clearA, bool clearB)
 Friend declarations. More...
 
template<typename SR , typename NUO , typename UDERO , typename IU , typename NU1 , typename NU2 , typename UDER1 , typename UDER2 >
SpParMat< IU, NUO, UDERO > Mult_AnXBn_Synch (SpParMat< IU, NU1, UDER1 > &A, SpParMat< IU, NU2, UDER2 > &B, bool clearA, bool clearB)
 
template<typename SR , typename IU , typename NU1 , typename NU2 , typename UDER1 , typename UDER2 >
SpParMat< IU, typename
promote_trait< NU1, NU2 >
::T_promote, typename
promote_trait< UDER1, UDER2 >
::T_promote > 
Mult_AnXBn_ActiveTarget (const SpParMat< IU, NU1, UDER1 > &A, const SpParMat< IU, NU2, UDER2 > &B)
 
template<typename SR , typename IU , typename NU1 , typename NU2 , typename UDER1 , typename UDER2 >
SpParMat< IU, typename
promote_trait< NU1, NU2 >
::T_promote, typename
promote_trait< UDER1, UDER2 >
::T_promote > 
Mult_AnXBn_PassiveTarget (const SpParMat< IU, NU1, UDER1 > &A, const SpParMat< IU, NU2, UDER2 > &B)
 
template<typename SR , typename IU , typename NU1 , typename NU2 , typename UDER1 , typename UDER2 >
SpParMat< IU, typename
promote_trait< NU1, NU2 >
::T_promote, typename
promote_trait< UDER1, UDER2 >
::T_promote > 
Mult_AnXBn_Fence (const SpParMat< IU, NU1, UDER1 > &A, const SpParMat< IU, NU2, UDER2 > &B)
 
template<typename SR , typename IU , typename NUM , typename NUV , typename UDER >
DenseParVec< IU, typename
promote_trait< NUM, NUV >
::T_promote > 
SpMV (const SpParMat< IU, NUM, UDER > &A, const DenseParVec< IU, NUV > &x)
 
template<typename SR , typename IU , typename NUM , typename NUV , typename UDER >
FullyDistSpVec< IU, typename
promote_trait< NUM, NUV >
::T_promote > 
SpMV (const SpParMat< IU, NUM, UDER > &A, const FullyDistSpVec< IU, NUV > &x)
 
template<typename SR , typename IU , typename NUM , typename NUV , typename UDER >
FullyDistVec< IU, typename
promote_trait< NUM, NUV >
::T_promote > 
SpMV (const SpParMat< IU, NUM, UDER > &A, const FullyDistVec< IU, NUV > &x)
 
template<typename SR , typename IU , typename NUM , typename UDER >
FullyDistSpVec< IU, typename
promote_trait< NUM, IU >
::T_promote > 
SpMV (const SpParMat< IU, NUM, UDER > &A, const FullyDistSpVec< IU, IU > &x, bool indexisvalue)
 
template<typename SR , typename IVT , typename OVT , typename IU , typename NUM , typename UDER >
void SpMV (const SpParMat< IU, NUM, UDER > &A, const FullyDistSpVec< IU, IVT > &x, FullyDistSpVec< IU, OVT > &y, bool indexisvalue)
 
template<typename SR , typename IVT , typename OVT , typename IU , typename NUM , typename UDER >
void SpMV (const SpParMat< IU, NUM, UDER > &A, const FullyDistSpVec< IU, IVT > &x, FullyDistSpVec< IU, OVT > &y, bool indexisvalue, OptBuf< int32_t, OVT > &optbuf)
 
template<typename IU , typename NU1 , typename NU2 , typename UDER1 , typename UDER2 >
SpParMat< IU, typename
promote_trait< NU1, NU2 >
::T_promote, typename
promote_trait< UDER1, UDER2 >
::T_promote > 
EWiseMult (const SpParMat< IU, NU1, UDER1 > &A, const SpParMat< IU, NU2, UDER2 > &B, bool exclude)
 
template<typename RETT , typename RETDER , typename IU , typename NU1 , typename NU2 , typename UDERA , typename UDERB , typename _BinaryOperation >
SpParMat< IU, RETT, RETDER > EWiseApply (const SpParMat< IU, NU1, UDERA > &A, const SpParMat< IU, NU2, UDERB > &B, _BinaryOperation __binary_op, bool notB, const NU2 &defaultBVal)
 
template<typename RETT , typename RETDER , typename IU , typename NU1 , typename NU2 , typename UDERA , typename UDERB , typename _BinaryOperation , typename _BinaryPredicate >
SpParMat< IU, RETT, RETDER > EWiseApply (const SpParMat< IU, NU1, UDERA > &A, const SpParMat< IU, NU2, UDERB > &B, _BinaryOperation __binary_op, _BinaryPredicate do_op, bool allowANulls, bool allowBNulls, const NU1 &ANullVal, const NU2 &BNullVal, const bool allowIntersect, const bool useExtendedBinOp)
 
template<typename SR , typename IVT , typename OVT , typename IU , typename NUM , typename UDER >
void LocalSpMV (const SpParMat< IU, NUM, UDER > &A, int rowneighs, OptBuf< int32_t, OVT > &optbuf, int32_t *&indacc, IVT *&numacc, int32_t *&sendindbuf, OVT *&sendnumbuf, int *&sdispls, int *sendcnt, int accnz, bool indexisvalue)
 
template<typename VT , typename IU , typename UDER >
void LocalSpMV (const SpParMat< IU, bool, UDER > &A, int rowneighs, OptBuf< int32_t, VT > &optbuf, int32_t *&indacc, VT *&numacc, int *sendcnt, int accnz)
 
template<typename IU , typename NU , typename UDER >
ofstream & operator<< (ofstream &outfile, const SpParMat< IU, NU, UDER > &s)
 

Detailed Description

template<class IT, class NT, class DER>
class SpParMat< IT, NT, DER >

Fundamental 2D distributed sparse matrix class The index type IT is encapsulated by the class in a way that it is only guarantee that the implementation will ensure the requested semantics. For instance, if IT=int64 then the implementation can still use 32 bit local indices but it should return correct 64-bit numbers in its functions. In other words, DER can be SpDCCols<int32_t, double> while IT=int64_t

Definition at line 47 of file BFSFriends.h.

Member Typedef Documentation

template<class IT, class NT, class DER>
typedef IT SpParMat< IT, NT, DER >::GlobalIT

Definition at line 71 of file SpParMat.h.

template<class IT, class NT, class DER>
typedef NT SpParMat< IT, NT, DER >::GlobalNT

Definition at line 72 of file SpParMat.h.

template<class IT, class NT, class DER>
typedef DER::LocalIT SpParMat< IT, NT, DER >::LocalIT

Definition at line 69 of file SpParMat.h.

template<class IT, class NT, class DER>
typedef DER::LocalNT SpParMat< IT, NT, DER >::LocalNT

Definition at line 70 of file SpParMat.h.

Constructor & Destructor Documentation

template<class IT , class NT , class DER >
SpParMat< IT, NT, DER >::SpParMat ( )

Deprecated. Don't call the default constructor.

Definition at line 86 of file SpParMat.cpp.

template<class IT , class NT , class DER >
SpParMat< IT, NT, DER >::SpParMat ( MPI_Comm  world)

If there is a single file read by the master process only, use this and then call ReadDistribute()

Definition at line 98 of file SpParMat.cpp.

template<class IT , class NT , class DER >
SpParMat< IT, NT, DER >::SpParMat ( shared_ptr< CommGrid grid)

Definition at line 77 of file SpParMat.cpp.

template<class IT , class NT , class DER>
SpParMat< IT, NT, DER >::SpParMat ( DER *  myseq,
shared_ptr< CommGrid grid 
)

Definition at line 70 of file SpParMat.cpp.

template<class IT , class NT , class DER>
SpParMat< IT, NT, DER >::SpParMat ( ifstream &  input,
MPI_Comm &  world 
)

If every processor has a distinct triples file such as {A_0, A_1, A_2,... A_p} for p processors

Definition at line 50 of file SpParMat.cpp.

template<class IT , class NT , class DER>
SpParMat< IT, NT, DER >::SpParMat ( DER *  myseq,
MPI_Comm &  world 
)

Definition at line 63 of file SpParMat.cpp.

template<class IT , class NT , class DER >
template<class DELIT >
SpParMat< IT, NT, DER >::SpParMat ( const DistEdgeList< DELIT > &  rhs,
bool  removeloops = true 
)

Definition at line 1319 of file SpParMat.cpp.

template<class IT, class NT, class DER>
SpParMat< IT, NT, DER >::SpParMat ( const SpParMat< IT, NT, DER > &  rhs)

Definition at line 178 of file SpParMat.cpp.

template<class IT, class NT, class DER>
SpParMat< IT, NT, DER >::SpParMat ( IT  total_m,
IT  total_n,
const FullyDistVec< IT, IT > &  distrows,
const FullyDistVec< IT, IT > &  distcols,
const FullyDistVec< IT, NT > &  distvals,
bool  SumDuplicates = false 
)

All vectors are zero-based indexed (as usual)

Definition at line 1259 of file SpParMat.cpp.

template<class IT, class NT, class DER>
SpParMat< IT, NT, DER >::SpParMat ( IT  total_m,
IT  total_n,
const FullyDistVec< IT, IT > &  distrows,
const FullyDistVec< IT, IT > &  distcols,
const NT &  val,
bool  SumDuplicates = false 
)

Definition at line 1290 of file SpParMat.cpp.

template<class IT , class NT , class DER >
SpParMat< IT, NT, DER >::~SpParMat ( )

Definition at line 107 of file SpParMat.cpp.

Member Function Documentation

template<class IT , class NT , class DER >
void SpParMat< IT, NT, DER >::ActivateThreading ( int  numsplits)

Definition at line 1559 of file SpParMat.cpp.

template<class IT, class NT, class DER>
template<typename _UnaryOperation >
void SpParMat< IT, NT, DER >::Apply ( _UnaryOperation  __unary_op)
inline

Definition at line 138 of file SpParMat.h.

template<class IT, class NT, class DER >
template<typename _BinaryOperation >
void SpParMat< IT, NT, DER >::DimApply ( Dim  dim,
const FullyDistVec< IT, NT > &  v,
_BinaryOperation  __binary_op 
)

Definition at line 263 of file SpParMat.cpp.

template<class IT , class NT , class DER >
void SpParMat< IT, NT, DER >::Dump ( string  filename) const

Definition at line 121 of file SpParMat.cpp.

template<class IT, class NT, class DER>
void SpParMat< IT, NT, DER >::EWiseMult ( const SpParMat< IT, NT, DER > &  rhs,
bool  exclude 
)

Definition at line 1114 of file SpParMat.cpp.

template<class IT, class NT, class DER >
void SpParMat< IT, NT, DER >::EWiseScale ( const DenseParMat< IT, NT > &  rhs)

Definition at line 1129 of file SpParMat.cpp.

template<class IT, class NT, class DER >
void SpParMat< IT, NT, DER >::Find ( FullyDistVec< IT, IT > &  distrows,
FullyDistVec< IT, IT > &  distcols,
FullyDistVec< IT, NT > &  distvals 
) const

The input parameters' identity (zero) elements as well as their communication grid is preserved while outputting

Definition at line 2694 of file SpParMat.cpp.

template<class IT, class NT, class DER >
void SpParMat< IT, NT, DER >::Find ( FullyDistVec< IT, IT > &  distrows,
FullyDistVec< IT, IT > &  distcols 
) const

The input parameters' identity (zero) elements as well as their communication grid is preserved while outputting

Definition at line 2772 of file SpParMat.cpp.

template<class IT , class NT , class DER >
void SpParMat< IT, NT, DER >::FreeMemory ( )

Definition at line 113 of file SpParMat.cpp.

template<class IT, class NT, class DER>
shared_ptr<CommGrid> SpParMat< IT, NT, DER >::getcommgrid ( ) const
inline

Definition at line 255 of file SpParMat.h.

template<class IT, class NT, class DER>
DER::LocalIT SpParMat< IT, NT, DER >::getlocalcols ( ) const
inline

Definition at line 257 of file SpParMat.h.

template<class IT, class NT, class DER>
DER::LocalIT SpParMat< IT, NT, DER >::getlocalnnz ( ) const
inline

Definition at line 258 of file SpParMat.h.

template<class IT, class NT, class DER>
DER::LocalIT SpParMat< IT, NT, DER >::getlocalrows ( ) const
inline

Definition at line 256 of file SpParMat.h.

template<class IT , class NT , class DER >
IT SpParMat< IT, NT, DER >::getncol ( ) const

Definition at line 253 of file SpParMat.cpp.

template<class IT , class NT , class DER >
IT SpParMat< IT, NT, DER >::getnnz ( ) const

Definition at line 235 of file SpParMat.cpp.

template<class IT , class NT , class DER >
IT SpParMat< IT, NT, DER >::getnrow ( ) const

Definition at line 244 of file SpParMat.cpp.

template<class IT , class NT , class DER >
float SpParMat< IT, NT, DER >::LoadImbalance ( ) const

Definition at line 224 of file SpParMat.cpp.

template<class IT , class NT , class DER >
template<typename VT , typename GIT , typename _BinaryOperation >
void SpParMat< IT, NT, DER >::MaskedReduce ( FullyDistVec< GIT, VT > &  rvec,
FullyDistSpVec< GIT, VT > &  mask,
Dim  dim,
_BinaryOperation  __binary_op,
VT  id,
bool  exclude = false 
) const

Definition at line 630 of file SpParMat.cpp.

template<class IT , class NT , class DER >
template<typename VT , typename GIT , typename _BinaryOperation , typename _UnaryOperation >
void SpParMat< IT, NT, DER >::MaskedReduce ( FullyDistVec< GIT, VT > &  rvec,
FullyDistSpVec< GIT, VT > &  mask,
Dim  dim,
_BinaryOperation  __binary_op,
VT  id,
_UnaryOperation  __unary_op,
bool  exclude = false 
) const

Reduce along the column into a vector

Parameters
[in]mask{A sparse vector indicating row indices included/excluded (based on exclude argument) in the reduction }
[in]__binary_op{the operation used for reduction; examples: max, min, plus, multiply, and, or. Its parameters and return type are all VT}
[in]id{scalar that is used as the identity for __binary_op; examples: zero, infinity}
[in]__unary_op{optional unary operation applied to nonzeros before the __binary_op; examples: 1/x, x^2}
[in]exclude{if true, masked row indices are included in the reduction}
[out]rvec{the return vector, specified as an output parameter to allow arbitrary return types via VT}

Definition at line 651 of file SpParMat.cpp.

template<class IT , class NT , class DER >
template<typename NNT , typename NDER >
SpParMat< IT, NT, DER >::operator SpParMat< IT, NNT, NDER > ( ) const

Type conversion operator.

Definition at line 776 of file SpParMat.cpp.

template<class IT , class NT , class DER >
template<typename NIT , typename NNT , typename NDER >
SpParMat< IT, NT, DER >::operator SpParMat< NIT, NNT, NDER > ( ) const

Type conversion operator (for indices as well)

Change index type as well.

Definition at line 785 of file SpParMat.cpp.

template<class IT, class NT, class DER>
SpParMat<IT,NT,DER> SpParMat< IT, NT, DER >::operator() ( const FullyDistVec< IT, IT > &  ri,
const FullyDistVec< IT, IT > &  ci,
bool  inplace = false 
)
inline

Definition at line 198 of file SpParMat.h.

template<class IT, class NT , class DER >
SpParMat< IT, NT, DER > SpParMat< IT, NT, DER >::operator() ( const SpParVec< IT, IT > &  ri,
const SpParVec< IT, IT > &  ci 
) const

Generalized sparse matrix indexing (ri/ci are 0-based indexed) Both the storage and the actual values in SpParVec should be IT The index vectors are distributed on diagonal processors We can use this function to apply a permutation like A(p,q) Sequential indexing subroutine (via multiplication) is general enough.

Definition at line 47 of file SpParMatExt.cpp.

template<class IT, class NT, class DER>
SpParMat< IT, NT, DER > & SpParMat< IT, NT, DER >::operator+= ( const SpParMat< IT, NT, DER > &  rhs)

Definition at line 203 of file SpParMat.cpp.

template<class IT, class NT, class DER>
SpParMat< IT, NT, DER > & SpParMat< IT, NT, DER >::operator= ( const SpParMat< IT, NT, DER > &  rhs)

Check agains NULL is probably unneccessary, delete won't fail on NULL But useful in the presence of a user defined "operator delete" which fails to check NULL

Definition at line 187 of file SpParMat.cpp.

template<class IT, class NT, class DER>
bool SpParMat< IT, NT, DER >::operator== ( const SpParMat< IT, NT, DER > &  rhs) const

Definition at line 1190 of file SpParMat.cpp.

template<class IT , class NT , class DER >
template<typename LIT , typename OT >
void SpParMat< IT, NT, DER >::OptimizeForGraph500 ( OptBuf< LIT, OT > &  optbuf)

Does two optimizations 1) Splits the local column indices to sparse & dense pieces to avoid redundant AllGather (sparse pieces get p2p) 2) Pre-allocates buffers for row communication

Definition at line 1458 of file SpParMat.cpp.

template<class IT , class NT , class DER >
void SpParMat< IT, NT, DER >::ParallelReadMM ( const string &  filename)

Handles all sorts of orderings as long as there are no duplicates Requires proper matrix market banner at the moment Might replace ReadDistribute in the long term

Definition at line 2024 of file SpParMat.cpp.

template<class IT , class NT , class DER >
void SpParMat< IT, NT, DER >::PrintForPatoh ( string  filename) const

Definition at line 1843 of file SpParMat.cpp.

template<class IT , class NT , class DER >
void SpParMat< IT, NT, DER >::PrintInfo ( ) const

Definition at line 1166 of file SpParMat.cpp.

template<class IT, class NT, class DER>
template<typename _UnaryOperation >
SpParMat<IT,NT,DER> SpParMat< IT, NT, DER >::Prune ( _UnaryOperation  __unary_op,
bool  inPlace = true 
)
inline

Definition at line 166 of file SpParMat.h.

template<class IT, class NT , class DER >
void SpParMat< IT, NT, DER >::Prune ( const FullyDistVec< IT, IT > &  ri,
const FullyDistVec< IT, IT > &  ci 
)

prune all entries whose row indices are in ri and column indices are in ci

Definition at line 1078 of file SpParMat.cpp.

template<class IT, class NT, class DER>
template<typename _UnaryOperation >
SpParMat<IT,NT,DER> SpParMat< IT, NT, DER >::PruneI ( _UnaryOperation  __unary_op,
bool  inPlace = true 
)
inline

Definition at line 150 of file SpParMat.h.

template<class IT , class NT , class DER >
ofstream & SpParMat< IT, NT, DER >::put ( ofstream &  outfile) const

Definition at line 2842 of file SpParMat.cpp.

template<class IT , class NT , class DER >
template<class HANDLER >
void SpParMat< IT, NT, DER >::ReadDistribute ( const string &  filename,
int  master,
bool  nonum,
HANDLER  handler,
bool  transpose = false,
bool  pario = false 
)

Handles all sorts of orderings as long as there are no duplicates May perform better when the data is already reverse column-sorted (i.e. in decreasing order) if nonum is true, then numerics are not supplied and they are assumed to be all 1's

Definition at line 2154 of file SpParMat.cpp.

template<class IT, class NT, class DER>
void SpParMat< IT, NT, DER >::ReadDistribute ( const string &  filename,
int  master,
bool  nonum = false,
bool  pario = false 
)
inline

Definition at line 243 of file SpParMat.h.

template<class IT , class NT, class DER >
template<typename _BinaryOperation , typename _UnaryOperation >
DenseParVec< IT, NT > SpParMat< IT, NT, DER >::Reduce ( Dim  dim,
_BinaryOperation  __binary_op,
NT  id,
_UnaryOperation  __unary_op 
) const

Definition at line 350 of file SpParMat.cpp.

template<class IT , class NT, class DER >
template<typename _BinaryOperation >
DenseParVec< IT, NT > SpParMat< IT, NT, DER >::Reduce ( Dim  dim,
_BinaryOperation  __binary_op,
NT  id 
) const

Definition at line 360 of file SpParMat.cpp.

template<class IT, class NT, class DER >
template<typename VT , typename _BinaryOperation , typename _UnaryOperation >
void SpParMat< IT, NT, DER >::Reduce ( DenseParVec< IT, VT > &  rvec,
Dim  dim,
_BinaryOperation  __binary_op,
VT  id,
_UnaryOperation  __unary_op 
) const

Reduce along the column/row into a vector

Parameters
[in]__binary_op{the operation used for reduction; examples: max, min, plus, multiply, and, or. Its parameters and return type are all VT}
[in]id{scalar that is used as the identity for __binary_op; examples: zero, infinity}
[in]__unary_op{optional unary operation applied to nonzeros before the __binary_op; examples: 1/x, x^2}
[out]rvec{the return vector, specified as an output parameter to allow arbitrary return types via VT}

Definition at line 551 of file SpParMat.cpp.

template<class IT, class NT, class DER >
template<typename VT , typename _BinaryOperation >
void SpParMat< IT, NT, DER >::Reduce ( DenseParVec< IT, VT > &  rvec,
Dim  dim,
_BinaryOperation  __binary_op,
VT  id 
) const

Definition at line 369 of file SpParMat.cpp.

template<class IT, class NT, class DER >
template<typename VT , typename GIT , typename _BinaryOperation , typename _UnaryOperation >
void SpParMat< IT, NT, DER >::Reduce ( FullyDistVec< GIT, VT > &  rvec,
Dim  dim,
_BinaryOperation  __binary_op,
VT  id,
_UnaryOperation  __unary_op,
MPI_Op  mympiop 
) const

Definition at line 398 of file SpParMat.cpp.

template<class IT, class NT, class DER >
template<typename VT , typename GIT , typename _BinaryOperation , typename _UnaryOperation >
void SpParMat< IT, NT, DER >::Reduce ( FullyDistVec< GIT, VT > &  rvec,
Dim  dim,
_BinaryOperation  __binary_op,
VT  id,
_UnaryOperation  __unary_op 
) const

Definition at line 390 of file SpParMat.cpp.

template<class IT, class NT, class DER >
template<typename VT , typename GIT , typename _BinaryOperation >
void SpParMat< IT, NT, DER >::Reduce ( FullyDistVec< GIT, VT > &  rvec,
Dim  dim,
_BinaryOperation  __binary_op,
VT  id 
) const

Definition at line 376 of file SpParMat.cpp.

template<class IT, class NT, class DER >
template<typename VT , typename GIT , typename _BinaryOperation >
void SpParMat< IT, NT, DER >::Reduce ( FullyDistVec< GIT, VT > &  rvec,
Dim  dim,
_BinaryOperation  __binary_op,
VT  id,
MPI_Op  mympiop 
) const

Definition at line 383 of file SpParMat.cpp.

template<class IT , class NT , class DER >
IT SpParMat< IT, NT, DER >::RemoveLoops ( )

Definition at line 1436 of file SpParMat.cpp.

template<class IT , class NT , class DER >
template<class HANDLER >
void SpParMat< IT, NT, DER >::SaveGathered ( string  filename,
HANDLER  handler,
bool  transpose = false 
) const

Definition at line 1721 of file SpParMat.cpp.

template<class IT, class NT, class DER>
void SpParMat< IT, NT, DER >::SaveGathered ( string  filename) const
inline

Definition at line 250 of file SpParMat.h.

template<class IT, class NT, class DER>
DER& SpParMat< IT, NT, DER >::seq ( )
inline

Definition at line 259 of file SpParMat.h.

template<class IT, class NT, class DER>
DER* SpParMat< IT, NT, DER >::seqptr ( )
inline

Definition at line 260 of file SpParMat.h.

template<class IT, class NT, class DER>
void SpParMat< IT, NT, DER >::SpAsgn ( const FullyDistVec< IT, IT > &  ri,
const FullyDistVec< IT, IT > &  ci,
SpParMat< IT, NT, DER > &  B 
)

Definition at line 1035 of file SpParMat.cpp.

template<class IT , class NT , class DER >
template<typename SR >
void SpParMat< IT, NT, DER >::Square ( )

Parallel routine that returns A*A on the semiring SR Uses only MPI-1 features (relies on simple blocking broadcast)

Definition at line 1571 of file SpParMat.cpp.

template<class IT, class NT , class DER >
template<typename PTNTBOOL , typename PTBOOLNT >
SpParMat< IT, NT, DER > SpParMat< IT, NT, DER >::SubsRef_SR ( const FullyDistVec< IT, IT > &  ri,
const FullyDistVec< IT, IT > &  ci,
bool  inplace = false 
)

General indexing with serial semantics.

Generalized sparse matrix indexing (ri/ci are 0-based indexed) Both the storage and the actual values in FullyDistVec should be IT The index vectors are dense and FULLY distributed on all processors We can use this function to apply a permutation like A(p,q) Sequential indexing subroutine (via multiplication) is general enough.

Definition at line 812 of file SpParMat.cpp.

template<class IT, class NT , class DER >
SpParMat< IT, NT, DER > SpParMat< IT, NT, DER >::SubsRefCol ( const vector< IT > &  ci) const

Column indexing with special parallel semantics.

Create a submatrix of size m x (size(ci) * s) on a r x s processor grid Essentially fetches the columns ci[0], ci[1],... ci[size(ci)] from every submatrix

Definition at line 796 of file SpParMat.cpp.

template<class IT , class NT , class DER >
void SpParMat< IT, NT, DER >::Transpose ( )

Definition at line 1659 of file SpParMat.cpp.

template<class IT, class NT, class DER >
template<typename _BinaryOperation >
void SpParMat< IT, NT, DER >::UpdateDense ( DenseParMat< IT, NT > &  rhs,
_BinaryOperation  __binary_op 
) const

Definition at line 1144 of file SpParMat.cpp.

Friends And Related Function Documentation

template<class IT, class NT, class DER>
template<class IU , class NU >
friend class DenseParMat
friend

Definition at line 348 of file SpParMat.h.

template<class IT, class NT, class DER>
template<typename RETT , typename RETDER , typename IU , typename NU1 , typename NU2 , typename UDERA , typename UDERB , typename _BinaryOperation >
SpParMat<IU,RETT,RETDER> EWiseApply ( const SpParMat< IU, NU1, UDERA > &  A,
const SpParMat< IU, NU2, UDERB > &  B,
_BinaryOperation  __binary_op,
bool  notB,
const NU2 &  defaultBVal 
)
friend

Definition at line 1133 of file ParFriends.h.

template<class IT, class NT, class DER>
template<typename RETT , typename RETDER , typename IU , typename NU1 , typename NU2 , typename UDERA , typename UDERB , typename _BinaryOperation , typename _BinaryPredicate >
SpParMat<IU,RETT,RETDER> EWiseApply ( const SpParMat< IU, NU1, UDERA > &  A,
const SpParMat< IU, NU2, UDERB > &  B,
_BinaryOperation  __binary_op,
_BinaryPredicate  do_op,
bool  allowANulls,
bool  allowBNulls,
const NU1 &  ANullVal,
const NU2 &  BNullVal,
const bool  allowIntersect,
const bool  useExtendedBinOp 
)
friend

Definition at line 1150 of file ParFriends.h.

template<class IT, class NT, class DER>
template<typename IU , typename NU1 , typename NU2 , typename UDER1 , typename UDER2 >
SpParMat<IU,typename promote_trait<NU1,NU2>::T_promote,typename promote_trait<UDER1,UDER2>::T_promote> EWiseMult ( const SpParMat< IU, NU1, UDER1 > &  A,
const SpParMat< IU, NU2, UDER2 > &  B,
bool  exclude 
)
friend
template<class IT, class NT, class DER>
template<typename SR , typename IVT , typename OVT , typename IU , typename NUM , typename UDER >
void LocalSpMV ( const SpParMat< IU, NUM, UDER > &  A,
int  rowneighs,
OptBuf< int32_t, OVT > &  optbuf,
int32_t *&  indacc,
IVT *&  numacc,
int32_t *&  sendindbuf,
OVT *&  sendnumbuf,
int *&  sdispls,
int *  sendcnt,
int  accnz,
bool  indexisvalue 
)
friend

Step 3 of the sparse SpMV algorithm, with the semiring

Parameters
[in,out]optbuf{scratch space for all-to-all (fold) communication}
[in,out]indacc,numacc{index and values of the input vector, deleted upon exit}
[in,out]sendindbuf,sendnumbuf{index and values of the output vector, created}

Definition at line 599 of file ParFriends.h.

template<class IT, class NT, class DER>
template<typename VT , typename IU , typename UDER >
void LocalSpMV ( const SpParMat< IU, bool, UDER > &  A,
int  rowneighs,
OptBuf< int32_t, VT > &  optbuf,
int32_t *&  indacc,
VT *&  numacc,
int *  sendcnt,
int  accnz 
)
friend
template<class IT, class NT, class DER>
template<typename SR , typename IU , typename NU1 , typename NU2 , typename UDER1 , typename UDER2 >
SpParMat<IU,typename promote_trait<NU1,NU2>::T_promote,typename promote_trait<UDER1,UDER2>::T_promote> Mult_AnXBn_ActiveTarget ( const SpParMat< IU, NU1, UDER1 > &  A,
const SpParMat< IU, NU2, UDER2 > &  B 
)
friend
template<class IT, class NT, class DER>
template<typename SR , typename NUO , typename UDERO , typename IU , typename NU1 , typename NU2 , typename UDER1 , typename UDER2 >
SpParMat<IU, NUO, UDERO> Mult_AnXBn_DoubleBuff ( SpParMat< IU, NU1, UDER1 > &  A,
SpParMat< IU, NU2, UDER2 > &  B,
bool  clearA,
bool  clearB 
)
friend

Friend declarations.

template<class IT, class NT, class DER>
template<typename SR , typename IU , typename NU1 , typename NU2 , typename UDER1 , typename UDER2 >
SpParMat<IU,typename promote_trait<NU1,NU2>::T_promote,typename promote_trait<UDER1,UDER2>::T_promote> Mult_AnXBn_Fence ( const SpParMat< IU, NU1, UDER1 > &  A,
const SpParMat< IU, NU2, UDER2 > &  B 
)
friend
template<class IT, class NT, class DER>
template<typename SR , typename IU , typename NU1 , typename NU2 , typename UDER1 , typename UDER2 >
SpParMat<IU,typename promote_trait<NU1,NU2>::T_promote,typename promote_trait<UDER1,UDER2>::T_promote> Mult_AnXBn_PassiveTarget ( const SpParMat< IU, NU1, UDER1 > &  A,
const SpParMat< IU, NU2, UDER2 > &  B 
)
friend
template<class IT, class NT, class DER>
template<typename SR , typename NUO , typename UDERO , typename IU , typename NU1 , typename NU2 , typename UDER1 , typename UDER2 >
SpParMat<IU,NUO,UDERO> Mult_AnXBn_Synch ( SpParMat< IU, NU1, UDER1 > &  A,
SpParMat< IU, NU2, UDER2 > &  B,
bool  clearA,
bool  clearB 
)
friend
template<class IT, class NT, class DER>
template<typename IU , typename NU , typename UDER >
ofstream& operator<< ( ofstream &  outfile,
const SpParMat< IU, NU, UDER > &  s 
)
friend

Definition at line 2849 of file SpParMat.cpp.

template<class IT, class NT, class DER>
template<typename SR , typename IU , typename NUM , typename NUV , typename UDER >
DenseParVec<IU,typename promote_trait<NUM,NUV>::T_promote> SpMV ( const SpParMat< IU, NUM, UDER > &  A,
const DenseParVec< IU, NUV > &  x 
)
friend

Definition at line 763 of file ParFriendsExt.h.

template<class IT, class NT, class DER>
template<typename SR , typename IU , typename NUM , typename NUV , typename UDER >
FullyDistSpVec<IU,typename promote_trait<NUM,NUV>::T_promote> SpMV ( const SpParMat< IU, NUM, UDER > &  A,
const FullyDistSpVec< IU, NUV > &  x 
)
friend

Old version that is no longer considered optimal Kept for legacy purposes To be removed when other functionals are fully tested.

Definition at line 966 of file ParFriends.h.

template<class IT, class NT, class DER>
template<typename SR , typename IU , typename NUM , typename NUV , typename UDER >
FullyDistVec<IU,typename promote_trait<NUM,NUV>::T_promote> SpMV ( const SpParMat< IU, NUM, UDER > &  A,
const FullyDistVec< IU, NUV > &  x 
)
friend

Parallel dense SpMV

Definition at line 892 of file ParFriends.h.

template<class IT, class NT, class DER>
template<typename SR , typename IU , typename NUM , typename UDER >
FullyDistSpVec<IU,typename promote_trait<NUM,IU>::T_promote> SpMV ( const SpParMat< IU, NUM, UDER > &  A,
const FullyDistSpVec< IU, IU > &  x,
bool  indexisvalue 
)
friend

Definition at line 490 of file ParFriends.h.

template<class IT, class NT, class DER>
template<typename SR , typename IVT , typename OVT , typename IU , typename NUM , typename UDER >
void SpMV ( const SpParMat< IU, NUM, UDER > &  A,
const FullyDistSpVec< IU, IVT > &  x,
FullyDistSpVec< IU, OVT > &  y,
bool  indexisvalue 
)
friend

Definition at line 866 of file ParFriends.h.

template<class IT, class NT, class DER>
template<typename SR , typename IVT , typename OVT , typename IU , typename NUM , typename UDER >
void SpMV ( const SpParMat< IU, NUM, UDER > &  A,
const FullyDistSpVec< IU, IVT > &  x,
FullyDistSpVec< IU, OVT > &  y,
bool  indexisvalue,
OptBuf< int32_t, OVT > &  optbuf 
)
friend

This version is the most flexible sparse matrix X sparse vector [Used in KDT] It accepts different types for the matrix (NUM), the input vector (IVT) and the output vector (OVT) without relying on automatic type promotion Input (x) and output (y) vectors can be ALIASED because y is not written until the algorithm is done with x.

Definition at line 757 of file ParFriends.h.


The documentation for this class was generated from the following files: