1. 문제 제기
초기 구조는 다음과 같은 실행 모델을 가진다.
- Python에서 그래프를 만들고
- 실행 시점에 op_call을 통해
- CUDA backend가 런타임 디스패치로 커널 variant를 선택하고
- 해당 커널을 실행한다
이 구조는 성능은 좋고, 실행은 안정적이지만
“AI Compiler”라는 이름을 붙이기에는 어딘가 부족한 감각을 남긴다.
그 이유는 단순히 코드 생성이 없어서가 아니라, 결정이 언제, 어디에, 어떤 형태로 존재하는가에 있다.
2. 이전 구조가 Compiler 로 느껴지지 않았던 이유
2.1 결정이 런타임에 일어난다
이전 구조의 핵심흐름
IR → lowered ops
→ op_call
→ dispatch (runtime)
→ kernel variant 선택
→ kernel launch
중요한 점
- 커널 선택이라는 핵심 결정이
- 실행 시점마다
- backend 내부에서 이뤄진다는 점
frontend, IR 에는 결정이 없다.
IR 은 무엇을 계산할지만 알고 있고, 어떻게 계산할지는 실행 중에 backend ( CUDA ) 가 판단한다
이 구조는 다음의 성격을 띈다.
- 의미 : Python / IR
- 결정 : CUDA backend
- 실행 : CUDA kernel
이 때문에 구조적으로는 smart runtime 에 가까움
2.2 결정 결과가 의미적 표현으로 남지 않는다
이전 구조에서 커널 선택은 실제로는 한 번만 일어난다
- warmup / capture 시점에서 dispatch 가 실행되고
- CUDA Graph 에 kernel launch 시퀀스가 기록되며
- replay 시에는 해당 커널들이 그대로 실행된다.
이 결정은 다음의 특징
- CUDA Graph 내부에만 존재
- 커널 포인터와 grid / block 정보만 남음
- 왜 이 커널인가라는 의미 정보는 소실됨
즉
- 실행 결과는 고정되지만
- 결정의 의미는 프로그램으로 남지 않는다.
이 때문에
- 재최적화 불가
- 분석 불가
- 다른 backend 로의 이식 불가
컴파일 산출물, artifact 로 보기 어렵다
2.3 backend 가 결정을 담당한다
전통적 컴파일러 구조에서는
- frontend / optimizer 가 결정을 내리고
- backend 는 그 결정을 실행하거나 검증한다
하지만 이전 구조에서는
- backend 가
- 이 shape 에는 이 커널을
- 런타임에 직접 결정한다
즉, 컴파일러의 핵심 책임이 backend 에 남아 있다.
이로 인해 구조적으로
- Python 은 스케줄러
- CUDA 는 의사 결정자 + 실행자
처럼 보이게 됨
3. 제안한 구조의 핵심 변화
의미를 가진 IR 위에서 Python 이 결정을 끝내고, CUDA 는 그 결정을 실행만 하게 한다
4. 제안한 구조에서 Compiler 가 충족되는 이유
4.1 IR 위에서 의미 기반 결정이 이루어진다
Python 쪽에서 다음 작업들이 수행된다.
- IR 생성
- lowering
- IR 변환 / 압축
- epilogue 흡수
- save 제거
- inplace overwrite 결정
- meta tnesor 분리
- 커널 / 알고리즘 선택
High-level IR
→ Lowered IR
→ Decision-applied IR (압축된 IR)
이 과정은
- 연산의 의미를 이해한 상태에서
- 실행 전략을 선택하고
- 그 선택을 IR 구조에 반영하는 과정
정의상 컴파일러의 역할
4.2 결정 결과가 IR 에 의미적으로 남는다
이 구조에서는
- 커널 선택
- epilogue 구성
- inplace 여부
- meta tensor 사용 방식
등이 모두 IR 변환 결과로 남는다
- fused gemm + relu
- in-place overwrite
- host-managed static
같은 결정이 프로그램의 일부가 된다
이 IR 은
- 설명 가능
- 재실행 가능
- 재최적화 가능
- backend 교체 가능
컴파일 산출물로서 의미를 갖는다.
4.3 CUDA 는 ISA-like executor 로 역할이 축소된다
- 주어진 TensorDesc
- 주어진 kernel
- 주어진 stream
을 기반으로 연산만 수행한다
CUDA 는 더 이상
- 어떤 커널을 쓸 지
- 어떤 epilogue 를 붙일지
- 어떤 메모리 전략을 쓸지
를 결정하지 않고 단순 실행만 수행한다
'AI Compiler framework' 카테고리의 다른 글
| 그래프 최적화 기법 ( Fusion, Constant Folding, CSE ) (0) | 2026.01.21 |
|---|---|
| AICF v2 실행 과정 정리 (0) | 2026.01.21 |
| ISA vs Compiler (0) | 2026.01.20 |
| AICF Execution Architecture Overview - Python-driven Graph & Scheduling + CUDA Primitive Execution (0) | 2026.01.20 |
| CUDA Backend v2 (core-free) Ops 마이그레이션 규칙 (0) | 2026.01.18 |