jayinlab

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

ANGLE 심화 킥오프 — compile/submit 체인 표 산출물 정의

2026-04-13

여기서부터는 “이론"이 아니라 근거 기반 추적이다.
이 노트는 심화 추적의 목표와 산출물 형식을 명확히 정의한다.


심화 추적의 핵심 질문 3개

  1. ANGLE에서 OpenCL entrypoint는 어디서 시작되는가?
  2. Build 경로와 Enqueue 경로는 어디서 갈라지는가?
  3. 두 경로가 Vulkan 객체 생성/dispatch에 각각 어떻게 연결되는가?

심화는 이 3개를 근거 파일/라인과 함께 답하는 과정이다.


산출물 A: Compile Chain 표

단계후보 함수/지점역할상태
C1clCreateProgramWithSource entry소스 기반 Program 객체 생성 시작확정
C2Program 내부 source 보관 지점소스 텍스트/메타 상태 보관후보
C3clBuildProgram entry빌드 트리거확정
C4build 내부 컴파일 경로소스 → SPIR-V 준비후보
C5SPIR-V 보관/로드 지점backend 전달 준비후보
C6Vulkan shader/pipeline 준비 지점실행 객체 준비후보

파일/라인 컬럼을 실제로 채워야 확정이 된다.


산출물 B: Submit Chain 표

단계후보 함수/지점역할상태
S1clSetKernelArg entry커널 인자 상태 반영확정
S2인자 상태 저장 구조descriptor/push constant 재료 준비후보
S3clEnqueueNDRangeKernel entry실행 제출 시작확정
S4command recording 후보 지점bind/dispatch 명령 기록후보
S5vkCmdBindPipeline 연결 지점pipeline 바인딩후보
S6vkCmdBindDescriptorSets 연결 지점리소스 세트 바인딩후보
S7vkCmdDispatch 연결 지점compute dispatch 트리거후보

추적 규칙

  • 함수를 보는 즉시 compile / submit 라벨부터 붙인다
  • 내부 디테일보다 호출 연결을 먼저 확정한다
  • 같은 파일에 섞여 있어도 표는 반드시 분리 작성한다
  • 모르면 **“후보”**라고 명시하고 넘어간다 (추정/확정 구분)

자주 막히는 지점

막힘 1: “build와 enqueue가 한 함수 안에서 섞여 보이는” 느낌
→ 호출 목적 기준으로 라벨링 (변환 준비 vs 실행 제출)

막힘 2: “Vulkan 호출이 어디서 시작되는지 모호”
→ 객체 생성 함수와 command recording 함수를 따로 찾는다

막힘 3: “근거 없이 아는 느낌”
→ 반드시 파일/라인을 표에 기록한다


이해 확인 질문

Q1. 이번 노트의 목표는 완전 해석인가, 분리 체인 표 확보인가?

정답 보기

분리 체인 표 확보가 우선이다.
심화는 지도를 정확히 만든 뒤에 디테일로 내려간다.
완전 해석은 표가 완성된 이후에 진행한다.

Q2. 함수를 보자마자 compile/submit 라벨을 붙여야 하는 이유는?

정답 보기

경로 혼선을 막고, 성능/오류 원인 분석의 기준축을 유지하기 위해서다.
라벨 없이 추적하면 compile chain을 분석하다가 submit chain으로 빠지는 상황이 반복된다.

Q3. “근거 파일/라인"을 강제하는 이유는?

정답 보기

느낌 기반 이해를 배제하고, 재현 가능한 지식으로 만들기 위해서다.
“아는 것 같다"와 “파일 X의 라인 Y에서 확인했다"는 완전히 다른 수준의 이해다.


관련 글

관련 용어

[[ANGLE]], [[SPIR-V]], [[clspv]], [[pipeline-layout]], [[command-buffer]]