40template <
class IT,
class VT>
52 diagneigh = cg->GetComplementRank();
68 local_offset =
x.LengthUntil();
72 word_dpls =
new int[colneighs];
73 byte_dpls =
new int[colneighs];
74 send_counts =
new int[colneighs];
75 for (
int c=0; c<colneighs; c++) {
76 word_dpls[c] = (
dpls[c] + (64-(
dpls[c]%64)))>>6;
77 byte_dpls[c] = word_dpls[c]<<3;
78 send_counts[c] = (
counts[c] - (64-(
dpls[c] % 64)) + 63)>>6;
82 trans_subword_disp =
dpls[colrank] % 64;
101 delete[] send_counts;
109 local_bm->
set_bit(
spit.GetLocIndex() + local_subword_disp);
110 local_num_set =
x.getlocnnz();
116 local_bm->
set_bit(
updates[i] - local_offset + local_subword_disp);
121 local_num_set = next_num_set;
155 gather_bm->
data()[0] = 0;
157 firsts[colrank] = trans_bm->
data()[0];
159 for (
int c=0; c<colneighs; c++)
160 gather_bm->
data()[word_dpls[c]-1] |= firsts[c];
193 return local_subword_disp;
201 std::shared_ptr<CommGrid> cg;
215 int local_subword_disp;
216 int trans_subword_disp;
217 long trans_words_send;
218 long trans_words_recv;
double bottomup_allgather
void LoadFromSpVec(FullyDistSpVec< IT, VT > &x)
BitMapFringe(std::shared_ptr< CommGrid > grid, FullyDistSpVec< IT, VT > &x)
void LoadFromUpdates(IT *updates, long total_updates)
void IncrementNumSet(int num_updates)
void UpdateSpVec(FullyDistSpVec< IT, VT > &x)
BitMap * TransposeGather()
void SetNext(IT local_index)
bool get_bit(uint64_t pos)
void set_bit(uint64_t pos)
long get_next_bit(uint64_t pos)