- GPU 컴퓨팅에 대한 기본적인 이해는 모든 소프트웨어 엔지니어에게 필수적임
- 이 글은 주로 Nvidia GPU에 초점을 맞추고 있으며, Nvidia의 용어를 사용
- GPU는 그래픽, 수치 계산, 딥러닝 등에서 대규모 병렬 처리와 높은 처리량을 위해 설계됨
CPU와 GPU 비교
- CPU는 순차적 명령 실행을 위해 설계되었으며, 명령 실행 지연 시간을 줄이기 위한 다양한 기능이 포함됨.
- GPU는 대규모 병렬 처리와 높은 처리량을 위해 설계되었으며, 중간에서 높은 명령 실행 지연 시간을 가짐.
- GPU는 CPU보다 훨씬 많은 수의 연산을 훨씬 빠르게 처리할 수 있음.
# GPU 아키텍처
GPU 컴퓨트 아키텍처
- GPU는 스트리밍 멀티프로세서(SM)의 배열로 구성되어 있음.
- 각 SM은 여러 스트리밍 프로세서(코어 또는 스레드)를 포함함.
- SM은 제한된 양의 칩 내 메모리(공유 메모리 또는 스크래치패드)를 가지며, 모든 코어가 공유함.
GPU 메모리 아키텍처
- GPU는 여러 계층의 다양한 종류의 메모리를 가지고 있음.
- 각 SM은 대량의 레지스터를 가지며, 이는 코어 간에 공유됨.
- 상수 캐시는 코드 실행에 사용되는 상수 데이터를 캐시하는 데 사용됨.
- 공유 메모리는 빠르고 저지연의 칩 내 프로그래밍 가능한 SRAM 메모리임.
- L1 캐시는 L2 캐시에서 자주 접근하는 데이터를 캐시함.
- L2 캐시는 모든 SM에 의해 공유되며, 글로벌 메모리에서 자주 접근하는 데이터를 캐시함.
- 글로벌 메모리는 고용량, 고대역폭 DRAM으로, SM에서 멀리 떨어져 있어 지연 시간이 높음.
# GPU 실행 모델 이해
CUDA 커널과 스레드 블록에 대한 간략한 소개
- CUDA는 Nvidia GPU용 프로그램을 작성하기 위한 프로그래밍 인터페이스임.
- 커널은 GPU에서 병렬로 실행되는 C/C++ 함수와 유사한 형태로 표현된 계산임.
- 커널 실행을 위해 그리드라고 불리는 스레드의 수를 시작함.
GPU에서 커널 실행의 단계
- 호스트에서 디바이스로 데이터 복사
- SM에 스레드 블록 스케줄링
- 단일 명령 다중 스레드(SIMT) 및 워프
- 워프 스케줄링 및 지연 시간 허용
- 디바이스에서 호스트 메모리로 결과 데이터 복사
# 자원 분할 및 점유율 개념
- GPU 자원 활용도는 "점유율"이라는 지표로 측정되며, SM이 지원할 수 있는 최대 워프 수에 대한 할당된 워프 수의 비율을 나타냄.
- 점유율은 SM의 실행 자원, 레지스터, 공유 메모리, 스레드 블록 슬롯 및 스레드 슬롯에 의해 제한됨.
- 코드 최적화를 통해 높은 점유율을 유지하면서 지연 시간을 최소화하는 것이 중요함.
# 요약
- GPU는 여러 SM으로 구성되며, 각 SM은 여러 처리 코어를 가짐.
- 글로벌 메모리는 칩에서 멀리 떨어져 있으며, 지연 시간이 높음.
- L1 및 L2 캐시는 CPU의 L1/L2 캐시와 유사하게 작동함.
- 각 SM에는 공유 메모리가 있으며, 이는 코어 간에 공유됨.
- GPU에서 커널을 실행하기 위해 스레드의 그리드를 시작함.
- GPU는 SM에서 실행할 블록을 할당하며, 모든 스레드는 동일한 SM에서 실행됨.
- SM에 할당된 스레드는 워프라고 불리는 32의 크기로 더 그룹화됨.
- GPU는 스레드의 요구 사항과 SM의 한계에 따라 스레드 간에 동적 자원 분할을 수행함.
# 마무리
- GPU는 오늘날 널리 사용되고 있으며, 그 아키텍처와 실행 모델은 CPU와 근본적으로 다름.
- 이 글은 GPU의 다양한 측면을 다루며, GPU가 널리 사용되는 이유와 작동 방식에 대한 통찰력을 제공함.
GN⁺의 의견
- GPU는 딥러닝과 복잡한 수치 계산에 필수적인 기술로, 이 글은 GPU의 기본적인 아키텍처와 실행 모델을 이해하는 데 도움이 됨.
- 병렬 처리와 고성능 컴퓨팅에 관심이 있는 초급 소프트웨어 엔지니어에게 특히 중요한 내용을 담고 있음.
- 이 글은 GPU 프로그래밍에 대한 기본적인 지식을 제공하며, 이 분야에 대한 호기심을 자극하는 흥미로운 자료임.