GPU 실행 구조 - Grid - Block - SM - Warp - Thread
Grid
- 전체 커널 실행 범위
- 하나의 kernel launch = 하나의 grid
- grid 안에 여러 block 이 존재
이 커널을 몇 개의 block 으로 나눠서 돌릴지를 결정하느 ㄴ단위
Block
- SM 에 스케줄되어 올라가는 기본 단위
- 블록 안에는 thread 가 여러 개
- 블록 간에는 서로 공유 메모리나 sync 불가능
병렬 작업 단위이자, shared memory 와 barrier 를 함께 가짐
SM ( Streaming Multiprocessor )
- GPU 내부의 코어 클러스터
- 여러 block 을 동시에 수용
- 내부에서 warp scheduler 가 warp 를 번갈아 실행하며 latency hiding 수행
- SM 안에는
- Register file
- Shared memory / L1
- Tensor Core
- Warp schedulers
- ALUs, LD/ST Units, SFUs 등
Warp
- 스케줄링의 실제 최소 실행 단위 (32 threads 고정)
- block 안의 threads 는 32개씩 묶여 warp 를 이룸
- warp 한 개는 동ㅇ리한 instruction 을 lockstep 으로 실행
- branch divergence 발생 시 split - serialization
실제로 실행되는 것은 thread 단위가 아니라 warp 단위이다.
Thread
- block 내부에서의 실제 작업자
- register 와 local memory 를 독립적으로 가지고 있음
- 실행은 warp 단위로 묶여서 실행됨
프로그래머가 보는 추상적 실행 단위
실제로는 warp 의 lane 하나가 thread 하나
Lane ( 워크 안의 스레드 슬롯 )
정의
- Warp 내부의 thread index
- warp = 32 threads -> lane 0 ~ 31
특징
- warp 는 32 개의 lane 을 lockstep 으로 실행
- branch 로 갈라지만 lane 단위로 마스크 씌워서 serialization
- warp-level intrinsic 등은 lane 간 통신
Bank (Shared Memory 의 물리적 분할 구조)
정의
- Shared memory 는 32 개의 bank 로 물리적으로 나뉘어 있음
- 각 bank 는 한 번에 32개의 요청 처리 가능
- 하나의 warp 가 접근할 때
- lane 0 - bank (주소 % 4)
- lane 1 - bank (주소 % 4)
- ...
즉, 주소가 32 개의 bank 구간에 어떻게 떨어지느냐가 핵심
한 warp 가 shared memory load / store 수행 시
각 lane 이 접근한 shared memory 주소가 같으면 conflict 발생 ( broadcast 는 괜찮음 )
'GPU-KERNEL' 카테고리의 다른 글
| GPU memory transaction, Byte 단위 사고 정리 (0) | 2025.12.15 |
|---|---|
| warp 에 이은 lane specialization?? (0) | 2025.12.15 |
| 각 warp 는 다른 일을 담당할 수 있다... (0) | 2025.12.10 |
| Softmax Micro kernel Design (0) | 2025.12.10 |
| 이상적인 Epilogue Kernel 구현 - FlashAttention 을 보며... (1) | 2025.12.09 |