16template <
typename RT,
typename IT,
typename NT>
23#pragma omp parallel for
39template<
class IT,
class NT>
44 std::vector<std::tuple<IT, IT, int>>
heap(
nlists);
47 for(
int i=0; i<
nlists; ++i)
93template<
class SR,
class IT,
class NT>
98 std::vector<std::tuple<IT, IT, int>>
heap(
nlists);
102 for(
int i=0; i<
nlists; ++i)
146template<
class SR,
class IT,
class NT>
163 std::tuple<IT, IT, NT>*
mergeTups =
static_cast<std::tuple<IT, IT, NT>*
>
164 (::operator
new (
sizeof(std::tuple<IT, IT, NT>[
ArrSpTups[0]->getnnz()])));
166#pragma omp parallel for
168 for(
int i=0; i<
ArrSpTups[0]->getnnz(); i++)
176 for(
int i=0; i<
nlists; ++i)
180 std::cerr <<
"Dimensions of SpTuples do not match on multiwayMerge()" << std::endl;
194 std::vector< std::vector<IT> >
colPtrs;
195 for(
int i=0; i<
nlists; i++)
204#pragma omp parallel for schedule(dynamic)
209 IT t =
static_cast<IT>(0);
229 std::ostringstream
outs;
230 outs <<
"Multiwaymerge: inputNnz/mergedNnz = " <<
ratio << std::endl;
236 std::tuple<IT, IT, NT> *
mergeBuf =
static_cast<std::tuple<IT, IT, NT>*
> (::operator
new (
sizeof(std::tuple<IT, IT, NT>[
mergedNnzAll])));
240#pragma omp parallel for schedule(dynamic)
253 for(
int i=0; i<
nlists; i++)
static void Print(const std::string &s)
void SerialMerge(const std::vector< SpTuples< IT, NT > * > &ArrSpTups, std::tuple< IT, IT, NT > *ntuples)
IT SerialMergeNNZ(const std::vector< SpTuples< IT, NT > * > &ArrSpTups)
SpTuples< IT, NT > * MultiwayMerge(std::vector< SpTuples< IT, NT > * > &ArrSpTups, IT mdim=0, IT ndim=0, bool delarrs=false)
std::vector< RT > findColSplitters(SpTuples< IT, NT > *&spTuples, int nsplits)