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