global void VecAdd(float A, float B, float* C)
{
int i = threadIdx.x;
C[i] = A[i] + B[i];
}
int main()
{
...
// Kernel invocation with N threads
VecAdd<<<1, N>>>(A, B, C);
...
}

global -> cpu에서 gpu device를 쓰기 위해 Kernel를 불러와준다.

배열 정보, index는 grid size 와 block size로 정의된다.

grid size는 block 수, shape로 결정

  • block size는 thread 수, shape로 결정
  • Grid, Block은 1~3차원이 될수 있다.
  • gridDim.{x,y,z} - The dimensions of the grid
  • blockDim.{x,y,z} - The deminsions of the block
  • blockIdx.{x,y,z} - The index of the - current block within the grid
  • threadIdx.{x,y,z} - The index of the current thread within the block

1차원 배열일 때, 스레드 구성 제목BlockIndexThreadIndex

1차원 blockIdx.y *, gridDim.x +, blockIdx.x BlockIndex * blockDim.x + threadIdx.x
2차원 blockIdx.y *, gridDim.x +, blockIdx.x BlockIndex blockDim.y blockDim.x + threadIdx.y * blockDim.x + threadIdx.x
3차원 blockIdx.y *, gridDim.x +, blockIdx.x BlockIndex blockDim.z blockDim.y blockDIm.x + threadIdx.z blockDim.y blockDim.z + threadIdx.y blockDim.x + threadIdx.x

링크텍스트

+ Recent posts