# 모든 개발자가 알아야 할 GPU 컴퓨팅에 대한 정보

> Clean Markdown view of GeekNews topic #11449. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=11449](https://news.hada.io/topic?id=11449)
- GeekNews Markdown: [https://news.hada.io/topic/11449.md](https://news.hada.io/topic/11449.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2023-10-22T09:54:25+09:00
- Updated: 2023-10-22T09:54:25+09:00
- Original source: [codeconfessions.substack.com](https://codeconfessions.substack.com/p/gpu-computing)
- Points: 5
- Comments: 1

## Topic Body

- 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에서 커널 실행의 단계  
  
1. 호스트에서 디바이스로 데이터 복사  
2. SM에 스레드 블록 스케줄링  
3. 단일 명령 다중 스레드(SIMT) 및 워프  
4. 워프 스케줄링 및 지연 시간 허용  
5. 디바이스에서 호스트 메모리로 결과 데이터 복사  
  
### # 자원 분할 및 점유율 개념  
  
- 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 프로그래밍에 대한 기본적인 지식을 제공하며, 이 분야에 대한 호기심을 자극하는 흥미로운 자료임.

## Comments



### Comment 20062

- Author: neo
- Created: 2023-10-22T09:54:25+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=37967126) 
- 본 기사는 Nvidia에 특화되어 있어 Sycl, Sapphire Rapids, AMD의 MI300과 같은 다른 유효한 대안들을 무시하고 있다는 비판을 받고 있다.
- 데이터 전송 중 GPU가 유휴 상태가 되는 것을 방지하는 비동기 복사에 대한 언급이 부족하다는 지적이 있다.
- 본 기사는 GPU 프로그래밍에 대한 좋은 소개로 칭찬받지만, 더 고급 기법을 탐구할 필요가 있다는 제안이 있다.
- 일부 독자들은 대기 이론의 Little’s law가 GPU에 적용된다는 기사의 주장의 정확성에 의문을 제기한다.
- 메모리 아키텍처에 대한 기사의 설명은 캐시가 스레드 간에 일관성 보장을 제공하지 않는다는 점을 언급하지 않았다는 비판을 받고 있다.
- GPU의 기능을 더 잘 반영하기 위해 GPU를 PPU(Parallel Processing Units)로 이름을 바꾸는 제안이 있다.
- 본 기사는 GPU 프로그래밍에 대한 더 나은 설명 중 하나로 칭찬받고 멘토링에 사용하기를 권장받고 있다.
- SIMD 프로그래밍은 "야생적"으로 묘사되며, 모든 픽셀에 대한 쉬운 계산이 있지만 분기 조건에는 어려움이 있다.
- 특정 배열 계산 작업에 GPU를 사용하는 효율성에 대한 질문이 제기되었으며, GPU로 데이터를 전송하고 GPU에서 데이터를 가져오는 필요성을 고려하였다.
