0
OpenCL에서 groupby 축소를 구현하고 싶습니다. 예를 들어, 입력OpenCL에서 Groupby 감소?
a1 a2 a3 b1 b2 c3 c4
는 C의 의사 코드는 다음과 같다
a6 b3 c7
생성 것이다 :
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;
이 방향으로 이동 I 알고있는 유일한 표준 알고리즘은 병렬 감소이다; 그러나 하나의 숫자로 줄어들고 그룹별로 추가 된 값의 버퍼로는 줄어들지 않습니다. 병렬 감소가 동적 결과 버퍼 (예 : 로컬 메모리)에서 작동하고 성능 측면에서 여전히 효율적인지 확신 할 수 없습니다.
Thrust의 [zip iterators] (http://code.google.com/p/thrust)와 비슷한 것을 시도해 보았습니까?/wiki/QuickStartGuide # zip_iterator)? 추력에는 OpenCL 지원이 없지만 CUDA 코드에서 영감을 얻을 수 있습니다. ZIP 반복기는 관심있는 것과 유사한 여러 출력 시퀀스를 허용합니다. – limes
IIUC zip 반복기는 단순히 예를 들어. n-tuple 데이터 세트를 줄이면 여전히 감소하지만 하나의 n-tuple 만 생성하고 n-tuples의 배열/목록은 생성하지 않습니다. –