출처 : http://blog.naver.com/elvicelee/110100562891
kernel을 호출할 때, 각 sp에서 어떤 인덱스에 대해서 작업을 할 지 정하는 일이다.
sm단위가 block이고 sp단위가 thread인 거라고 생각되는데, func<<<1,N>>>에서 N을 실제 sp보다 크게잡으면 어떻게되는건진 잘 모르겠다.. 이론적인 부분은 차차 공부해봐야할듯
1. N개의 thread를 호출할 때:
CudaFunctionName<<<1,N>>>( arg/*, ...*/ );
__global__ void CudaFunctionName( float* arg1/*, ...*/){
int i=threadIdx.x;
arg1[i] = ...; //i가 현재 thread에서 처리할 배열 인덱스
}
2. N*N개의 thread로 된 1개의 block을 호출할 때
int nBlock = 1;
dim3 threadsPerBlock(N,N);
CudaFunctionName<<<nBlock, threadsPerBlock>>>(arg /*, ...*/);
__global__ void CudaFunctionName(float arg1[N][N] /*, ...*/){
int i = threadIdx.x;
int j = threadIdx.y;
arg1[i][j] = ...;
}
3. N*N개의 thread로 된 다수의 block을 호출할 때
dim3 threadsPerBlock(16,16);
dim3 nBlocks(N/ threadsPerBlock.x, N/threadsPerBlock.y);
CudaFunctionName<<<nBlocks, threadsPerBlock>>>(arg/*, ...*/);
__global__ void CudaFunctionName(float arg1[N][N] /*, ...*/){
int i = blockIdx.x * blockDim.x + threadIdx.x;
int j = blockIdx.y * blockDim.y + threadIdx.y;
if(i<N && j<N)
arg1[i][j] = ...;
}
'Coding Note' 카테고리의 다른 글
[Lua] 함수 (0) | 2012.03.19 |
---|---|
[Lua] first (1) | 2012.03.18 |
[CUDA] hello cuda (0) | 2012.03.10 |
[MySQL] relational database. Keys (0) | 2012.03.09 |
[CUDA] syntax highlighting at visual studio 2010 (1) | 2012.03.08 |