Programming/openCL & CUDA2011. 1. 22. 00:11
CUDA를 보면서 헷갈리는 것은
nvidia의 문서라고 해도 버전에 따라서 용어가 혼용이 되어있기 때문이다.

현재로서 가장 혼동을 일으키는 용어는 바로 grid / block / thread 이다.
DeiveQurey 프로그램에서 주는 값들 중, 위의 녀석들의 Dimension(차수)이 바로 범인인데..
여러가지 프리젠테이션들과 문서들을 조합할수록 불일치가 발생을 해서 머리를 아프게 한다.

아무튼 Grid는 Block들로 구성되므로, Grid의 최대 차수는
Block의 차수를 의미하고, Block은 2차원 내지는 1차원으로만 구성이 된다.
그리고 Block은 65535x65535x1 개 까지 구성이 가능하다.

개별 Block은 thread로 구성이 되며, 블럭은 개별 MultiProcessor에 제한된다.
8800GT의 경우 1개의 MP에 512개의 Thread 들이 존재하며,
그런 이유로 3차원으로 구성을 한다고 해도 x*y*z의 곱은 512를 넘을수 없다.
(물론 상위 버전은 768까지 제한이 조금 커진다)

다시 정리하자면
Maximum number of threads per block:           512
Maximum sizes of each dimension of a block:    512 x 512 x 64
위의 값은, 블럭의 최대 차수는 3차원으로 512*512*64 이지만
세 차수의 곱이 512를 넘을수는 없다라는 의미이다.

Maximum sizes of each dimension of a grid:     65535 x 65535 x 1
block은 2차원으로 65535x65535를 넘을 수 없다는 의미이다.

Posted by 구차니