80 numSum_0(nsum), numMin_1(nmin1), numMin_2(nmin2), partVector(NULL),
81 vectorBegin(0), k(k_), reductionType(0){}
86 numSum_0(0), numMin_1(0), numMin_2(0), partVector(pVector),
87 vectorBegin(vBegin), k(k_), reductionType(1){}
92 void reduce(
const Ordinal ,
const T inBuffer[], T inoutBuffer[])
const
94 if (reductionType == 0){
96 for(Ordinal ii = 0; ii < k ; ++ii){
97 for (Ordinal i=0; i < numSum_0; i++, next++)
98 inoutBuffer[next] += inBuffer[next];
100 for (Ordinal i=0; i < numMin_1; i++, next++)
101 if (inoutBuffer[next] < inBuffer[next])
102 inoutBuffer[next] = inBuffer[next];
104 for (Ordinal i=0; i < numMin_2; i++, next++)
105 if (inoutBuffer[next] > inBuffer[next])
106 inoutBuffer[next] = inBuffer[next];
111 for(Ordinal ii = 0; ii < k ; ++ii){
112 Ordinal partPartition = (*partVector)[ii + vectorBegin];
113 Ordinal tnumSum_ = 2 * partPartition - 1;
114 Ordinal tnumMin_1 = partPartition - 1;
115 Ordinal tnumMin_2 = tnumMin_1 ;
116 for (Ordinal i=0; i < tnumSum_; i++, next++)
117 inoutBuffer[next] += inBuffer[next];
119 for (Ordinal i=0; i < tnumMin_1; i++, next++)
120 if (inoutBuffer[next] < inBuffer[next])
121 inoutBuffer[next] = inBuffer[next];
123 for (Ordinal i=0; i < tnumMin_2; i++, next++)
124 if (inoutBuffer[next] > inBuffer[next])
125 inoutBuffer[next] = inBuffer[next];