18 template <
class NT,
class IT>
22 BiCsb ():nz(0), m(0), n(0), nbc(0), nbr(0) {}
24 BiCsb (IT size,IT rows, IT cols,
int workers);
25 BiCsb (IT size,IT rows, IT cols, IT * ri, IT * ci, NT * val,
int workers, IT forcelogbeta = 0);
32 ofstream & PrintStats(ofstream & outfile)
const;
36 bool isPar()
const {
return ispar; }
39 void Init(
int workers, IT forcelogbeta = 0);
41 template <
typename SR,
typename RHS,
typename LHS>
42 void SubSpMV(IT * btop, IT bstart, IT bend,
const RHS * __restrict x, LHS * __restrict suby)
const;
44 template <
typename SR,
typename RHS,
typename LHS>
45 void SubSpMVTrans(IT col, IT rowstart, IT rowend,
const RHS * __restrict x, LHS * __restrict suby)
const;
47 template <
typename SR,
typename RHS,
typename LHS>
48 void SubSpMVTrans(
const vector< tuple<IT,IT,IT> > & chunk,
const RHS * __restrict x, LHS * __restrict suby)
const;
50 template <
typename SR,
typename RHS,
typename LHS>
51 void BMult(IT** chunks, IT start, IT end,
const RHS * __restrict x, LHS * __restrict y, IT ysize)
const;
53 template <
typename SR,
typename RHS,
typename LHS>
54 void BTransMult(vector< vector< tuple<IT,IT,IT> > * > & chunks, IT start, IT end,
const RHS * __restrict x, LHS * __restrict y, IT ysize)
const;
56 template <
typename SR,
typename RHS,
typename LHS>
57 void BlockPar(IT start, IT end,
const RHS * __restrict subx, LHS * __restrict suby,
58 IT rangebeg, IT rangeend, IT cutoff)
const;
60 template <
typename SR,
typename RHS,
typename LHS>
61 void BlockParT(IT start, IT end,
const RHS * __restrict subx, LHS * __restrict suby,
62 IT rangebeg, IT rangeend, IT cutoff)
const;
64 void SortBlocks(pair<IT, pair<IT,IT> > * pairarray, NT * val);
91 template <
typename SR,
typename NU,
typename IU,
typename RHS,
typename LHS>
94 template <
typename SR,
typename NU,
typename IU,
typename RHS,
typename LHS>
100 template <
typename NU,
typename IU>
110 BiCsb ():nz(0), m(0), n(0), nbc(0), nbr(0) {}
112 BiCsb (IT size,IT rows, IT cols,
int workers);
113 BiCsb (IT size,IT rows, IT cols, IT * ri, IT * ci,
int workers, IT forcelogbeta = 0);
119 template <
typename NT>
125 bool isPar()
const {
return ispar; }
128 void Init(
int workers, IT forcelogbeta = 0);
130 template <
typename SR,
typename RHS,
typename LHS>
131 void SubSpMV(IT * btop, IT bstart, IT bend,
const RHS * __restrict x, LHS * __restrict suby)
const;
133 template <
typename SR,
typename RHS,
typename LHS>
134 void SubSpMVTrans(IT col, IT rowstart, IT rowend,
const RHS * __restrict x, LHS * __restrict suby)
const;
136 template <
typename SR,
typename RHS,
typename LHS>
137 void SubSpMVTrans(
const vector< tuple<IT,IT,IT> > & chunk,
const RHS * __restrict x, LHS * __restrict suby)
const;
139 template <
typename SR,
typename RHS,
typename LHS>
140 void BMult(IT ** chunks, IT start, IT end,
const RHS * __restrict x, LHS * __restrict y, IT ysize)
const;
142 template <
typename SR,
typename RHS,
typename LHS>
143 void BTransMult(vector< vector< tuple<IT,IT,IT> > * > & chunks, IT start, IT end,
const RHS * __restrict x, LHS * __restrict y, IT ysize)
const;
145 template <
typename SR,
typename RHS,
typename LHS>
146 void BlockPar(IT start, IT end,
const RHS * __restrict subx, LHS * __restrict suby,
147 IT rangebeg, IT rangeend, IT cutoff)
const;
149 template <
typename SR,
typename RHS,
typename LHS>
150 void BlockParT(IT start, IT end,
const RHS * __restrict subx, LHS * __restrict suby,
151 IT rangebeg, IT rangeend, IT cutoff)
const;
153 void SortBlocks(pair<IT, pair<IT,IT> > * pairarray);
179 template <
typename SR,
typename NU,
typename IU,
typename RHS,
typename LHS>
182 template <
typename SR,
typename NU,
typename IU,
typename RHS,
typename LHS>
188 template <
typename NU,
typename IU>
void bicsb_gespmv(const BiCsb< NT, IT > &A, const RHS *__restrict x, LHS *__restrict y)
float ColImbalance(const BiCsb< NT, IT > &A)
void bicsb_gespmvt(const BiCsb< NT, IT > &A, const RHS *__restrict x, LHS *__restrict y)
float RowImbalance(const CSB &A)