작업 그룹 수를 CL_DEVICE_MAX_COMPUTE_UNITS
과 동일하게 설정하면 일부 하드웨어에 대한 건전한 조언 일 수 있지만 NVIDIA GPU에서는 이이 아닙니다.
CUDA 아키텍처에서 OpenCL 계산 단위는 멀티 프로세서 (8 코어, 32 코어 또는 48 코어를 포함 할 수 있음)와 동일하며 최대 8 개의 작업 그룹 (블록 단위)을 실행할 수 있도록 설계되었습니다. CUDA) 각. 더 큰 입력 데이터 크기에서는 수천 개의 작업 그룹을 실행하도록 선택할 수 있으며 특정 GPU는 커널 시작 당 최대 65535 x 65535 개의 작업 그룹을 처리 할 수 있습니다.
OpenCL에는 다른 장치 속성 CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE
이 있습니다. NVIDIA 장치에서이 값을 쿼리하면 32를 반환합니다 (이 값은 "워프"또는 하드웨어의 고유 한 SIMD 너비입니다). 이 값은 사용할 작업 그룹 크기의 배수입니다. 작업 그룹 크기는 각 작업 항목에서 사용하는 리소스에 따라 최대 512 개의 항목이 될 수 있습니다. 특정 GPU의 표준 규칙은 아키텍쳐의 모든 대기 시간을 커버하기 위해 계산 단위 (CUDA 용어로 다중 프로세서 당 스레드) 당 192 개 이상의 활성 작업 항목이 필요하며 잠재적으로 전체 메모리 대역폭 또는 전체 산술 처리량을 얻을 수 있다는 것입니다 코드의 특성에 따라 달라집니다.
NVIDIA는 CUDA 툴킷에서 "OpenCL Programming for the CUDA Architecture"라는 훌륭한 문서를 제공합니다. NVIDIA OpenCL 구현이 하드웨어 기능에 어떻게 매핑되는지에 대한 자세한 내용이 포함되어 있기 때문에 약간의 시간을 들여 읽어야합니다. 여기에서 제기 한 질문에 대한 답변을 얻을 수 있습니다.
감사합니다. – rdoubleui