⚡ GPU · CUDA 학습 노트

GPU는 어떻게 실행되는가,
기초부터 스케줄링까지.

GPU 아키텍처의 동작 원리 → CUDA로 프로그래밍하는 법 → 커널이 하드웨어에서 실제로 어떻게 스케줄·실행되는지까지, 한국어로 정리한 단계별 학습 노트입니다.

학습 로드맵

아래 순서대로 따라오시면 됩니다. "어떻게 생겼나(아키텍처) → 어떻게 짜나(프로그래밍) → 어떻게 도나(실행·스케줄링) → 어떻게 빠르게 하나(최적화)" 흐름입니다.

큰 그림: 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를 씀 — 성능이 안 나와서 옴⑥의 병목 진단부터 → 프로파일링 → 해당 기법으로. ④로 스케줄링 배경 보충.

핵심 용어 한눈에

본문에서 길을 잃었을 때 돌아올 수 있는 미니 사전입니다. (검색창에 용어를 쳐도 바로 해당 절로 갑니다.)

용어한 줄 정의자세히
SMGPU 안의 독립적인 "작은 프로세서". 실제 일이 벌어지는 곳①.2
warp32개 스레드 묶음 — 스케줄링·실행의 최소 단위①.3
커널GPU에서 도는 함수 (__global__)②.2
블록 / 그리드스레드 묶음(한 SM에 배정) / 블록 전체(커널 하나)②.1
shared memory블록 안 스레드들이 함께 쓰는 빠른 수동 관리 메모리①.4
occupancySM의 warp 슬롯을 얼마나 채웠는가 — 지연 숨기기의 연료①.5
스트림순서가 보장되는 작업 대기열 — 다른 스트림과는 병렬③.2
coalescingwarp의 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·메모리 계층 구조 위에 있어요. 하나를 제대로 알면 나머지는 용어 번역 문제입니다.