Cuda와 OpenCL의 GPU 스레드가 그리드에 할당되는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1342992

  •  20-09-2019
  •  | 
  •  

문제

난 그냥 배우고 있어요 Opencl, 그리고 나는 커널을 시작하려고 할 때 시점에 있습니다. GPU 스레드가 그리드에서 관리되는 이유는 무엇입니까?

나는 이것에 대한 자세한 내용을 자세히 읽을 것이지만 간단한 설명으로 좋을 것입니다. 함께 일할 때 항상 이런 것입니까? GPGPUS?

도움이 되었습니까?

해결책

이것은 Cuda, Opencl 및 Ati 스트림에서 사용되는 일반적인 접근법입니다.

그리드의 배후에있는 아이디어는 처리중인 데이터와 데이터 처리를 수행하는 스레드간에 간단하지만 유연한 매핑을 제공하는 것입니다. GPGPU 실행 모델의 간단한 버전에서 1D, 2D 또는 3D 데이터 그리드의 각 출력 요소에 대해 하나의 GPU 스레드가 "할당"됩니다. 이 출력 요소를 처리하기 위해 스레드는 입력 데이터 그리드의 해당 위치 또는 인접 위치에서 하나 이상의 요소를 읽습니다. 그리드에서 스레드를 구성하면 스레드가 읽을 데이터 요소를 입력하고 출력 데이터 요소를 저장할 위치를 쉽게 파악할 수 있습니다.

이는 하나의 스레드가 CPU 코어에 따라 할당되는 공통 멀티 코어 CPU 스레딩 모델과 대조되고 각 스레드는 많은 입력 및 출력 요소 (예 : 쿼드 코어 시스템의 데이터의 1/4)를 처리합니다.

다른 팁

간단한 대답은 GPU가 픽셀의 2D 그리드 인 이미지와 텍스처를 처리하도록 설계되었다는 것입니다. DirectX 또는 OpenGL에서 삼각형을 렌더링하면 하드웨어가 픽셀 그리드로 짜여집니다.

나는 둥근 구멍에 정사각형 페그를 넣는 고전적인 비유를 불러 일으킬 것이다. 글쎄,이 경우 GPU는 매우 정사각형 구멍이며 GP (범용)가 제안한 것만 큼 잘 둥글 지 않습니다.

위의 설명은 2D 텍스처의 아이디어 등을 제시합니다. GPU의 아키텍처는 모든 처리가 각 스트림에서 파이프 라인이 동일 한 스트림에서 수행되므로 처리되는 데이터를 이와 같이 분류해야합니다.

이것이 멋진 API 인 이유 중 하나는 일반적으로 여러 개의 중첩 루프가있는 알고리즘으로 작업하고 있기 때문입니다. 1, 2 또는 3 개의 루프가있는 경우 1, 2 또는 3 차원의 그리드가 문제에 잘 맵핑되어 각 인덱스의 값에 대한 스레드를 제공합니다.

따라서 커널 (인덱스 값)에 필요한 값은 API에서 자연스럽게 표현됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top