포스트

CPU와 GPU를 구조부터 이해하면 코드가 달라 보인다

CPU와 GPU를 구조부터 이해하면 코드가 달라 보인다

CUDA를 공부하면서 코드 최적화보다 먼저 CPU와 GPU의 구조를 이해해야 한다는 걸 느꼈다. 어떤 연산을 어디에 올려야 하는지, 왜 GPU가 AI 연산에 압도적인지 — 구조를 알면 자연스럽게 이해된다.

설계 철학의 차이: CPU vs GPU

두 장치는 근본적으로 다른 목적을 위해 설계됐다.

CPU (Central Processing Unit)

  • 강력한 ALU 소수: 개별 연산 속도가 매우 빠른 산술 논리 장치 몇 개
  • 대용량 캐시: ALU당 할당된 캐시가 커서 데이터 접근 지연(Latency)을 줄인다
  • 복잡한 제어 장치: 분기 예측, 복잡한 명령어 스케줄링

GPU (Graphics Processing Unit)

  • 수천 개의 ALU: 상대적으로 단순하지만 수천 개가 동시에 돌아간다
  • 작은 개별 캐시: 코어당 캐시는 작지만 전체 처리량(Throughput)을 극대화한다
  • 병렬성 중심: 대규모 데이터를 동시에 처리하는 구조

한 명의 전문가가 순차적으로 처리하는 게 CPU라면, 수천 명의 단순 작업자가 동시에 처리하는 게 GPU다.

어떤 연산에 뭘 써야 하나

명령어 간의 종속성이 핵심 기준이다.

종속적 명령어: 이전 연산 결과가 다음 연산의 입력값이 되는 경우 (R1 = R2 + R3R4 = R1 * R5). 순차 처리가 필요하므로 CPU가 유리하다.

독립적 명령어: 각 연산이 서로 영향을 주지 않는 경우 (이미지 각 픽셀 값 변환 등). GPU가 수천 개 코어로 동시에 처리하면 압도적이다.

하드웨어적으로 CPU와 GPU는 PCI Express 버스로 통신하고, 각각 독립적인 메모리 영역을 쓴다. CPU 메모리에서 GPU 메모리로 데이터를 복사하는 비용도 실제 최적화에서는 고려해야 한다.

NVIDIA A100: AI 연산의 기준점

NVIDIA A100 GPU Structure

A100(Ampere 아키텍처)이 딥러닝의 기준점이 된 이유가 구조에 있다.

  • SM (Streaming Multiprocessor): GPU의 핵심 연산 단위. A100에는 최대 108개 탑재
  • CUDA 코어: FP32 연산을 수행하는 6,912개 코어가 전체에 분산
  • Tensor 코어: AI 연산 특화 3세대 텐서 코어가 SM당 4개 (총 432개). 행렬 연산을 가속화
  • 메모리: 5개 HBM2 스택, 10개 512비트 메모리 컨트롤러로 넓은 대역폭 확보

메타의 AI 슈퍼클러스터(RSC)는 6,080개의 A100을 InfiniBand 네트워크로 연결해서 운영한다.

개발자로서 챙겨야 할 부분

GPU 프로그래밍은 하드웨어의 계층 구조를 이해하고 효율적으로 관리하는 과정이다.

메모리 계층: Registers → Shared Memory → L2 Cache → Global Memory

스케줄러가 워프(Warp) 단위로 스레드를 관리하는 방식을 이해하면, 자원 낭비 없는 최적화 코드를 쓸 수 있다. 단순히 라이브러리 쓰는 수준을 넘어서려면 이 구조 이해가 기반이 된다.

CPU와 GPU의 구조적 차이를 명확히 알면, 같은 문제도 어디에 올릴지 판단이 달라진다.


References:

  1. Hamdy Sultan, 강의 자료: CPUs and GPUs
  2. The CUDA Handbook: A Comprehensive Guide to GPU Programming
  3. Meta AI Research: Introducing the AI Research SuperCluster
  4. TOP500 슈퍼컴퓨터 리스트 (2023/06)
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

© wakenhole. 일부 권리 보유

Powered by Jekyll with Chirpy theme