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 |