2011-08-23 6 views
3

저는 쿠다 프로그래밍에 익숙하지 않으며 코드 작성시 한 패스에서 두 개 이상의 평균을 연속적으로 계산하는 알고리즘을 구현하는 데 관심이 있습니다. 쿠다에서 이런 일을하는 효율적인 계획은 무엇일까요?조건부 평균 계산하기

길이 N의 두 벡터, 요소 값 및 각 요소가 속하는 서브 세트를 식별하는 표시기 값이 있습니다.

한 번에이 작업을 수행하는 효율적인 방법이 있습니까? 또는 M 통과에서 수행해야합니까? 여기서 M은 계산할 평균 수이며 각 하위 집합의 요소 값에 대해 인덱스 키의 벡터를 사용합니까?

답변

3

thrust::reduce_by_key을 한 번 호출하면 데이터를 한 번 통과하여이 작업을 수행 할 수 있습니다. 특히 한 번에 여러 벡터의 통계 특성을 계산하는 "summary statistics" example을 살펴보십시오. 이 방법을 많은 서브 벡터에 대해 병렬로 감소를 계산하는 reduce_by_key으로 일반화 할 수 있습니다. "지표 값"은 각 요소가 속하는 하위 벡터를 결정할 때 사용하는 "키"입니다. reduce_by_key

+0

아주 좋습니다. 따라서 연속 키만 축소된다는 요구 사항을 어떻게 처리 할 것을 권장합니까? 어떻게 든 키를 사전 처리하거나 장치에서 reduce_by_key의 결과를 처리해야합니까? – darckeen

+1

reduce_by_key를 호출하기 전에 키를 정렬 (thrust :: sort_by_key)해야합니다. –

2

각 벡터를 더 작은 벡터로 분할하고 스레드를 사용하여 각 서브 벡터의 필수 요소를 합계합니다. 그런 다음 합계를 결합하고 전역 수단을 생성합니다. 나는 M 패스가 아니라 M 패스를 동시에 생성하려고 노력할 것입니다.