44 numSum_0(nsum), numMin_1(nmin1), numMin_2(nmin2), partVector(NULL),
45 vectorBegin(0), k(k_), reductionType(0){}
50 numSum_0(0), numMin_1(0), numMin_2(0), partVector(pVector),
51 vectorBegin(vBegin), k(k_), reductionType(1){}
56 void reduce(
const Ordinal ,
const T inBuffer[], T inoutBuffer[])
const
58 if (reductionType == 0){
60 for(Ordinal ii = 0; ii < k ; ++ii){
61 for (Ordinal i=0; i < numSum_0; i++, next++)
62 inoutBuffer[next] += inBuffer[next];
64 for (Ordinal i=0; i < numMin_1; i++, next++)
65 if (inoutBuffer[next] < inBuffer[next])
66 inoutBuffer[next] = inBuffer[next];
68 for (Ordinal i=0; i < numMin_2; i++, next++)
69 if (inoutBuffer[next] > inBuffer[next])
70 inoutBuffer[next] = inBuffer[next];
75 for(Ordinal ii = 0; ii < k ; ++ii){
76 Ordinal partPartition = (*partVector)[ii + vectorBegin];
77 Ordinal tnumSum_ = 2 * partPartition - 1;
78 Ordinal tnumMin_1 = partPartition - 1;
79 Ordinal tnumMin_2 = tnumMin_1 ;
80 for (Ordinal i=0; i < tnumSum_; i++, next++)
81 inoutBuffer[next] += inBuffer[next];
83 for (Ordinal i=0; i < tnumMin_1; i++, next++)
84 if (inoutBuffer[next] < inBuffer[next])
85 inoutBuffer[next] = inBuffer[next];
87 for (Ordinal i=0; i < tnumMin_2; i++, next++)
88 if (inoutBuffer[next] > inBuffer[next])
89 inoutBuffer[next] = inBuffer[next];