DeviceQuery 프로그램을 실행하면 다음과 같은 내용이 나온다.
Maximum sizes of each dimension of a block: 512 x 512 x 64
Maximum sizes of each dimension of a grid: 65535 x 65535 x 1
|
블럭의 차원은 512x512x64 3차원으로 구성이 가능하고
그리드의 차원은 65535x65535x1 2차원으로 구성이 가능하다.
여전히 그리드와 블럭 쓰레드, 이러한 연관관계가 확실히 정립된게 아니라 헷갈리지만
kernel<<<block,thread>>>(agrs) 에서
그리드의 차원은 block 이고
블럭의 차원은 thread 인거 같은데(아무래도 차수가 제한된게 같으니까)
실제로 존재하는 쓰레드의 갯수라던가, 멀티프로세서의 갯수를 감안하면 절대 불가능한 수치이다.
8800GT의 경우
14개의 멀티프로세서와 개당 8개씩의 코어(쓰레드 블럭)이 존재함으로
총 112개의 쓰레드 블럭이 존재하기 때문에
물리적으로는 블럭의 차원은 14x8x1 정도가 한계라고 볼 수 있다.
하지만, 논리적으로는 한번의 처리단위가 14x8x1 이므로
X/Y/Z 차원으로 n번씩 반복하게 되면 돌릴수 있게 되고 이럴경우
X차원으로는 37번
Y차원으로 64번
Z차원으로 64번 이런식으로 더 반복하게 하면 무리없이 가능하다.
내부적으로 BlockIdx 라는 변수만 thread block 에서 값만 바꾸어서 넘겨주면 되니까 말이다.
결론 : 위에서 명시되는 최대차원은 논리적으로 제한을 둔 값으로 생각된다.
'Programming > openCL & CUDA' 카테고리의 다른 글
cuBLAS / BLAS Level 1,2,3 (0) | 2011.01.24 |
---|---|
CUDA 관련 해외글 (0) | 2011.01.22 |
CUDA 3.1과 3.2의 devicequery 결과 차이점 (0) | 2011.01.18 |
vectorAdd 를 이용한 CUDA 연습 (0) | 2011.01.18 |
CUDA 메모리별 범위(scope) (0) | 2011.01.17 |