OpenCL Note #23 — 왜 고정 슬롯/디스크립터 규칙이 빠른가 (장황 비유)
이 글은 “왜 set/binding 같은 고정 슬롯 계약이 성능에 유리한가"를 장황한 비유로 설명한다.
비유: 대형 물류센터 자동 분류기
GPU를 “초당 엄청난 박스를 분류하는 자동 물류센터"라고 생각하자.
- 박스: 버퍼/이미지 같은 리소스
- 분류기: GPU 실행 유닛
- 규격표: descriptor set layout + pipeline layout 계약
- 이번 작업에 실제로 들어온 박스: runtime에 바인딩한 실제 핸들
느린 방식 (규칙 없음, 매번 물어보기)
작업할 때마다 시스템이 묻는다:
- 이 박스 타입이 뭐지?
- 어디에 두지?
- 지금 이 포인터 안전한가?
매 접근마다 질의/검증하면 분류기가 멈추고 대기 시간이 늘어난다.
빠른 방식 (규격 먼저 고정)
사전에 규칙을 정한다:
- set0/binding0: uniform buffer
- set0/binding1: storage buffer
- set1/binding0: sampled image
실행 중엔 “set/binding 인덱스"로 바로 점프해 처리한다. 즉, 런타임 추론 대신 사전 계약으로 경로를 단순화한다.
왜 기술적으로 빨라지나
- 주소 계산 단순화: 슬롯 인덱스로 descriptor table 접근 경로가 예측 가능해진다.
- 검증 비용 앞당김: 타입/개수/가시성 검사를 create/bind 단계에 집중시킨다.
- 명령 스트림 정형화: 드라이버가 GPU 명령(PM4 등)을 더 규칙적으로 구성할 수 있다.
- 하드웨어 친화성: GPU는 규칙적/예측 가능한 접근에서 효율이 높다.
왜 제약이 빡센가
Vulkan 계열 모델은 “자유도 일부"를 포기하고, 대신
- 성능
- 예측 가능성
- 디버깅 가능성 을 얻는 설계다.
한 줄 결론: 고정 슬롯 계약은 런타임 추론 비용을 줄여 파이프라인 정지를 줄이고, 그래서 빠르다.