40template <
class IT,
class NT>
43template <
class IT,
class NT>
46template <
class SR,
class IT,
class NUM,
class IVT,
class OVT>
50template <
class SR,
class IT,
class NUM,
class IVT,
class OVT>
52 std::vector<int32_t> & indy, std::vector< OVT > & numy, PreAllocatedSPA<OVT> & SPA)
55 SpImpl<SR,IT,NUM,IVT,OVT>::SpMXSpV(Adcsc, mA, indx, numx, veclen, indy, numy);
60template <
class SR,
class IT,
class NUM,
class IVT,
class OVT>
62 int32_t * indy, OVT * numy,
int * cnts,
int * dspls,
int p_c)
64 SpImpl<SR,IT,NUM,IVT,OVT>::SpMXSpV(Adcsc, mA, indx, numx, veclen, indy, numy, cnts, dspls,p_c);
69template <
class SR,
class IT,
class NUM,
class IVT,
class OVT>
71 std::vector<int32_t> & indy, std::vector< OVT > & numy,
int32_t offset)
73 SpImpl<SR,IT,NUM,IVT,OVT>::SpMXSpV_ForThreading(Adcsc, mA, indx, numx, veclen, indy, numy, offset);
77template <
class SR,
class IT,
class NUM,
class IVT,
class OVT>
79 std::vector<int32_t> & indy, std::vector< OVT > & numy,
int32_t offset, std::vector<OVT> & localy, BitMap & isthere, std::vector<uint32_t> & nzinds)
81 SpImpl<SR,IT,NUM,IVT,OVT>::SpMXSpV_ForThreading(Adcsc, mA, indx, numx, veclen, indy, numy, offset, localy, isthere, nzinds);
96template <
typename SR,
typename IT,
typename NUM,
typename IVT,
typename OVT>
100template <
class SR,
class IT,
class NUM,
class IVT,
class OVT>
101void SpMXSpV_Bucket(
const Csc<IT,NUM> & Acsc,
int32_t mA,
const int32_t * indx,
const IVT * numx,
int32_t veclen,std::vector<int32_t> & indy, std::vector< OVT > & numy, PreAllocatedSPA<OVT> & SPA);
106template <
class SR,
class IT,
class NUM,
class IVT,
class OVT>
108 int32_t * indy, OVT * numy,
int * cnts,
int * dspls,
int p_c)
110 std::cout <<
"Optbuf enabled version is not yet supported with CSC matrices" << std::endl;
115template <
class SR,
class IT,
class NUM,
class IVT,
class OVT>
117 std::vector<int32_t> & indy, std::vector< OVT > & numy, PreAllocatedSPA<OVT> & SPA)
120 SpMXSpV_Bucket<SR>(Acsc, mA, indx, numx, veclen, indy, numy, SPA);
122 SpMXSpV_HeapSort<SR>(Acsc, mA, indx, numx, veclen, indy, numy, 0);
127template <
class SR,
class IT,
class NUM,
class IVT,
class OVT>
129 std::vector<int32_t> & indy, std::vector< OVT > & numy,
int32_t offset)
131 SpMXSpV_HeapSort<SR>(Acsc, mA, indx, numx, veclen, indy, numy, offset);
135template <
class SR,
class IT,
class NUM,
class IVT,
class OVT>
137 std::vector<int32_t> & indy, std::vector< OVT > & numy,
int32_t offset, std::vector<OVT> & localy, BitMap & isthere, std::vector<uint32_t> & nzinds)
140 SpMXSpV_HeapSort<SR>(Acsc, mA, indx, numx, veclen, indy, numy, offset);
155template <
class SR,
class IT,
class NUM,
class IVT,
class OVT>
159 std::vector<int32_t> &
indy, std::vector< OVT > &
numy);
164 std::cout <<
"Optbuf enabled version is not yet supported with general (non-boolean) matrices" << std::endl;
171 std::cout <<
"Threaded version is not yet supported with general (non-boolean) matrices" << std::endl;
176 std::cout <<
"Threaded version is not yet supported with general (non-boolean) matrices" << std::endl;
183template <
class SR,
class IT,
class IVT,
class OVT>
184struct SpImpl<
SR,
IT,bool, IVT, OVT>
187 std::vector<int32_t> &
indy, std::vector< OVT > &
numy);
SelectMaxSRing< bool, int64_t > SR
void SpMXSpV_Bucket(const Csc< IT, NT > &Acsc, int32_t mA, const int32_t *indx, const IVT *numx, int32_t veclen, std::vector< int32_t > &indy, std::vector< OVT > &numy, PreAllocatedSPA< OVT > &SPA)
void SpMXSpV_ForThreading(const Dcsc< IT, NUM > &Adcsc, int32_t mA, const int32_t *indx, const IVT *numx, int32_t veclen, std::vector< int32_t > &indy, std::vector< OVT > &numy, int32_t offset)
Overload #3: DCSC.
void SpMXSpV(const Dcsc< IT, NUM > &Adcsc, int32_t mA, const int32_t *indx, const IVT *numx, int32_t veclen, std::vector< int32_t > &indy, std::vector< OVT > &numy, PreAllocatedSPA< OVT > &SPA)
Overload #1: DCSC.
void SpMXSpV_HeapSort(const Csc< IT, NT > &Acsc, int32_t mA, const int32_t *indx, const IVT *numx, int32_t veclen, std::vector< int32_t > &indy, std::vector< OVT > &numy, int32_t offset)
static void SpMXSpV(const Dcsc< IT, bool > &Adcsc, int32_t mA, const int32_t *indx, const IVT *numx, int32_t veclen, std::vector< int32_t > &indy, std::vector< OVT > &numy)
static void SpMXSpV(const Dcsc< IT, bool > &Adcsc, int32_t mA, const int32_t *indx, const IVT *numx, int32_t veclen, int32_t *indy, OVT *numy, int *cnts, int *dspls, int p_c)
static void SpMXSpV_ForThreading(const Dcsc< IT, bool > &Adcsc, int32_t mA, const int32_t *indx, const IVT *numx, int32_t veclen, std::vector< int32_t > &indy, std::vector< OVT > &numy, int32_t offset)
Dcsc and vector index types do not need to match.
static void SpMXSpV_ForThreading(const Dcsc< IT, bool > &Adcsc, int32_t mA, const int32_t *indx, const IVT *numx, int32_t veclen, std::vector< int32_t > &indy, std::vector< OVT > &numy, int32_t offset, std::vector< OVT > &localy, BitMap &isthere, std::vector< uint32_t > &nzinds)
Dcsc and vector index types do not need to match.
static void SpMXSpV(const Dcsc< IT, NUM > &Adcsc, int32_t mA, const int32_t *indx, const IVT *numx, int32_t veclen, std::vector< int32_t > &indy, std::vector< OVT > &numy)
static void SpMXSpV(const Dcsc< IT, NUM > &Adcsc, int32_t mA, const int32_t *indx, const IVT *numx, int32_t veclen, std::vector< int32_t > &indy, std::vector< OVT > &numy)
static void SpMXSpV(const Dcsc< IT, NUM > &Adcsc, int32_t mA, const int32_t *indx, const IVT *numx, int32_t veclen, int32_t *indy, OVT *numy, int *cnts, int *dspls, int p_c)
static void SpMXSpV_ForThreading(const Dcsc< IT, NUM > &Acsc, int32_t mA, const int32_t *indx, const IVT *numx, int32_t veclen, std::vector< int32_t > &indy, std::vector< OVT > &numy, int32_t offset, std::vector< OVT > &localy, BitMap &isthere, std::vector< uint32_t > &nzinds)
static void SpMXSpV_ForThreading(const Dcsc< IT, NUM > &Adcsc, int32_t mA, const int32_t *indx, const IVT *numx, int32_t veclen, std::vector< int32_t > &indy, std::vector< OVT > &numy, int32_t offset)