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