CUDA 커널 성능은 단순히 스레드를 많이 띄우는 것이 끝이 아님,
실제 성능은 레지스터 사용량 register pressure 와 SM 에서 동시에 유지 가능한 워프 개수 occupancy 의 균형에 의해 결정된다.
레지스터를 많이 쓰면, 한 스레드가 더 강력해지지만, SM 이 동시에 수용할 수 있는 워프 수가 줄어든다.
레지스터를 적게 쓰면, occupancy 는 올라가지만, 단일 워프의 계산 파이프 라인이 허전해져 연산 밀도가 떨어질 수 있다.
레지스터 Pressure
레지스터는 GPU 에서 가장 빠른 저장소, 컴파일러는 레지스터를 스레드마다 독립적으로 할당
레지스터사용량은 다음 요소에 의해 늘어난다
- 지역 변수 수
- Loop unroll 수
- Tiling 크기
- 템플릿 인스턴스에 따른 변수 생성
- 컴파일러가 spill 방지를 위해 잡아두는 내부 변수
핵심 특징
- 레지스터는 SM 단위로 쿼터가 정해져 있다.
- SM 레지스터 풀은 모든active warps 가 나눠가진다.
- 한 워프/블록의 레지스터 요구량이 커지면, 동시에 유지 가능한 블로/워프 수가 줄어든다.
Occupancy 란 무엇인가
Occupancy = Active Warps / Max Warps
더 많은 워프가 스케줄러 큐에 올라 있음
메모리 대기를 다른 워프가 채워줄 수 있음
warp-level pipeline stall 완화
컴퓨팅 밀도가 높은 동안은 occupancy 가 낮아도 고성능이 나올 수 있다.
실제 high-end kernel 들은 대체로 64 ~ 128 개 레지스터, 30~50% occupancy 에서 peak 에 도달
'GPU-KERNEL' 카테고리의 다른 글
| 스레드 - 워프 - 블록 - 그리드 -SM - 스케줄링 (0) | 2025.11.23 |
|---|---|
| GEMM kernel 개선하기 (1) (0) | 2025.11.22 |
| register 추가 개념, 얼마나 할당되는지 (중요한건 컴파일러의 역할) (0) | 2025.11.22 |
| GPU 작업 공간 : Register, 이걸 이해하자 (0) | 2025.11.22 |
| 두 가지 커널 성능 측정 방식 - "벤치마크용" vs "프로파일용" (0) | 2025.11.20 |