OpenCL Note #26 — 초등학생 버전 큰 그림: 박스 배송 시스템으로 보는 GPU
이 글은 어려운 용어를 잠시 내려놓고, “GPU가 일하는 큰 그림"을 박스 배송 시스템 비유로 먼저 이해하기 위한 노트다.
핵심 목표:
- 디테일보다 큰 구조를 잡기
- 무엇이 무엇인지 나중에 정확한 용어로 다시 연결하기
1) 아주 큰 도시와 거대한 배송센터
아주 큰 도시에, 세계에서 제일 바쁜 배송센터가 하나 있다. 이 배송센터는 하루 종일 박스를 처리한다.
- 박스는 엄청 많다.
- 같은 일을 아주 빨리, 아주 많이 해야 한다.
- 느리게 생각하면 금방 줄이 밀린다.
그래서 이 센터의 규칙은 단 하나다:
“생각은 미리 하고, 실제 작업할 때는 바로 움직여라.”
즉, 작업 중에 고민하면 늦기 때문에, 미리 정해둔 규칙을 따라 기계처럼 빠르게 처리한다.
2) 트럭과 칸이 등장한다
센터에는 트럭이 많이 들어온다. 그리고 각 트럭 안에는 칸이 있다.
- 트럭 A, 트럭 B, 트럭 C …
- 각 트럭마다 0번 칸, 1번 칸, 2번 칸 …
센터 사람들은 박스를 아무 데나 두지 않는다.
“이 종류 박스는 A트럭 0번 칸” “저 종류 박스는 A트럭 1번 칸”
이렇게 정해둔다.
왜냐하면,
- 찾기 쉽고
- 실수 줄고
- 무엇보다 빨라지기 때문이다.
3) 배송센터의 두 종류 종이
배송센터엔 종이가 두 종류 있다.
(1) 설계 종이 (규칙 종이)
이건 오래 쓰는 종이다.
- 어떤 트럭이 있는지
- 각 트럭에 칸이 몇 개인지
- 각 칸에 어떤 종류 박스를 넣을지
즉, “센터가 일하는 방식"을 정하는 종이다.
(2) 오늘 작업 종이 (실행 종이)
이건 매번 바뀌는 종이다.
- 오늘은 파란 박스를 A트럭 0번 칸에 넣고
- 내일은 초록 박스를 A트럭 0번 칸에 넣고
칸 규칙은 같지만, 실제로 넣는 박스는 매일 달라질 수 있다.
4) 작업반장이 등장한다
센터에는 작업반장이 있다.
작업반장은 먼저 말한다: “오늘은 이 작업 라인을 돌린다!”
그리고 나서 “좋아, 각 트럭 칸에 오늘 박스들을 넣어!”
마지막에 “시작!”
이렇게 말하면 센터가 엄청난 속도로 움직인다.
중요한 건, 작업이 시작된 뒤에는 “잠깐만, 규칙 바꿀게"를 잘 안 한다는 점이다.
이미 출발했기 때문에, 중간에 규칙을 계속 바꾸면 전체가 느려진다.
5) 왜 이렇게까지 엄격할까?
이 센터는 “빨리"가 생명이다.
사람이 일일이 판단하면 느리다. 그래서 규칙을 미리 정해두고, 작업할 때는 번호로 바로 찾는다.
- 트럭 번호!
- 칸 번호!
- 박스 종류!
이 세 가지를 빠르게 맞춰서 즉시 처리한다.
비유로 말하면, “마트 계산대에서 바코드 찍듯이” 매번 설명 듣지 않고 번호로 바로 처리하는 것이다.
6) 센터 맨 아래층의 신호실
배송센터 맨 아래층에는 기계에게 짧고 딱딱한 말만 하는 신호실이 있다.
거기서는 “1번 라인 시작” “2번 문 열기” “3번 벨트 이동” 같은 짧은 지시를 보낸다.
우리가 위층에서 보는 “박스/트럭/칸” 이야기는 결국 아래층 신호실의 짧은 지시들로 바뀌어 기계가 실제로 움직이게 된다.
이렇게 위층의 계획이 아래층의 실행으로 내려간다.
7) 큰 그림 한 문장 요약
“미리 정한 트럭-칸 규칙 위에, 오늘의 박스를 끼워 넣고, 시작 신호를 보내면, 아래층 기계가 초고속으로 처리한다.”
8) 비유 ↔ 실제 개념 매핑표
이제 마지막으로만 정확한 이름을 붙인다.
- 박스 하나 -> 실제 리소스 하나 (buffer/image 같은 데이터 자원)
- 트럭 -> Descriptor Set
- 트럭 번호 -> set index
- 트럭 칸 번호 -> binding index
- 칸에 넣을 박스 종류 규칙 -> descriptor type/count 같은 슬롯 규칙
- 설계 종이(오래 쓰는 규칙) -> Descriptor Set Layout + Pipeline Layout
- 오늘 작업 종이(매번 바뀜) -> descriptor write/update (이번 실행에 어떤 리소스를 꽂는지)
- 작업 라인 선택 -> pipeline 선택/바인딩
- “시작!” -> dispatch
- 맨 아래층 신호실의 짧은 지시들 -> 드라이버 하부 명령 패킷 흐름(PM4 포함 하부 실행 층)
9) 암기용 3줄
- 규칙은 미리 정한다.
- 실물은 실행 때 꽂는다.
- 시작 신호를 보내면 아래층이 초고속으로 움직인다.
이 3줄만 기억해도 큰 그림은 이미 잡힌 것이다.