GPU Thread Hierarchy
GPU의 Thread 계층 구조는 다음과 같다. Streaming Multiprocessor 상위로 Cluster, Scheduler와 GPU 칩 전체(GPU Die)가 존재하지만 생략.
이름 | 특징 |
Thread | - GPU의 가장 작은 실행 단위 |
Warp | - 여러 thread의 묶음(NVIDIA 기준 32개)
- 동일한 warp 내의 thread들은 동기화된 상태로 같은 명령을 동시에 수행한다. |
Thread Block | - 여러 Warp의 묶음
- 동일한 block 내의 thread들은 공동으로 shared memory를 사용하며 block 단위로 동기화 될 수 있다. |
Streaming Multiprocessor(SM) | - 여러 Thread Block을 관리
- Thread Block을 스케쥴링하고 해당 block 내의 warp와 thread 실행을 관리한다.
- 각 SM은 독립적인 제어 장치와 메모리 계층 구조(register, shared memory, L1 cache)를 갖는다. |
GPU Memory Hierarchy
GPU의 메모리 계층 구조는 다음과 같다. 계층 구조 상 연산기에 가까울 수록 빠르지만 용량이 작다.
메모리 | 특징/ 위치/ 접근 가능성 |
Register | - 각 thread마다 고유하게 할당 되며 연산에 사용됨
- GPU 칩 내부의 Stream Multi-processor(SM) 내에 존재
- 프로그래머가 직접 제어할 수 없지만 변수 선언 등으로 간접적으로 사용 가능 |
Shared Memory(SRAM) | - 동일한 block 내의 thread 사이에 데이터를 공유하는 메모리
- GPU 칩 내부의 SM 내에 존재
- __shared__ 키워드를 사용하여 프로그래머가 직접 제어 가능 |
L1 Cache | - SM 내의 모든 thread가 공유하는 캐시
- GPU 칩 내부의 SM 내에 존재
- 프로그래머가 제어할 수 없으며 하드웨어가 자동으로 관리 |
L2 Cache | - 모든 SM이 공유하는 캐시
- GPU 칩 내부 지만 SM 외부에 존재하여 모든 SM이 공유
- 프로그래머가 제어할 수 없으며 하드웨어가 자동으로 관리 |
Local Memory(HBM) | - GPU의 모든 thread가 고유하게 사용하는 메모리
- GPU 칩 외부에 존재
- 프로그래머가 직접 접근 가능 |
Global Memory(HBM) | - GPU의 모든 스레드가 접근할 수 있는 메모리
- GPU 칩 외부에 존재
- 프로그래머가 직접 접근 가능 |
내부 메모리 (GPU 프로세서 내)
-------------------------------------
| 스트림 멀티프로세서 (SM) |
| ------------------------------- |
| | 레지스터 파일 | |
| | (Registers) | |
| ------------------------------- |
| | 공유 메모리 | |
| | (Shared Memory) | |
| ------------------------------- |
| | L1 캐시 | |
| | (L1 Cache) | |
| ------------------------------- |
-------------------------------------
L2 캐시 (모든 SM이 공유)
---------------------------
| L2 캐시 |
| (L2 Cache) |
---------------------------
외부 메모리 (GPU 칩 외부)
----------------------------
| 글로벌 메모리 |
| (Global Memory, HBM) |
| (큰 용량, 느림) |
----------------------------
Plain Text
복사