GPU(Graphics Processing Unit) 아키텍처는 수천 개의 작은 코어로 대규모 병렬 연산을 수행하도록 설계된다. 원래 그래픽 렌더링용이었으나 GPGPU(General-Purpose GPU)로 AI/과학 계산의 핵심 하드웨어가 됐다.
GPU vs CPU 설계 철학
CPU (지연시간 최적화):
- 소수의 강력한 코어 (4~64)
- 큰 캐시, 복잡한 분기 예측
- 순차 작업에 최적
GPU (처리량 최적화):
- 수천~수만 개의 작은 코어
- 단순한 제어 로직
- 동일 연산의 대규모 병렬화에 최적
NVIDIA GPU 계층 구조 (CUDA 관점)
GPU
└─ SM (Streaming Multiprocessor) × N개
├─ CUDA 코어 × 128개 (Ampere)
├─ Tensor Core × 4개 (AI 행렬곱)
├─ L1 캐시 / Shared Memory
└─ 레지스터 파일
스레드 계층:
Grid → Block → Thread
Block 내 스레드는 Shared Memory 공유
Warp = 32개 스레드 (항상 같은 명령어 실행)
메모리 계층
속도(빠름 → 느림):
레지스터 (각 스레드) ~1사이클
Shared Memory (블록 공유) ~5사이클
L1 캐시 ~20사이클
L2 캐시 ~200사이클
Global Memory (DRAM) ~600사이클
System RAM (PCIe 전송) ~수천 사이클
코드 예시 (CUDA C)
c
__global__ void vector_add(float *a, float *b, float *c, int n) {
int idx = blockDim.x * blockIdx.x + threadIdx.x;
if (idx < n) c[idx] = a[idx] + b[idx];
}
// 1M 원소를 256 스레드 블록으로 분할
int blocks = (N + 255) / 256;
vector_add<<<blocks, 256>>>(d_a, d_b, d_c, N);
관련 개념