CUDA 프로그래밍 모델은 스레드→워프→블록→그리드 의 4단계 계층 구조로 이루어져 있음. cuda는 기본적으로 Thread 단위로 연산을 하기 때문에 Thread와 관련되 위계구조를 파악해야 함
threadIdx.x, threadIdx.y, threadIdx.z if) 내부 코드가 워프 단위로 균일하도록 작성
정의: 여러 워프를 포함하는 스레드 그룹
식별자: blockIdx.x, blockIdx.y, blockIdx.z
크기 제한
| 차원 | 최대값 |
|---|---|
| x, y | 1,024 |
| z | 64 |
| 총 스레드 | ≤ 1,024 |
특징
__shared__) 와 __syncthreads() 동기화 사용 가능 TIP: 블록 크기는 32의 배수(워프 크기)로 설정하고,
SM 자원(공유메모리·레지스터) 점유율(occupancy)을 고려해 블록당 스레드 수를 128∼512 사이로 튜닝

정의: 하나의 커널 런칭에서 생성되는 모든 블록들의 모음
크기 제한
| 차원 | 최대값 |
|---|---|
| x | 2³¹ − 1 (≈2.1e9) |
| y, z | 65 535 |
특징
TIP:
int threadsPerBlock = 256;
int blocksPerGrid = (N + threadsPerBlock - 1) / threadsPerBlock;
myKernel<<<blocksPerGrid, threadsPerBlock>>>(…);