5 #ifndef REDUCE_COMMON_HELPERS_H
6 #define REDUCE_COMMON_HELPERS_H
17 template <
typename ReduceFunc,
typename T>
21 size_t rowsPerThread=rows/numThreads;
22 size_t restRows = rows%numThreads;
25 size_t firstRow, lastRow;
29 #pragma omp parallel private(myid, firstRow, lastRow, psum) default(shared)
31 myid = omp_get_thread_num();
33 firstRow = myid*rowsPerThread;
36 firstRow += (myid<restRows)? myid:restRows;
39 lastRow = firstRow+rowsPerThread+1;
41 lastRow = firstRow+rowsPerThread;
43 for(
size_t r= firstRow; r<lastRow; ++r)
47 size_t size= it.size();
52 for(
size_t c=1; c<size; c++)
54 psum = reduceFunc->CPU(psum, it[c]);
60 result_array[r] = psum;
70 template <
typename ReduceFunc,
typename T>
78 #pragma omp parallel for private(psum) default(shared) schedule(runtime)
79 for(
size_t r= 0; r<rows; ++r)
83 size_t size= it.size();
88 for(
size_t c=1; c<size; c++)
90 psum = reduceFunc->CPU(psum, it[c]);
96 result_array[r] = psum;
A sparse matrix container class that mainly stores its data in CSR format.
Definition: sparse_matrix.h:73
iterator begin(unsigned row)
Definition: sparse_matrix.inl:346
size_t total_rows() const
Definition: sparse_matrix.h:336
An sparse matrix iterator class that tranverses row-wise.
Definition: sparse_matrix_iterator.inl:20
void ompRegularWorkload(ReduceFunc *reduceFunc, SparseMatrix< T > &input, T *result_array, const unsigned int &numThreads)
Definition: reduce_common.h:18
void ompIrregularWorkload(ReduceFunc *reduceFunc, SparseMatrix< T > &input, T *result_array)
Definition: reduce_common.h:71