2012-07-11 6 views
4

CUDA에는 워프 내에서 모든 레인 (일반적으로 32의 크기)에 걸쳐 워프 투표 작업을 수행하기 위해 __ballot(), __any(), __all(), __popc() 및 일련의 lanemask 기능이 있습니다. 하나의 wavefront 내에서 동일한 작업을 수행하기 위해 OpenCL에 구현 된 그러한 함수가 있는지 궁금합니다. 그러한 함수가 없다면, 내 프로젝트에서 사용할 인라인 함수로 직접 구현해야 할 수도 있습니다.OpenCL에 워프 투표 기능이 있습니까?

답변

3

OpenCL v. 1.1 specification, 6.11 "기본 제공 함수"섹션에 따르면, 대답은 '아니오'라고 생각합니다.

그러나 NVIDIA GPU에서는 인라인 PTX를 사용하여 이러한 작업을 구현할 수 있습니다 (또는 적어도 this blogger was able to use inline PTX 이상).

+0

실제로이 질문을 제기 한 후에 OpenCL의 크로스 플랫폼 기능으로 인해 이러한 내장 함수가 없을 것임을 깨달았습니다. 모든 하드웨어 특정 기능 구현은 받아 들일 수 없을 것입니다. 그러나 당신의 마지막 코멘트는 나에게 희망을 준다. AMD의 하드웨어를 위해 AMD의 일리노이를 사용하여 인라인 함수를 만들었다면 행복 할 것입니다 :-P – gpunerd

+0

예,하지만 아마도 nvidia에서는 인라인 어셈블러를, 다른 모든 경우에는 opencl을 사용할 수 있습니다 –

2

실제로 OpenCL subgroups을 확인하십시오. 그들은 sub_group_all()sub_group_any()과 같은 몇 가지 교차 차선 기능뿐만 아니라 다른 흥미로운 것을 정의합니다.

하위 그룹은 비교적 새로운 그룹이며 누구나 지원합니다. Intel GPU 구현 (실제로 확장)에는 명시 적 블록 쓰기 및 읽기뿐 아니라 (레지스터 파일 내에서) 레인을 바꾸기위한 몇 가지 더 흥미로운 shuffling functions이 있습니다. AMD가 서브 그룹도 지원할 것이라고 확신하지만, NVidia에 대해서는 확신하지 못합니다.