변수 선언 수가 아닌, 동시에 살아있는 값 live values 개수가 레지스터 수를 결정한다.
변수를 재사용하거나, 범위가 바로 끝나는 경우 효율적
사용하지 않는 변수의 live range 가 끊기지 않으면 비효율적
레지스터는 정적 수량이 아닌, 각 스레드에서 동시에 살아 있는 값의 개수를 기준으로 컴파일러가 계산
기본적인 레지스터 관리는 컴파일러가 대부분 잘한다.
변수의 live range 분석해서 자동으로 레지스터 재사용
최적화된 SSA 기반 레지스터 할당
가장 중요한 것은 동시에 살아 있는 데이터
변수 개수가 아닌 다음 항목에 의해 결정
동시에 hold 해야 하는 값의 개수
liveness 가 커지는 구조는 따로 존재
한 스레드가 너무 큰 타일을 누산
너무 aggressive 한 unroll, 중간값 많음
큰 구조체를 그대로 인라인
shared memory 없이 local 에 큰 배열 생성
일반적인 연산 커널 구현에서 레지스터 효율 관련 고민은 ↓
실제 커널 개발자가 신경 써야 하는 순간
성능 임계치에 가까운 경우
GEMM, softmax-fusion, large-tile convolution 등
타일 크기, fragment shape 등을 수동 튜닝
occupancy 제약이 성능에 직접 영향
메모리 latency hiding 이 중요한 커널
'GPU-KERNEL' 카테고리의 다른 글
| GEMM kernel 개선하기 (1) (0) | 2025.11.22 |
|---|---|
| Register Pressure vs Occupancy Trade-off (0) | 2025.11.22 |
| GPU 작업 공간 : Register, 이걸 이해하자 (0) | 2025.11.22 |
| 두 가지 커널 성능 측정 방식 - "벤치마크용" vs "프로파일용" (0) | 2025.11.20 |
| 커널 내부에서의 sharedmemory 선언 이유, 커널은 그리드 전체에 대응되는 느낌임! (0) | 2025.11.20 |