CUDA에서 ID가 0-31, 32-63 인 스레드는 항상 같은 워프에서 실행됩니다. 그러나 OpenGL 스펙이나 위키에서는 비슷한 문장을 찾을 수 없습니다. OpenGL은 동일한 보증을 제공합니까? 아니면 대부분의 OpenGL 구현에 대해 가정하는 것이 안전합니까?OpenGL 계산 쉐이더 스레드는 어떻게 워프에 매핑됩니까?
1
A
답변
1
OpenGL 사양은 nVidia 특정 구현 세부 사항 인 warps에 대해서는 언급하지 않습니다. OpenGL은에서는
는 쉐이더가 호출작업으로 분할되는 용어. 작업 그룹의 셰이더 호출 수는 셰이더의 layout(local_size_x = X, local_size_y = Y, local_size_z = Z) in;
선언에 의해 지정됩니다. 작업 그룹 수는 glDispatchCompute
호출에 지정됩니다. CUDA warps에 매핑되는 방법은 구현 세부 사항 이며 사용자는으로 사용자에게 투명합니다.
1
Mali와 같은 ARM 기반 GPU (휴대폰)의 경우 워프가 없습니다. 오히려 모든 코어가 전체 픽셀 파이프 라인으로 이동합니다. 읽어보기 https://community.arm.com/groups/arm-mali-graphics/blog/2014/04/23/arm-mali-compute-architecture-fundamentals
성능면에서 볼 때 실제로는 투명하지 않습니다. 워프 디비전이 변경되면 공유 메모리 액세스 속도가 최대 32 배 느려질 수 있습니다 (NVIDIA 및 AMD 하드웨어에서) –
@HuazuoGao : 예, 가능할 수 있습니다. 그러나 OpenGL 사양은 그 중 어떤 것에 대해서도 알려주지 않습니다. 명세는 * 추상화 *입니다. –
@HuazuoGao : 사실, 구현이 하드웨어 리소스를 가장 효율적으로 할당한다고 가정하는 것이 합리적입니다. 정확한 thread-id ↔ warp 매핑은 실제로 낭비되지 않는다는 점에 유의하십시오. – ybungalobill