티스토리 뷰

전공/MFC 삽질들..

Cuda threadIdx, blockIdx

무한공백 2010. 11. 23. 11:29

혼자 공부한것이라 틀릴수도 있어요. ^^;;

threadIdx 는 블럭 내에서의 스레드의 위치를 나타내고
blockIdx 는 그리드 내에서 블럭의 위치를 나타낸다.


2*2의 블럭내에 2*2의 스레드(총 4개 )가 있다면, threadIdx는 블럭내의 인덱스 이므로 아래와 같다.
(블럭(0,0) Thead(00,10,01,11) 총 4개를 가진다는 예제의 그림임)


서로 다른 블럭내의 스레드는 모두 동일한 인덱스를 가진다.
따라서, 작업하는 실제 스레드 위치를 알기 위해서는 다음과 같이 계산해 줘야 한다.

int work_x = blockIdx.x * blockDim.x + threadIdx.x;
int work_y = blockIdx.y * blockDim.y + threadIdx.y;

여기서 blockDim은 자신이 지정해준 블럭내의 스레드 크기이다.


dim3 blockPerGrid(2,2) // Grid 안의 블록 갯수, 현재는 2행2열 개의 block이 존재한다. 
dim3 threadPerBlock(2,2) //Block 안의 스레드 갯수, 현재는 2행2열 개의 thread가 존재한다.
test <<< blockPerGrid, threadPerBlock >>> ,,,,,

이경우 blockDim.x = 2 blockDim.y = 2; 즉, block내의 스레드 갯수를 의미한다. 따라서,

실질적인 작업 위치는 아래와 같이 계산된다.
(work_x와 work_y가 실제 스레드의 인덱스라 할 수 있음, 위의 work_x, y 구하는 식에 blockIdx.x 넣고 blockDim.x 넣고 , threadIdx.x 넣고 계산해 보시면 금방 알수 있어요. 실제 인덱스 스레드의 인덱스를 가르키는 것 뿐이지 별거 아닙니다.... 어려우실까요?..)


공부하면서 하는거라 틀린 부분이 있을 지도 있습니다.

'전공 > MFC 삽질들..' 카테고리의 다른 글

MFC 상호 참조  (0) 2011.06.15
CScrollView 기본 설정  (0) 2011.06.10
[MFC] OnFileOpen 함수 재정의 해서 사용하기.  (2) 2010.11.19
[MFC] 전역 변수 선언  (4) 2010.11.05
[MFC] 폴더브라우저 다이얼로그.  (0) 2010.11.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함