Chapter 23

마치며: 그래서, 다음은?

긴 길의 끝에서, 짧은 한마디

23.1 우리가 약속했던 것, 그리고 지나온 길

이 책의 1장에서 우리는 세 가지를 약속했다. 첫째, 컴퓨테이셔널 씽킹 — 문제를 데이터 병렬로 다시 보는 사고법. 둘째, 성능 한계를 정직하게 보는 눈 — 메모리 대역폭과 컴퓨트 throughput, 점유율과 다이버전스가 어떻게 결과를 결정하는지. 셋째, 패턴 라이브러리 — 컨볼루션, 스텐실, 히스토그램, 리덕션, 스캔, 머지, 정렬, 희소, 그래프 같은 재사용 가능한 골격들. "이 세 가지를 손에 쥐면 새로운 문제가 와도 두렵지 않다"가 우리의 약속이었다.

22장의 길을 짚으면 그 약속이 어디서 채워졌는지 보인다. 1부(1~6장) 기초에서 GPU 아키텍처와 CUDA의 기본 — SM, 워프, 다차원 그리드, 메모리 계층, 타일링, 코얼레싱·레이턴시 숨기기 — 을 다졌다. "한 명의 천재 vs 군중"이라는 1장의 비유가 농담이 아니라 회로 면적의 차이라는 걸 4장의 SM 구조에서, 그리고 5장의 산술 강도(arithmetic intensity) 계산에서 처음 손끝으로 느꼈을 것이다.

2부(7~12장) 병렬 패턴은 도구상자였다. 컨볼루션과 상수 메모리, 스텐실의 3D 타일링, 히스토그램의 사유화(privatization), 리덕션의 다이버전스 줄이기, 스캔의 Kogge-Stone과 Brent-Kung, 머지의 co-rank — 한 패턴을 한 번 익히면 비슷한 모양의 새 문제에 그대로 옮길 수 있다는 점에서, 이 부분이야말로 GPU 프로그래머의 진짜 자산이 쌓이는 곳이었다.

3부(13~19장) 고급 패턴과 응용은 패턴들이 진짜 문제와 만나는 자리였다. 라딕스 정렬과 머지 정렬, 희소 행렬의 다섯 가지 형식, 그래프 BFS의 frontier, CNN을 GEMM으로 변환하는 트릭, MRI 재구성에서의 scatter→gather 전환, 정전 포텐셜의 컷오프 비닝. 19장에서는 이걸 다시 추상화 한 단으로 끌어올려 "컴퓨테이셔널 씽킹"이라는 사고법으로 묶었다.

4부(20~23장) 고급 실전에서는 한 GPU 너머로 시야를 넓혔다. MPI+CUDA로 노드를 묶기, 동적 병렬성으로 일을 데이터 모양에 맞게 만들기, 통합 메모리·CUDA Graphs·텐서 코어 같은 최신 기능, 그리고 라이브러리 생태계와 미래 전망까지. 이 부에서 가장 중요한 메시지는 "혼자 짜지 마라"였다. cuBLAS·cuDNN·CUTLASS·Triton이라는 거인들의 어깨 위에 올라타는 안목이 맨손 CUDA만큼이나 중요한 기술이다.

이 네 부의 누적이 22장까지의 길이었다. 한 그림으로 보면 이렇다.

1부: 기초 2부: 병렬 패턴 3부: 고급 패턴/응용 4부: 고급 실전 ─────────── ────────────── ────────────── ─────────── "GPU란 뭐고 "재사용 가능한 "패턴이 진짜 문제와 "한 GPU 너머, 어떻게 쓰지?" 골격 라이브러리" 만나는 자리" 그리고 미래" 1~6장 7~12장 13~19장 20~23장 - SM, warp - convolution - sort (radix/merge) - MPI+CUDA - 다차원 grid - stencil - sparse (CSR/ELL/JDS) - 동적 병렬성 - 메모리 계층 - histogram - graph (BFS frontier) - 통합 메모리 - 타일링/코얼레싱 - reduction - 딥러닝 (CNN→GEMM) - 라이브러리/미래 - 첫 커널 - scan, merge - MRI, 정전 포텐셜 - 컴퓨테이셔널 씽킹 "두려움 제거" "도구상자를 쥔다" "진짜 문제로 간다" "한계를 넓힌다"

그림 23.1 — 이 책의 4부 구성과 각 부의 약속.

약속이 다 지켜졌는지는 솔직히 독자가 답할 일이다. 그러나 23장을 다 읽었다면 한 가지는 분명할 것이다. 새 문제 앞에서 더 이상 막막하지 않다. "이건 리덕션 모양이네", "이건 스캔으로 풀리겠다", "이건 메모리 결합이 깨져 있네", "이건 라이브러리 한 줄로 끝나는데 굳이?" — 이런 사고가 자동으로 도는 순간, 이 책은 이미 자기 일을 한 셈이다.

23.2 도구는 도구일 뿐: 다음에 할 일

그러나 이 책이 가르치지 않은 것이 하나 있다. 정확히는, 가르칠 수 없었다. 그것은 "무엇을 풀 것인가"다. CUDA는 아주 잘 드는 망치 한 자루다. 망치질을 잘하는 법은 22장에 걸쳐 다뤘다. 그러나 어디에 못을 박을지는 망치가 가르쳐 주지 않는다.

지난 10여 년의 GPU 컴퓨팅이 가장 화려하게 빛난 자리들을 떠올려 보자. 단백질 구조 예측(AlphaFold)은 생물학자가 가져온 문제였다. 자율주행은 자동차 엔지니어와 컴퓨터 비전 연구자가 가져왔다. 기상 예보의 정밀도 도약은 기상학자가 가져왔다. 의료 영상의 실시간 재구성은 영상의학자와 신호처리 연구자가 가져왔다. 생성형 AI의 폭발은 자연어처리 연구자와 시스템 엔지니어의 합작이었다. 공통점은 단순하다. 도메인의 진짜 문제를 들고 와서, 그게 GPU에 잘 맞는다는 것을 알아본 사람들이 결과를 만들었다.

"이게 GPU에 잘 맞는가?"를 판단하는 안목은 사실 이 책 곳곳에 흩뿌려져 있다. 같은 모양의 연산이 데이터마다 반복되는가? 작업 단위 사이의 의존이 적은가, 혹은 잘 정리된 패턴(리덕션, 스캔)으로 풀리는가? 산술 강도가 메모리 대역폭의 한계 위에 있는가? 분기가 데이터 의존인가, 워프 단위로 일관된가? 한 번에 옮길 만한 데이터 크기인가, 아니면 PCIe가 병목이 될 정도인가? 이 다섯 가지 질문에 "그렇다"가 많을수록 그 문제는 GPU의 사랑을 받는다.

독자에게 드리는 작은 도전

이 책을 덮기 전에 한 가지 숙제를 드리고 싶다. 여러분이 잘 아는 도메인 — 자기 전공, 자기 회사 일, 자기 취미 프로젝트 — 에서 한 가지 문제를 골라, 그것이 GPU에 잘 맞는지 위 다섯 가지 질문으로 자기 손으로 분석해 보시라. 잘 맞으면 어떤 패턴(이 책 7~16장의 어떤 것)에 가장 가까운지, 안 맞으면 정확히 어디서 어긋나는지를 노트 한 페이지로 적어 보는 것이다. 이 분석을 한 번이라도 자기 손으로 해 보면, 책에서 읽은 모든 패턴이 한 단계 더 자기 것이 된다.

마지막으로 한 가지 더. GPU 컴퓨팅은 지금도 변하고 있다. 22장에서 본 흐름 — 더 큰 메모리, 더 흐려지는 노드 경계, 더 분화된 정밀도(FP8/FP4·구조적 sparsity), 더 위로 올라가는 추상화(Triton·CUDA Graphs) — 은 책을 덮은 다음에도 계속 흐른다. 이 책의 CUDA 코드 한 줄 한 줄은 5년 후에도 컴파일은 될 것이다(NVIDIA가 PTX 호환성을 잘 지킨다). 그러나 5년 후 가장 좋은 코드 작성 방식은 분명히 지금과 다를 것이다. Triton일 수도, 또 다른 DSL일 수도, 우리가 아직 모르는 무엇일 수도 있다.

중요한 건 표면이 아니다. 표면 아래의 사고법 — 데이터 병렬로 보는 눈, 메모리 계층을 의식하는 습관, 패턴으로 분해하는 본능 — 이 진짜 자산이다. 도구는 바뀌어도 이 사고법은 바뀌지 않는다. 그것이 이 책이 도구의 사용법보다 사고법(특히 19장)에 적지 않은 페이지를 쓴 이유다.

긴 책이었다. 끝까지 읽어 주셔서 진심으로 감사하다. 이제 책을 덮고, 자기 도메인으로 돌아가, 거기서 GPU가 빛날 자리를 찾아 주시길. 그 자리를 발견하는 사람이, 다음 10년의 풍경을 만든다. 행운을 빈다.

이 책을 떠나며 챙길 것