0
我想在OpenCL中实现groupby缩减。例如,输入Groupby减少OpenCL?
a1 a2 a3 b1 b2 c3 c4
将产生
a6 b3 c7
的C伪代码如下所示:
int data[n][2], result[n][2], result_count = -1,
added = 0, group = data[0][0];
for (int i = 0; i < n; i++) {
if (group == data[i][0]) {
added += data[i][1];
} else {
result[++result_count][0] = group;
result[result_count][1] = added;
group = data[i][0];
added = 0;
}
}
return result, result_count;
唯一标准算法我知道它出现在此方向平行减少;然而,它减少到一个数字,而不是按组来增加值的缓冲区。我不确定并行压缩是否可以与动态结果缓冲区一起工作(例如在本地内存中),并且在性能方面仍然很有效。
您是否考虑尝试类似于Thrust的[zip迭代器](http://code.google.com/p/thrust /维基/ QuickStartGuide#zip_iterator)? Thrust没有OpenCL支持,但你可以从他们的CUDA代码中获得灵感。 Zip迭代器允许多个输出序列与您感兴趣的类似。 – limes 2012-08-09 18:26:20
IIUC zip迭代器仅提供一种执行使用n元组数据集的减少,但减少仍然会产生只有一个n元组而不是n元组的数组/列表。 – 2012-08-10 00:00:55