티스토리 뷰
본 포스팅은 "머신러닝과 블록체인을 떠받치는 GPU의 모든 기술" 책을 읽고, 글쓴이의 생각을 정리하는 포스팅 입니다.
https://book.naver.com/bookdb/book_detail.nhn?bid=13499076
1. Work Group(Thread Block)
1_1. Nvidia
Cuda의 경우 Thread를 모아서 Block을, Blcok을 모아서 Grid를 만듭니다.
그리고 한 Block의 Thread는 무조건 같은 SM에 할당된다고 하였습니다.
만약 650개의 Thread가 하나의 Block에 있다면, 이제 드디어 최고의 성능을 볼 수 있을까요?
안타깝게도 아닙니다.
N당 GPU기준으로 32개의 Thread를 1개의 Warp로 지정하고, 이 Warp를 Pool형태로 관리하게 됩니다
https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#simt-architecture
따라서, Giga Thread Engine을 사용해서 위의 650개의 Thread의 경우 32*20 + 10 총 21개의 Warp Pool이 생성됩니다
(이때 8개인 Warp의 경우 나머지 22개의 Dummy Thread로 채워집니다)
그리고 이 Warp를 스케쥴러를 사용해 적절하게 Cuda Core에 전달하여 연산이 이뤄집니다.
Warp Pool의 크기는 제한이 있으며, 최신 아키텍쳐의 경우 최대 48개의 Warp Pool을 관리할 수 있다고 나와있습니다.
따라서 최신 아키텍쳐 기준 1개의 Thread Block내 Thread는 최대 48 Warp * 32 Thread/Warp = 1536개를 넘지않게 프로그래밍을 해줘야 합니다.
1_2. AMD
과거 GCN 아키텍쳐를 기준으로
16SP = 1SIMD Engine
4SIMD Engine = 1CU
이때 Work(=Thread)를 Work Group(Thread Block)으로 묶고, 하나의 1CU할당되게 되어있습니다.
이때 Nvidia의 Warp와 유사하게 A당은 WaveFront라는 단위로 Work의 Pool을 만듭니다.
Work 64개 = 1WaveFront
였습니다.(GCN 아키텍쳐 기준)
하지만 64개의 Work가 64개의 SP에 분배되어 처리되는것이 아니라 1개의 SIMD Engine에 할당되고 16*4를 하여 처리되는 것으로 알려져 있습니다.
(각 SIMD Engine끼리는 다른 명령어를 처리할 수 있고, Data이동 Latency를 감추기 용이했다고 합니다)
하지만 64개를 기준 단위로 할 경우 650개의 Thread의 경우 64*10 + 10 총 11개의 Work Group이 발생하고, 54개의 Dummy Work를 사용하게 됩니다.
(물론 64개를 사용하는게 유리할 때도 있지만, 다수의 경우 32개 단위로 처리할 때 Dummy의 양이 줄어듭니다)
최근 RDNA 아키텍쳐에서는 SIMD Engine(16SP -> 32SP)과 WaveFront(64Work -> 32Work)의 크기가 같게 변경되어
Work 32개 = 1WaveFront
로 변경되었다고 합니다.(물론 기존 64WaveFront도 지원합니다)
https://en.wikipedia.org/wiki/RDNA_(microarchitecture)
정리 : N당 A당 모두 32의 배수 형태로 Thread Block(Work Group)을 지정해 주는것이 현재로썬 가장 좋다
'컴퓨터과학 > GPU' 카테고리의 다른 글
GPU프로그래밍_2(메모리, 특수 변수Type) (0) | 2022.03.04 |
---|---|
GPU프로그래밍_1(개념) (0) | 2022.03.03 |
GPU 메모리 구조 (0) | 2022.03.03 |
GPU구조와 Thread(Work)의 단위 (0) | 2022.02.26 |
GPU 성능지표와 메모리 대역폭 (0) | 2022.02.25 |
- Total
- Today
- Yesterday
- stack
- 컴퓨터그래픽스
- heap
- hash
- git
- Python
- prime number
- 동적계획법
- 사칙연산
- 완전탐색 알고리즘
- 알고리즘
- 코딩테스트
- 이분탐색
- 분할정복
- 프로그래머스
- 병렬처리
- GDC
- 자료구조
- Sort알고리즘
- C++
- Greedy알고리즘
- AVX
- Search알고리즘
- SIMD
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |