티스토리 뷰
혼자 공부한것이라 틀릴수도 있어요. ^^;;
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 |
댓글