연산 병합 fusion 과 실행 최적화가 어떤 원리로 이뤄저야 하는지를 정의
다음 질문에 대한 답을 제공하게 될 것
- 단순한 pattern matching 방식이 한계인 이유
- 누적 accumulative 방식에 대해
- 전통적 컴파일러 설계와의 연결
- emit - IR - compile - executor 구조에 맞게
1. 단순한 패턴 매칭 방식의 한계
1.1 패턴 매칭 접근
if sequence == [gemm, bias_add, relu]:
replace_with(gemm_epilogue)
1.2 구조적 한계
- 패턴 폭발
- 레이어 경계 의존
- 컴파일러스럽지 않음, 수식이 아니라 문자열 패턴을 다루는 느낌
- 확장 유지보수 불가...
2. 핵심 전환 : 연산을 패턴이 아닌 수식으로 해석
2.1 관점 전환
연산 시퀀스는 op 나열이 아니라 실행 가능한 수식의 점진적 확장
gemm → bias_add → relu
///////////////////////
relu(gemm(A,B) + bias)
3. Online Accumulative Optimization 의 핵심 개념
3.1 Accumulator (누적 상태)
IR 의 순차 처리, 누적된 실행 표현 상태의 유지 - Accumulator
Base: GEMM
Epilogue:
- bias: true
- activation: relu
3.2 누적은 병합이 아닌 승격 (promote)
연산이 제거되는 것이 아닌 더 강한 실행 표현으로 변환
4. AND / OR 조건식 기반 변환 메커니즘
4.1 패턴 대신 조건식
문자열 매칭이 아닌 논리 조건식으로 결정된다.
can_absorb_bias =
(current_state == GEMM)
AND (bias_shape_compatible)
AND (use_count == 1)
can_absorb_relu =
(has_bias OR allow_relu_without_bias)
AND (dtype_supported)
4.2 의미
- AND : 의미 보존 조건
- OR : backend 정책 / capability 선택
5. IR attrs vs Exec attrs - 역할 분리
5.1 IR attrs ( emit 시점 )
- 생성 위치 : layer.emit - b.emit
- 목적 : 의미 표현
- 인간 / 디버거 친화적
5.2 Exec attrs ( compile / lower 시점 )
- 생성 위치 : compile_cuda / lower
- 목적 : 실행 파라미터
- ABI pack 과 1:1 대응
- 누적 대상
추후 Cost-based 기반 확장 가능성 또한 존재
'AI Compiler framework' 카테고리의 다른 글
| compile 파이프 라인과 lower_ir_cuda 에서의 registry 탐색 ( b.ops 와 사전 정의한 registry 와의 매칭 (0) | 2026.02.02 |
|---|---|
| CUDA Graph Capture / Replay 설계 정리 (0) | 2026.02.01 |
| alias / inplace 에 대해... - 메모리 / 실행 전략에 관한 결정 (0) | 2026.01.31 |
| compiler 의 분리와 optimize_ir 의 과정 추가 - 일단 훅만 구성 (0) | 2026.01.31 |
| CudaExecutor.run - IR 을 실제 텐서 계산으로 바꾸는 과정 (0) | 2026.01.31 |