티스토리 뷰

728x90
반응형

본 포스팅은 "머신러닝과 블록체인을 떠받치는 GPU의 모든 기술" 책을 읽고, 글쓴이의 생각을 정리하는 포스팅 입니다.

https://book.naver.com/bookdb/book_detail.nhn?bid=13499076 

 

머신러닝과 블록체인을 떠받치는 GPU의 모든 기술

이 책은 GPU의 기본 구조와 기술 동향에 초점을 맞춘 해설서입니다. 3D 그래픽, 게임, 모바일, VR/AR, 과학 기술 계산, 그리고 인공지능/딥러닝에 이르기까지 폭넓은 분야에서 GPU/병렬 계산의 중요도

book.naver.com

 

1. GPU구조

GPU의 구조를 극도로 간소화 하면, 아래와 같습니다.

극도로 추상화된 GPU의 구조

GPU 칩 내부에 숫자연산을 할 수 있는 연산기 다수 + 캐시가 존재하고, 부족한 캐시용량을 RAM을 사용해서 메모리 계층구조를 생성합니다.

 

GPU는 개별적인 OS운용이나 프로그램의 실행이 어렵기 때문에, PCI를 통해서 CPU와 통신을 합니다.

 

CPU로부터 필요한 Kernal 함수(GPU에서 계산할 함수)를 전달받거나, CPU RAM의 데이터를 GPU RAM으로 복사시켜 동작합니다.

 

그럼, 위의 극도로 추상화된 GPU가 실제 최신 그래픽카드에서 어떤지 살짝 알아보겠습니다.

 

1_1. Nvidia

https://developer.nvidia.com/blog/nvidia-ampere-architecture-in-depth/

 

NVIDIA Ampere Architecture In-Depth | NVIDIA Technical Blog

Today, during the 2020 NVIDIA GTC keynote address, NVIDIA founder and CEO Jensen Huang introduced the new NVIDIA A100 GPU based on the new NVIDIA Ampere GPU architecture. This post gives you a look…

developer.nvidia.com

N당의 경우

정수연산기 16개, 실수연산기 16개, 정밀실수연산기 8개, Load/Store Unit 8개 ,SFU(Special Function Unit) 1개 ,Tensor Core1개가

1개의 연산 Block가 됩니다.

(위의 정수, 실수연산기를 Cuda Core라고 부릅니다)

Float 연산기 16개 = Block

Block 4개 = SM(Streaming multiprocessor)

SM 2개 = TPC(Texture Proces Cluster)

TPC 8개 = GPC(Graphics Processing Cluster)

Nvdia A100의 경우

16CUDA/Block * 4Block/SM * 2SM/TPC * 8TPC/GPC * 8GPC/1GPU= 8192 CUDA/GPU

이상적으로 동작할 때 8192개의 부동소수점 연산을 1Hz마다 두번씩 가능하므로,

(이때 불량을 고려해서 TPC10개가 비활성화 또는 제거되어 6912개가 동작합니다.)

6912 Float op / HZ * 1.410GHz/s * 2Operation/op = 19500GFlops = 19.5TFlops

의 두뇌풀가동 연산 성능을 갖게 됩니다.

Nvidia A100의 Block Diagram(출처 : Nvdia 공식 기술블로그)

1_2. AMD

https://www.amd.com/system/files/documents/rdna-whitepaper.pdf

A당의 경우

정수/실수 연산기를 SP(Streaming Processor)라고 부릅니다.

SP 32개 =  SPs(Streaming Processors) or SIMD Engine

SPs 2개 = CU(Computing Unit)

CU 2개 = DCU(Dual CU) or WGP(Work Group Processor)

때문에, AMD 5700XT의 경우

32 SP/SPs * 2SPs/CU * 2CU/DCU * 20DCU/1GPU = 2560SP/GPU가 되고

이상적으로 동작할 때 2560개의 부동소수점 연산을 1Hz마다 두번씩 가능하므로,

2560 Float op / HZ * 1.905GHz/s * 2Operation/op = 9750GFlops = 9.75TFlops

의 두뇌풀가동 연산 성능을 갖게 됩니다.

 

AMD 5700XT의 Block Diagram(출처 : AMD 공식 아키텍쳐 Guide)

 

2. WORK의 단위

위에서 갑자기 재미없는 단위환산 놀이를 한 이유는 이 단위가 생각보다 OpenCL을 프로그래밍 하는데 중요한 요인이 되기 때문입니다.

 

지난 포스팅에서 gpu의 발전 방향이 SIMD -> SIMT로 발전되었다고 했습니다.

 

CPU에서는 Work를 저장한 Thread를 다수 만들고, 이 Thread가 GPU로 전달되며 GPU는 이 Thread를 처리하게 됩니다.

 

이때, Thread를 단순히 1~N개의 1차원 형식으로 전달하는것이 아니라

 

Cuda에서는 Thread를 모아서 Block을, Block을 모아서 Grid를 생성합니다. 

 

OpenCL의 경우 Work(=Thread)를 모아서 Work Group(=Block), Work Group을 모아서 ND Range(=Grid)를 만듭니다.

 

GPU역시 한정된 자원으로 동작하는 장치인 만큼, 레지스터 <-> 캐시 <-> GDDR의 메모리 계층구도를 이루고 있습니다. 

 

이때, Work Group(=Block)에 존재하는 Work(=Thread)는 무조건 같은 CU(혹은 SM)에 할당됩니다.

 

때문에 동일한 Data를 공유해야하는 Work가 다른 CU(혹은 SM)에 할당된 경우 CU(혹은 SM)끼리의 데이터 교환(다른 CU, SM의 Cache의 데이터 조회)이 발생하고, 이 때문에 불필요한 오버헤드가 발생할 수 있습니다.

(같은 CU 혹은 SM에 할당하기 위해서 Group(=Block)와 ND Range(=Grid)의 차원을 조절하게 됩니다)

 

때문에 OpenCL을 활용해서 빠른 성능을 얻고자 한다면 이러한 아키텍쳐의 대략적인 처리방향을 알면 큰 도움이 됩니다.

728x90
반응형

'컴퓨터과학 > GPU' 카테고리의 다른 글

GPU프로그래밍_1(개념)  (0) 2022.03.03
GPU의 Thread(Work) 처리 방법  (0) 2022.03.03
GPU 메모리 구조  (0) 2022.03.03
GPU 성능지표와 메모리 대역폭  (0) 2022.02.25
SIMD와 SIMT  (0) 2022.02.24
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함