1. 문제 의식
현재 커널 최적화 구현을 진행하면서 드러난 핵심적인 한계는 커널을 개별 엔티티로 취급하고, 연산 - 컨러로의 매핑 규칙을 누적하는 구조에 있다.
현재 방식과 이를 대체할 수 있는 수식적, 최적화 문제 중심의 AI Compiler 설계를 비교 정리
2. 현재 방식 : 커널 선택 Selection 중심 구조
2.1 구조 요약
- 연산 타입에 따라 커널 후보군 정의
- shape, dtype, flags 에 따라 분기
- 조건 매칭 후 특정 CUDA kernel 호출
(op_type, shape, flags, device) - kernel_id
2.2 특징
- 커널은 이름을 가진 고정된 실행 단위
- Epilogue / Fusion 은 옵션 또는 별도 커널로 분기
- 성능 튜닝은 커널 내부에서만 발생
2.3 장점
- 초기 구현이 빠름
- 디버깅 용이
- 특정 workload 에 대해 빠른 최적화 가능
2.4 한계
- 커널 수 증가 - 선택 로직 폭증
- 하드웨어 변경 시 재작성
- 왜 특정 커널이 선택되었는지 설명 불가
- 커널 간 공통 구조를 추상화하기 어려움
결과적으로 룰 기반 dispatch 시스템에 가까워짐
3. 문제의 본질 재정의
핵심 전환
커널을 선택하는 문제가 아니라, 연산을 제약 조건 하에어 최적화하는 문제로 재정의
- 커널 = 결과물
- 컴파일러의 역할 = 최적화 문제 정의 + 해 탐색
4. 제안 방식 : 수식적 최적화 기반 구조
4.1 연산 표현의 변화
기존
C = GEMM(A, B) + Bias -> ReLU
제안
C[i,j] = Σ_k A[i,k] * B[k,j]
subject to:
shared_mem ≤ S_max
registers ≤ R_max
occupancy ≥ O_min
연산은 함수 호출이 아니라 수식 + 제약 조건으로 표현된다.
4.2 커널 공간의 재해석
기존
- tile = {64, 128}
- stages = {2, 3}
- warp = {2, 4}
이산적 선택
제안
- tile size - arithmetic intensity 함수
- stage 수 - memory latency / compute latency 비율
- warp 분배 - reduction depth 함수
performance = f(
FLOPs / bytes,
latency_compute / latency_memory,
reuse_distance,
parallelism
)
커널은 성능 공간 위의 한 점
4.3 Epilogue / Fusion 재정의
기존
- Bias, ReLU, LN 등 epilogue 옵션 분기
제안
- 연산 그래프 재작성 문제로 취급
minimize: global_memory_writes
subject to: register_pressure ≤ limit
Fusion 은 옵션이 아니라 cost 감소를 위한 graph rewrite 결과
5. Cost Model 중심 컴파일러 구조
5.1 Cost Function 예시
cost = α * memory_traffic
+ β * latency
+ γ * register_spill
- δ * parallelism
- alpha, beta, ramda, omega 는 hardware-specific
- 커널 이름과 무관
5.2 컴파일 파이프라인 비교
IR : 연산 단위 -> loop/ reduction / access 표현
Lowering : 커널 매핑 -> 파라미터화된 변환
선택 : rule 기반 -> cost 최소화
결과 : kernel_id -> 실행 계획 + 생성 코드
6. 구체적 적용 방향
6.1 IR 레벨
- 커널 이름 제거
- loop nest + reduction + memory access 명시
6.2 Lowering 단계
- tiling, unrolling, fusion 을 파라미터화
- 아직 커널 확정 X
6.3 Planning 단계
- cost model 평가
- heuristic / partial search 로 계획 선택
6.4 Codegen
- 선택된 계획을 CUDA kernel 로 물리화
7. 요약
- 현재 방식은 확정성 있는 커널 최적화에 구조적 불리
- 커널을 엔티티가 아닌 해(solution) 로 취급해야 함
- AI Compiler 의 본질은 커널 선택기가 아닌 최적화 문제 생성기
- 수식적 cost model 은 설명 가능성과 확장성을 동시에 제공
'AI Compiler framework' 카테고리의 다른 글
| 행렬(서로 다른 속성들의 교차 필요)과 같은 연산 처리로 DAG 를 만들자 - 아이디어 정리 (0) | 2026.01.24 |
|---|---|
| 전통적인 컴파일러의 흐름 (0) | 2026.01.24 |
| kernel_select 부분 추가 (0) | 2026.01.23 |
| lower.py 의 기능 추가를 통한 AI compiler 로서의 역할 수행하도록 만들기~ (0) | 2026.01.22 |
| AICF 실행 흐름 ( nn - trace - IR - lower - plan - runtime - CUDA backend ) (0) | 2026.01.22 |