본문 바로가기

Coding Note

[CUDA] kernel 호출방법

출처 : 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