Chapter 12

GPU: 수천 개의 작은 일꾼

4K 모니터에는 약 830만 개의 픽셀이 있다. 게임이 1초에 120장면을 그리려면 1초에 10억 개 가까운 픽셀의 색을 계산해야 한다. 아무리 빠른 요리사(CPU)라도 혼자서는 감당할 수 없다. 그래서 탄생한 것이 단순한 일을 수천 명이 동시에 처리하는 GPU다. 그리고 이 “대군의 힘”은 오늘날 인공지능 혁명의 엔진이 되었다.

소수 정예 vs 대군

5장에서 CPU가 빨라지기 위해 파이프라인, 분기 예측, 비순차 실행 같은 정교한 장치를 갖췄다고 했다. 이런 장치들은 칩 면적을 많이 차지한다. CPU 코어 하나는 무엇이든 잘하는 만능 요리사다. 복잡한 판단, 갈림길 많은 코드, 순서대로 해야 하는 일에 강하다.

GPU(Graphics Processing Unit)는 반대 방향을 택했다. 분기 예측 같은 똑똑한 장치를 거의 빼고, 남은 면적에 단순한 계산 유닛을 수천 개 채웠다. 일꾼 하나하나는 느리고 단순하지만, 같은 일을 수천 개 데이터에 동시에 하는 데는 압도적이다.

CPU: 셰프 몇 명

  • 코어 8~24개, 각각 매우 빠르고 똑똑함
  • 복잡한 판단·분기에 강함
  • 지연 시간(한 일의 빠르기) 중심
  • 운영체제, 브라우저, 게임 로직

GPU: 보조 요리사 수천 명

  • 연산 유닛 수천~1만 개 이상, 각각 단순함
  • 같은 계산을 많은 데이터에 반복할 때 강함
  • 처리량(전체 양) 중심
  • 그래픽, 영상, 인공지능, 과학 계산
감자 만 개 깎기

미슐랭 셰프 8명과 견습생 2,000명이 있다. 새로운 요리를 개발하거나 까다로운 소스를 만드는 일은 셰프들이 훨씬 잘한다. 하지만 감자 1만 개를 깎는 일이라면? 견습생 2,000명이 한 사람당 5개씩 깎으면 순식간이다. 단, 감자 깎기처럼 서로 독립적인 같은 일이어야 한다. “앞 사람이 다 깎아야 다음 사람이 시작할 수 있는 일”이라면 견습생이 아무리 많아도 소용없다(5장의 암달의 법칙).

픽셀 칠하기 경주

화면의 각 픽셀 색은 대부분 다른 픽셀과 상관없이 계산할 수 있다. 그래서 그래픽은 병렬 처리에 딱 맞는 일이다. 같은 그림을 CPU와 GPU가 칠하는 경주를 해 보자. 화면용으로 아주 느리게 재생하지만 비율은 실제와 비슷하게 맞췄다.

SIMULATOR

CPU 8코어 vs GPU 2048개 유닛

그림 크기
 
CPU (코어당 1픽셀 = 1 단위)—
GPU (유닛당 1픽셀 = 4 단위)—
GPU가 빠른 배수—
GPU 유닛 하나는 CPU 코어보다 4배 느리다고 가정했다. 그래도 그림이 커질수록 GPU의 이득이 커진다. 반대로 그림이 아주 작으면 일꾼 대부분이 놀아서 이득이 줄어든다. 병렬 처리는 “할 일이 충분히 많을 때” 빛난다.

3D가 화면이 되기까지: 그래픽 파이프라인

게임 속 캐릭터, 건물, 나무는 모두 수많은 작은 삼각형으로 이루어져 있다. 삼각형은 꼭짓점 세 개로 정해지는 가장 단순한 면이라 계산하기 쉽다. 요즘 게임의 한 장면에는 삼각형이 수백만 개 들어간다. GPU는 이 삼각형들을 다음 단계로 처리한다.

  1. 꼭짓점 처리: 각 꼭짓점의 3D 좌표를 카메라 시점에 맞춰 회전·이동시키고 2D 화면 좌표로 바꾼다(원근 투영).
  2. 래스터화: 화면에 투영된 삼각형이 어느 픽셀들을 덮는지 알아낸다.
  3. 픽셀 셰이딩: 덮인 픽셀마다 색을 계산한다. 텍스처(무늬 그림)를 입히고 조명과 그림자를 계산한다.
  4. 합치기: 가까운 물체가 먼 물체를 가리도록 깊이를 비교하고, 최종 색을 화면 메모리에 쓴다.

래스터화를 직접 해 보자. 삼각형의 꼭짓점 세 개를 끌어 옮기면, GPU가 하듯이 각 픽셀의 중심이 삼각형 안에 있는지 검사해 칠한다. 꼭짓점마다 다른 색을 주면 안쪽 픽셀은 거리에 따라 색을 섞는다.

SIMULATOR

래스터화: 꼭짓점을 끌어 보세요

검사한 픽셀—
칠한 픽셀—
해상도가 낮으면 가장자리가 계단처럼 보인다(앨리어싱). 게임 설정의 “안티앨리어싱”은 가장자리 픽셀을 여러 번 검사해 부드럽게 섞는 기능이다. 각 픽셀의 검사는 서로 독립적이라 수천 개 유닛이 동시에 처리한다.

셰이더: 모든 픽셀에서 동시에 도는 작은 프로그램

픽셀 셰이딩 단계에서 각 픽셀의 색을 정하는 짧은 프로그램을 셰이더(shader)라 한다. 셰이더는 “나는 화면의 (x, y) 픽셀이다. 내 색은 무엇인가?”라는 질문에만 답한다. GPU는 같은 셰이더 코드를 화면의 수백만 픽셀에서 동시에 실행한다. 아래 셰이더를 바꿔 보자.

SIMULATOR

픽셀 셰이더 놀이터

셰이더
이 캔버스의 픽셀 수—
초당 셰이더 실행 횟수—
이 화면은 자바스크립트로 CPU에서 계산하기 때문에 해상도를 낮췄다. 실제 GPU는 4K 화면(830만 픽셀)에서 훨씬 복잡한 셰이더를 1초에 100번 넘게 실행한다.
워프: 32명이 같은 줄을 동시에

GPU는 일꾼(스레드)을 보통 32개씩 묶어(워프, warp) 같은 명령을 동시에 실행시킨다. 32명이 같은 악보를 함께 연주하는 합창단과 같다. 그런데 셰이더 안에 “만약 ~라면” 분기가 있어 일부는 이쪽, 일부는 저쪽으로 가야 하면, 한쪽 무리가 실행하는 동안 다른 무리는 기다려야 한다. 그래서 GPU 프로그램은 분기를 최소화하도록 짠다. CPU와 GPU에 맞는 프로그래밍 방식이 다른 이유다.

GPU의 메모리와 데이터 운반

수천 개의 일꾼이 쉬지 않으려면 재료가 엄청난 속도로 공급되어야 한다. 그래서 그래픽 카드에는 전용 메모리(VRAM)가 붙어 있고, 그 대역폭은 일반 메모리의 5~20배(초당 수백 GB~수 TB)에 이른다. 6장의 메모리 계층이 GPU에도 그대로 있다.

단점도 있다. CPU의 메모리에 있는 데이터를 GPU로 보내려면 메인보드의 통로(PCIe)를 지나야 하는데, 이 통로는 GPU 내부보다 훨씬 느리다. 그래서 게임은 시작할 때 3D 모델과 텍스처를 미리 GPU 메모리에 올려 두고(로딩 화면!), 장면마다 “무엇을 어디에 그려라”는 짧은 명령만 보낸다. 데이터를 자주 오가게 하면 GPU가 아무리 빨라도 운반 시간에 발목이 잡힌다. 스마트폰과 최신 노트북은 CPU와 GPU가 한 칩 안에서 같은 메모리를 공유해 이 운반 비용을 줄인다.

인공지능은 왜 GPU를 쓸까: 행렬 곱셈

챗봇이나 이미지 생성 같은 인공지능 모델의 계산은 대부분 행렬 곱셈이다. 숫자 표(행렬) 두 개를 곱하는데, 결과 표의 각 칸은 “한쪽 표의 가로줄과 다른 쪽 표의 세로줄을 짝지어 곱한 뒤 모두 더한 값”이다. 핵심은 결과 표의 각 칸을 서로 독립적으로 계산할 수 있다는 점이다. 픽셀처럼!

SIMULATOR

행렬 곱셈: 한 칸씩 vs 모든 칸 동시에

계산 방식
 
4×4 행렬 곱은 결과 16칸 × 칸마다 곱셈 4번 = 곱셈 64번이다. 한 칸씩 하면 16단계, 16칸을 동시에 하면 1단계에 끝난다(곱셈 4번은 각 일꾼이 차례로 한다고 치자). 실제 언어 모델은 수천 × 수천 크기의 행렬을 수백 번 곱한다. 단어 하나를 만들 때마다 수십억~수조 번의 곱셈이 필요하다.

그래서 2012년 무렵 연구자들이 GPU로 신경망을 학습시키기 시작하자 인공지능은 폭발적으로 발전했다. 요즘 AI용 GPU에는 행렬 곱셈만 전문으로 하는 회로(텐서 코어)까지 들어가 있다. 처음엔 게임 화면을 그리려고 만든 칩이 세상을 바꾸는 계산기가 된 셈이다.

핵심 정리

  1. CPU는 똑똑한 코어 몇 개로 복잡한 일을 빨리, GPU는 단순한 유닛 수천 개로 같은 일을 대량으로 처리한다.
  2. GPU는 서로 독립적인 같은 계산이 아주 많을 때 압도적이다. 일이 적거나 순서가 얽혀 있으면 이득이 줄어든다.
  3. 3D 그래픽은 꼭짓점 처리 → 래스터화 → 픽셀 셰이딩 → 합치기의 파이프라인으로 그린다.
  4. 셰이더는 각 픽셀(또는 꼭짓점)에서 동시에 실행되는 작은 프로그램이다.
  5. GPU는 전용 고대역폭 메모리를 쓰며, CPU와의 데이터 운반은 비싸므로 줄여야 한다.
  6. 인공지능의 핵심 계산인 행렬 곱셈은 각 칸이 독립적이어서 GPU에 딱 맞는다.

확인 퀴즈

GPU가 CPU보다 훨씬 빠르게 처리할 가능성이 큰 일은?

서로 독립적인 같은 계산이 대량으로 있어야 수천 개 유닛이 모두 일할 수 있다.

래스터화 단계에서 하는 일은?

투영된 삼각형과 픽셀 격자를 비교해 덮이는 픽셀을 찾는다. 그다음 셰이더가 그 픽셀들의 색을 정한다.

셰이더에 대한 설명으로 옳은 것은?

셰이더는 “이 픽셀의 색은?”에 답하는 짧은 함수이며, GPU가 모든 픽셀에서 병렬로 실행한다.

인공지능 계산에 GPU가 널리 쓰이는 가장 큰 이유는?

결과 행렬의 각 칸을 동시에 계산할 수 있다. 오히려 GPU의 클럭은 CPU보다 낮은 편이다.