GPU는 어떻게 실행되는가,
기초부터 스케줄링까지.
GPU 아키텍처의 동작 원리 → CUDA로 프로그래밍하는 법 → 커널이 하드웨어에서 실제로 어떻게 스케줄·실행되는지까지, 한국어로 정리한 단계별 학습 노트입니다.
학습 로드맵
아래 순서대로 따라오시면 됩니다. "어떻게 생겼나(아키텍처) → 어떻게 짜나(프로그래밍) → 어떻게 도나(실행·스케줄링) → 어떻게 빠르게 하나(최적화)" 흐름입니다.
GPU 아키텍처
CPU와 무엇이 다른가, SM 내부 구조, SIMT·warp, 메모리 계층, occupancy.
CUDA 프로그래밍
grid/block/thread 모델, 첫 커널 작성, 메모리 관리, 스레드 동기화.
CUDA 동작 방식
커널 launch가 실제로 어떻게 도나, 비동기·스트림·이벤트, 블록의 SM 배정.
스케줄링
warp 스케줄러, occupancy 튜닝, 스트림 우선순위, 선점, MIG·MPS.
CUDA Graphs
반복 워크로드를 그래프로 캡처해 launch 오버헤드·지터를 없애기.
성능 최적화
메모리 병합, shared memory 타일링, bank conflict, 프로파일링.
큰 그림: GPU는 "처리량 기계"다
CPU는 한 작업을 최대한 빨리 끝내도록(지연 최적화), GPU는 같은 연산을 수천 데이터에 동시에 적용하도록(처리량 최적화) 설계됐습니다. 이 한 문장이 GPU의 모든 것 — 왜 코어가 수천 개인지, 왜 메모리 접근이 병목인지, 왜 warp로 묶어 실행하는지 — 을 설명합니다.
이 노트는 그 동작 원리를 하드웨어(아키텍처) → 소프트웨어(CUDA) → 실행/스케줄링 순으로 연결해, "코드를 짜면 GPU 안에서 실제로 무슨 일이 벌어지는가"를 이해하는 데 목표를 둡니다.
①에서 "GPU는 왜 빠른가"의 직관을 잡고, ②에서 직접 커널을 손으로 써보고, ③④에서 "그 커널이 어떻게 스케줄되는가"를 연결하면, ⑥의 최적화 기법들이 왜 효과가 있는지 자연스럽게 이해됩니다.
C/C++ 기초(포인터·배열·함수)면 충분합니다. GPU가 없어도 Google Colab 무료 GPU 런타임에서 nvcc로 바로 컴파일·실행할 수 있어요(방법은 ②장 끝에). 정확성은 CUDA 공식 문서를 함께 참고하세요.
어디서부터? — 독자별 추천 경로
| 이런 분이라면 | 추천 경로 |
|---|---|
| GPU가 처음 — 병렬 프로그래밍 경험 없음 | ① → ② 순서대로, ②에서 꼭 직접 코드를 돌려본 뒤 ③으로. ⑤는 건너뛰었다 나중에. |
| CPU 시스템 개발자 — pthread·캐시·스케줄러에 익숙 | ①의 "CPU 개발자를 위한 대응표"부터. 각 장의 보라색 👤 박스가 당신을 위한 통역입니다. |
| ML 엔지니어 — PyTorch는 쓰는데 밑이 궁금함 | ① → ③ → ④로 "내 모델이 GPU에서 어떻게 도는지"를 잡고, ⑤(torch.cuda.graphs의 정체) → ⑥. |
| 이미 CUDA를 씀 — 성능이 안 나와서 옴 | ⑥의 병목 진단부터 → 프로파일링 → 해당 기법으로. ④로 스케줄링 배경 보충. |
핵심 용어 한눈에
본문에서 길을 잃었을 때 돌아올 수 있는 미니 사전입니다. (검색창에 용어를 쳐도 바로 해당 절로 갑니다.)
| 용어 | 한 줄 정의 | 자세히 |
|---|---|---|
| SM | GPU 안의 독립적인 "작은 프로세서". 실제 일이 벌어지는 곳 | ①.2 |
| warp | 32개 스레드 묶음 — 스케줄링·실행의 최소 단위 | ①.3 |
| 커널 | GPU에서 도는 함수 (__global__) | ②.2 |
| 블록 / 그리드 | 스레드 묶음(한 SM에 배정) / 블록 전체(커널 하나) | ②.1 |
| shared memory | 블록 안 스레드들이 함께 쓰는 빠른 수동 관리 메모리 | ①.4 |
| occupancy | SM의 warp 슬롯을 얼마나 채웠는가 — 지연 숨기기의 연료 | ①.5 |
| 스트림 | 순서가 보장되는 작업 대기열 — 다른 스트림과는 병렬 | ③.2 |
| coalescing | warp의 32 접근이 연속 주소면 한 번에 운반되는 것 | ⑥.2 |
| latency hiding | 메모리 기다리는 warp 대신 다른 warp를 돌려 빈틈을 메움 | ④.1 |
| divergence | 한 warp 안에서 if/else로 갈라져 절반이 노는 현상 | ①.3 |
자주 묻는 질문
Q. GPU가 없는데 따라할 수 있나요?
네. Google Colab의 무료 GPU 런타임에서 전부 실행할 수 있습니다 — ②장 끝의 3분 가이드를 보세요.
Q. PyTorch/TensorFlow를 쓰는데, CUDA를 알아야 하나요?
커널을 직접 짤 일은 드물어도, "왜 느린가"를 진단하는 능력은 이 지식에서 나옵니다. GPU 활용률이 낮은 이유(launch 오버헤드, 복사 병목, 작은 배치), torch.compile·CUDA Graphs가 뭘 해주는지, OOM이 왜 나는지 — 전부 이 노트의 내용이 그대로 답입니다.
Q. NVIDIA가 아닌 GPU(AMD, Apple)는요?
이 노트는 CUDA(NVIDIA) 기준이지만, 개념의 90%는 이식됩니다. AMD ROCm/HIP은 API 이름까지 거의 같고(warp 대신 64-스레드 "wavefront"), Apple Metal·OpenCL도 같은 SIMT·메모리 계층 구조 위에 있어요. 하나를 제대로 알면 나머지는 용어 번역 문제입니다.