67template <
class IT,
class NT,
class DER>
85 template <
class DELIT>
96 template <
typename SR>
110 template <
typename _BinaryOperation>
113 template <
typename _BinaryOperation,
typename _UnaryOperation >
116 template <
typename _BinaryOperation>
119 template <
typename VT,
typename GIT,
typename _BinaryOperation,
typename _UnaryOperation >
122 template <
typename VT,
typename GIT,
typename _BinaryOperation>
125 template <
typename VT,
typename GIT>
127 template <
typename VT,
typename GIT>
130 template <
typename VT,
typename GIT,
typename _UnaryOperation>
132 template <
typename VT,
typename GIT,
typename _UnaryOperation>
134 template <
typename VT,
typename GIT>
136 template <
typename VT,
typename GIT>
142 template <
typename VT,
typename GIT,
typename _BinaryOperation>
144 template <
typename VT,
typename GIT,
typename _BinaryOperation,
typename _UnaryOperation >
147 template <
typename _UnaryOperation>
157 template <
typename LIT,
typename OT>
161 template <
typename _UnaryOperation>
177 template <
typename _UnaryOperation>
191 template <
typename _BinaryOperation>
194 template <
typename _BinaryOperation>
197 template <
typename IRRELEVANT_NT>
200 template <
typename _BinaryOperation>
213 template <
typename LIT>
219 template <
typename SelectFirstSR,
typename SelectSecondSR>
253 std::cout <<
"binaryfill(): error reading row index" << std::endl;
255 std::cout <<
"binaryfill(): error reading col index" << std::endl;
257 std::cout <<
"binaryfill(): error reading value" << std::endl;
262 template <
typename c,
typename t>
270 template <
typename c,
typename t>
277 template <
typename _BinaryOperation>
280 template <
class HANDLER>
286 template <
typename _BinaryOperation>
289 template <
class HANDLER>
296 template <
class HANDLER>
302 std::shared_ptr<CommGrid>
getcommgrid()
const {
return commGrid; }
303 typename DER::LocalIT
getlocalrows()
const {
return spSeq->getnrow(); }
305 typename DER::LocalIT
getlocalnnz()
const {
return spSeq->getnnz(); }
309 template <
typename _BinaryOperation,
typename LIT>
314 std::vector<std::vector<SpParMat<IT, NT, DER>>>
319 template <
typename SR,
typename IU,
typename NU1,
typename NU2,
typename UDER1,
typename UDER2>
323 template <
typename SR,
typename NUO,
typename UDERO,
typename IU,
typename NU1,
typename NU2,
typename UDER1,
typename UDER2>
327 template <
typename SR,
typename NUO,
typename UDERO,
typename IU,
typename NU1,
typename NU2,
typename UDER1,
typename UDER2>
331 template <
typename SR,
typename NUO,
typename UDERO,
typename IU,
typename NU1,
typename NU2,
typename UDER1,
typename UDER2>
335 template <
typename IU,
typename NU1,
typename NU2,
typename UDERA,
typename UDERB>
338 template <
typename SR,
typename IU,
typename NU1,
typename NU2,
typename UDER1,
typename UDER2>
342 template <
typename SR,
typename IU,
typename NU1,
typename NU2,
typename UDER1,
typename UDER2>
346 template <
typename SR,
typename IU,
typename NU1,
typename NU2,
typename UDER1,
typename UDER2>
350 template <
typename SR,
typename NUO,
typename UDERO,
typename IU,
typename NU1,
typename NU2,
typename UDER1,
typename UDER2>
354 template <
typename SR,
typename NUO,
typename UDERO,
typename IU,
typename NU1,
typename NU2,
typename UDERA,
typename UDERB>
358 template <
typename SR,
typename NUO,
typename UDERO,
typename IU,
typename NU1,
typename NU2,
typename UDERA,
typename UDERB>
362 template <
typename SR,
typename IU,
typename NUM,
typename NUV,
typename UDER>
366 template <
typename SR,
typename IU,
typename NUM,
typename NUV,
typename UDER>
370 template <
typename SR,
typename IU,
typename NUM,
typename UDER>
375 template <
typename SR,
typename IVT,
typename OVT,
typename IU,
typename NUM,
typename UDER>
378 template <
typename SR,
typename IVT,
typename OVT,
typename IU,
typename NUM,
typename UDER>
381 template <
typename IU,
typename NU1,
typename NU2,
typename UDER1,
typename UDER2>
385 template <
typename RETT,
typename RETDER,
typename IU,
typename NU1,
typename NU2,
typename UDERA,
typename UDERB,
typename _BinaryOperation>
389 template <
typename RETT,
typename RETDER,
typename IU,
typename NU1,
typename NU2,
typename UDERA,
typename UDERB,
typename _BinaryOperation,
typename _BinaryPredicate>
391 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);
393 template<
typename SR,
typename IVT,
typename OVT,
typename IU,
typename NUM,
typename UDER>
397 template<
typename VT,
typename IU,
typename UDER>
401 typedef std::array<char, MAXVERTNAME> STRASARRAY;
402 typedef std::pair< STRASARRAY, uint64_t> TYPE2SEND;
404 class CharArraySaveHandler
408 template <
typename c,
typename t>
417 MPI_File TupleRead1stPassNExchange (
const std::string & filename, TYPE2SEND * & senddata,
IT & totsend, FullyDistVec<IT,STRASARRAY> & distmapper,
uint64_t & totallength);
419 template <
typename VT,
typename GIT,
typename _BinaryOperation,
typename _UnaryOperation >
420 void Reduce(FullyDistVec<GIT,VT> & rvec,
Dim dim, _BinaryOperation __binary_op, VT
id, _UnaryOperation __unary_op, MPI_Op mympiop)
const;
423 template <
typename VT,
typename GIT>
424 void TopKGather(std::vector<NT> & all_medians, std::vector<IT> & nnz_per_col,
int & thischunk,
int & chunksize,
425 const std::vector<NT> & medians,
const std::vector<IT> & nnzperc,
int itersuntil, std::vector< std::vector<NT> > & localmat,
426 const std::vector<IT> & actcolsmap, std::vector<IT> & klimits, std::vector<IT> & toretain, std::vector<std::vector<std::pair<IT,NT>>> & tmppair,
427 IT coffset,
const FullyDistVec<GIT,VT> & rvec)
const;
429 void GetPlaceInGlobalGrid(
IT& rowOffset,
IT& colOffset)
const;
431 void HorizontalSend(
IT * & rows,
IT * & cols,
NT * & vals,
IT * & temprows,
IT * & tempcols,
NT * & tempvals, std::vector < std::tuple <IT,IT,NT> > & localtuples,
432 int * rcurptrs,
int * rdispls,
IT buffperrowneigh,
int rowneighs,
int recvcount,
IT m_perproc,
IT n_perproc,
int rankinrow);
434 template <
class HANDLER>
435 void ReadAllMine(FILE * binfile,
IT * & rows,
IT * & cols,
NT * & vals, std::vector< std::tuple<IT,IT,NT> > & localtuples,
int * rcurptrs,
int * ccurptrs,
int * rdispls,
int * cdispls,
436 IT m_perproc,
IT n_perproc,
int rowneighs,
int colneighs,
IT buffperrowneigh,
IT buffpercolneigh,
IT entriestoread, HANDLER handler,
int rankinrow,
bool transpose);
438 void VerticalSend(
IT * & rows,
IT * & cols,
NT * & vals, std::vector< std::tuple<IT,IT,NT> > & localtuples,
int * rcurptrs,
int * ccurptrs,
int * rdispls,
int * cdispls,
439 IT m_perproc,
IT n_perproc,
int rowneighs,
int colneighs,
IT buffperrowneigh,
IT buffpercolneigh,
int rankinrow);
441 void AllocateSetBuffers(
IT * & rows,
IT * & cols,
NT * & vals,
int * & rcurptrs,
int * & ccurptrs,
int rowneighs,
int colneighs,
IT buffpercolneigh);
442 void BcastEssentials(MPI_Comm & world,
IT & total_m,
IT & total_n,
IT & total_nnz,
int master);
444 std::shared_ptr<CommGrid> commGrid;
447 template <
class IU,
class NU>
450 template <
typename IU,
typename NU,
typename UDER>
454template <
typename SR,
typename NUO,
typename UDERO,
typename IU,
typename NU1,
typename NU2,
typename UDER1,
typename UDER2>
455void PSpGEMM(
SpParMat<IU,NU1,UDER1> &
A,
SpParMat<IU,NU2,UDER2> &
B,
SpParMat<IU,NUO,UDERO> &
out,
bool clearA =
false,
bool clearB =
false)
460template <
typename SR,
typename IU,
typename NU1,
typename NU2,
typename UDER1,
typename UDER2>
462 PSpGEMM (SpParMat<IU,NU1,UDER1> &
A, SpParMat<IU,NU2,UDER2> &
B,
bool clearA =
false,
bool clearB =
false)
466 return Mult_AnXBn_Synch<SR, N_promote, DER_promote> (
A,
B, clearA, clearB );
NT read(std::basic_istream< c, t > &is, IT row, IT col)
NT getNoNum(IT row, IT col)
void save(std::basic_ostream< c, t > &os, const NT &v, IT row, IT col)
void binaryfill(FILE *rFile, IT &row, IT &col, NT &val)
void PruneFull(const FullyDistVec< IT, IT > &ri, const FullyDistVec< IT, IT > &ci)
prune all entries whose row indices are in ri OR column indices are in ci
friend SpParMat< IU, NUO, UDERO > Mult_AnXBn_Overlap(SpParMat< IU, NU1, UDER1 > &A, SpParMat< IU, NU2, UDER2 > &B, bool clearA, bool clearB)
bool Kselect2(FullyDistVec< GIT, VT > &rvec, IT k_limit) const
void EWiseScale(const DenseParMat< IT, NT > &rhs)
void ReadDistribute(const std::string &filename, int master, bool nonum=false, bool pario=false)
friend 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)
FullyDistVec< IT, std::array< char, MAXVERTNAME > > ReadGeneralizedTuples(const std::string &, _BinaryOperation)
void SaveGathered(std::string filename) const
void DimApply(Dim dim, const FullyDistVec< IT, NT > &v, _BinaryOperation __binary_op)
FullyDistVec< IT, NT > Reduce(Dim dim, _BinaryOperation __binary_op, NT id, _UnaryOperation __unary_op) const
SpParMat(DER *myseq, MPI_Comm &world)
friend std::ofstream & operator<<(std::ofstream &outfile, const SpParMat< IU, NU, UDER > &s)
SpParMat< IT, NT, DER > PruneI(_UnaryOperation __unary_op, bool inPlace=true)
SpParMat(IT total_m, IT total_n, const FullyDistVec< IT, IT > &, const FullyDistVec< IT, IT > &, const FullyDistVec< IT, NT > &, bool SumDuplicates=false)
friend 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, PreAllocatedSPA< OVT > &SPA)
SpParMat(const DistEdgeList< DELIT > &rhs, bool removeloops=true)
friend int64_t EstPerProcessNnzSUMMA(SpParMat< IU, NU1, UDERA > &A, SpParMat< IU, NU2, UDERB > &B, bool hashEstimate)
SpParMat< IT, NT, DER > SubsRefCol(const std::vector< IT > &ci) const
Column indexing with special parallel semantics.
bool operator==(const SpParMat< IT, NT, DER > &rhs) const
friend FullyDistSpVec< IU, typename promote_trait< NUM, NUV >::T_promote > SpMV(const SpParMat< IU, NUM, UDER > &A, const FullyDistSpVec< IU, NUV > &x)
friend 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 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)
std::vector< std::vector< SpParMat< IT, NT, DER > > > BlockSplit(int br, int bc)
void ReadDistribute(const std::string &filename, int master, bool nonum, HANDLER handler, bool transpose=false, bool pario=false)
SpParMat(IT total_m, IT total_n, const FullyDistVec< IT, IT > &, const FullyDistVec< IT, IT > &, const NT &, bool SumDuplicates=false)
bool Kselect(FullyDistVec< GIT, VT > &rvec, IT k_limit, int kselectVersion) const
FullyDistVec< IT, NT > Reduce(Dim dim, _BinaryOperation __binary_op, NT id) const
void MaskedReduce(FullyDistVec< GIT, VT > &rvec, FullyDistSpVec< GIT, VT > &mask, Dim dim, _BinaryOperation __binary_op, VT id, bool exclude=false) const
SpParMat(std::ifstream &input, MPI_Comm &world)
SpParMat< IT, NT, DER > PruneColumn(const FullyDistSpVec< IT, NT > &pvals, _BinaryOperation __binary_op, bool inPlace=true)
SpParMat< IT, NT, DER > SubsRef_SR(const FullyDistVec< IT, IT > &v, Dim dim, bool inplace=false)
void EWiseMult(const SpParMat< IT, NT, DER > &rhs, bool exclude)
DER::LocalIT getlocalcols() const
bool Kselect1(FullyDistSpVec< GIT, VT > &rvec, IT k_limit, _UnaryOperation __unary_op) const
bool Kselect1(FullyDistVec< GIT, VT > &rvec, IT k_limit) const
SpParMat< IT, NT, DER > Prune(_UnaryOperation __unary_op, bool inPlace=true)
void ActivateThreading(int numsplits)
void Find(FullyDistVec< IT, IT > &, FullyDistVec< IT, IT > &, FullyDistVec< IT, NT > &) const
float LoadImbalance() const
friend SpParMat< IU, NUO, UDERO > Mult_AnXBn_DoubleBuff(SpParMat< IU, NU1, UDER1 > &A, SpParMat< IU, NU2, UDER2 > &B, bool clearA, bool clearB)
void Reduce(FullyDistVec< GIT, VT > &rvec, Dim dim, _BinaryOperation __binary_op, VT id, _UnaryOperation __unary_op) const
void SetDifference(const SpParMat< IT, NT, DER > &rhs)
SpParMat(std::shared_ptr< CommGrid > grid)
SpParMat< IT, NT, DER > SubsRef_SR(const FullyDistVec< IT, IT > &ri, const FullyDistVec< IT, IT > &ci, bool inplace=false)
General indexing with serial semantics.
void SpAsgn(const FullyDistVec< IT, IT > &ri, const FullyDistVec< IT, IT > &ci, SpParMat< IT, NT, DER > &B)
void AddLoops(FullyDistVec< IT, NT > loopvals, bool replaceExisting=false)
bool Kselect(FullyDistSpVec< GIT, VT > &kth, IT k_limit, int kselectVersion) const
SpParMat< IT, NT, DER > & operator+=(const SpParMat< IT, NT, DER > &rhs)
void Dump(std::string filename) const
void UpdateDense(DenseParMat< IT, NT > &rhs, _BinaryOperation __binary_op) const
void Apply(_UnaryOperation __unary_op)
SpParMat(DER *myseq, std::shared_ptr< CommGrid > grid)
void Find(FullyDistVec< IT, IT > &, FullyDistVec< IT, IT > &) const
friend 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 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)
void AddLoops(NT loopval, bool replaceExisting=false)
void SaveGathered(std::string filename, HANDLER handler, bool transpose=false) const
SpParMat< IT, NT, DER > & operator=(const SpParMat< IT, NT, DER > &rhs)
void ParallelReadMM(const std::string &filename, bool onebased, _BinaryOperation BinOp)
DER::LocalIT getlocalrows() const
DER::LocalIT getlocalnnz() const
void ParallelBinaryWrite(std::string filename) const
friend int CalculateNumberOfPhases(SpParMat< IU, NU1, UDERA > &A, SpParMat< IU, NU2, UDERB > &B, NUO hardThreshold, IU selectNum, IU recoverNum, NUO recoverPct, int kselectVersion, int64_t perProcessMem)
bool Kselect1(FullyDistVec< GIT, VT > &rvec, IT k_limit, _UnaryOperation __unary_op) const
void OptimizeForGraph500(OptBuf< LIT, OT > &optbuf)
SpParMat(const SpParMat< IT, NT, DER > &rhs)
friend 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)
std::ofstream & put(std::ofstream &outfile) const
void ParallelWriteMM(const std::string &filename, bool onebased, HANDLER handler)
DER InducedSubgraphs2Procs(const FullyDistVec< IT, IT > &Assignments, std::vector< IT > &LocalIdxs) const
void Reduce(FullyDistVec< GIT, VT > &rvec, Dim dim, _BinaryOperation __binary_op, VT id) const
int Owner(IT total_m, IT total_n, IT grow, IT gcol, LIT &lrow, LIT &lcol) const
friend SpParMat< IU, NUO, UDERO > Mult_AnXBn_SUMMA(SpParMat< IU, NU1, UDER1 > &A, SpParMat< IU, NU2, UDER2 > &B, bool clearA, bool clearB)
void PruneColumnByIndex(const FullyDistSpVec< IT, IRRELEVANT_NT > &ci)
SpParMat< IT, NT, DER > PruneColumn(const FullyDistVec< IT, NT > &pvals, _BinaryOperation __binary_op, bool inPlace=true)
friend SpParMat< IU, NUO, UDERO > MemEfficientSpGEMM(SpParMat< IU, NU1, UDERA > &A, SpParMat< IU, NU2, UDERB > &B, int phases, NUO hardThreshold, IU selectNum, IU recoverNum, NUO recoverPct, int kselectVersion, int computationKernel, int64_t perProcessMem)
std::shared_ptr< CommGrid > getcommgrid() const
friend IU EstimateFLOP(SpParMat< IU, NU1, UDER1 > &A, SpParMat< IU, NU2, UDER2 > &B, bool clearA, bool clearB)
Friend declarations.
void MaskedReduce(FullyDistVec< GIT, VT > &rvec, FullyDistSpVec< GIT, VT > &mask, Dim dim, _BinaryOperation __binary_op, VT id, _UnaryOperation __unary_op, bool exclude=false) const
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
void ParallelWriteMM(const std::string &filename, bool onebased)
void SparseCommon(std::vector< std::vector< std::tuple< LIT, LIT, NT > > > &data, LIT locsize, IT total_m, IT total_n, _BinaryOperation BinOp)
friend SpParMat< IU, NUO, UDERO > Mult_AnXBn_Synch(SpParMat< IU, NU1, UDER1 > &A, SpParMat< IU, NU2, UDER2 > &B, bool clearA, bool clearB)
void PSpGEMM(SpParMat< IU, NU1, UDER1 > &A, SpParMat< IU, NU2, UDER2 > &B, SpParMat< IU, NUO, UDERO > &out, bool clearA=false, bool clearB=false)