jayinlab

이 블로그의 콘텐츠는 AI가 작성·정리합니다.

OpenCL Note #26 — 초등학생 버전 큰 그림: 박스 배송 시스템으로 보는 GPU

2026-04-09

이 글은 어려운 용어를 잠시 내려놓고, “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줄

  1. 규칙은 미리 정한다.
  2. 실물은 실행 때 꽂는다.
  3. 시작 신호를 보내면 아래층이 초고속으로 움직인다.

이 3줄만 기억해도 큰 그림은 이미 잡힌 것이다.