본문 바로가기

AI Compiler framework

AICF Emit IR Model - Emit as Minimal Lowering Unit + Information Lattice Based Compilation

1. Emit 의 정의

1.1 Emit 은 무엇인가

다음을 만족하는 IR 의 최소 lowering 표현 단위

  • 런타임이 직접 실행 가능한 단위
  • 의미적 계약을 가짐
  • 그래프 변형의 최소 안정 단위

즉, Emit 은 단순한 DAG 노드가 아닌

입력을 상태를 받아 출력 상태를 생성하는 계약을 가진 원자적 상태 변환자 (State Transformer)

lowering 의 종착점이 아니라, 더 상위 Emit 으로 치환될 수 있는 컴파일 단위

 

2. Emit 의 구성 요소

2.1 Semantics Layer

  • kind
  • attr_schema
  • attr_blob
  • 수학적 의미 태그

  • add
  • relu
  • reduce_sum
  • adam_step
  • fused_gemm_bias_relu

해당 레이어가 무엇을 계산하는가를 정의

 

2.2 Interface Layer

  • inputs
  • outputs
  • dtype
  • rank
  • shape relation

입출력 구조를 정의

 

2.3 Contract Layer

Emit 이 제공하고 요구하는 정보

(A) Effect Contract

각 텐서에 대해

None < Read < Write < ReadWrite

  • relu : input=Read, output=Write
  • adam_step : P = ReadWrite, M = ReadWrite, V = ReadWrite, G = Read

이 정보는 재배치 / 결합 legality 의 핵심

 

(B) Alias Contract

MustAlias
MayAlias
NoAlias
Unknown

Fuse legality 는 이 lattice 위에서 meet 로 판정

 

(C) Shape / Stride Contract

정보 정밀도 격자

Unknown
  ↑
Known rank
  ↑
Known shape
  ↑
Known contiguous

contiguous 여부는 fused kernel 선택에 직접 영향

 

(D) Numeric Semantics Contract

  • exact math op tag
  • acuumulation dtype
  • determinism
  • rounding policy

  • fp 16 acccumulate vs fp32 accumulate
  • atomic reduction 여부

 

(E) ABI / Materialization Contract

  • rank0 scaler view 필요 여부
  • explicit contiguous 필요 여부
  • alignment requirement

이것은 최종 lowering 단계에서만 사용

 

3. Information Lattice 모델

EmitContract 는 단순 dict 이 아닌 각 항목은 격자 lattice 위에서 존재 

  • 여러 Emit 을 결합할 때 정보 요약 가능
  • 새 Emit 의 요구사항 충족 여부 판정 가능
  • 제거 가능 여부 판정 가능

 

4. 두 가지 정보 결합 방향

Emit 결합 시 정보는 두 방향으로 움직인다

4.1 제약 정보

합칠수록 조건이 강해짐

  • fused kernel 은 모든 입력이 contiguous 여야 한다
  • dtype 은 동일해야 한다
  • 중간 write-effect 있으면 reorder 불가

 

4.2 구성 정보

합칠수록 조건이 늘어남

  • bias 값
  • activation 종류
  • epsilon
  • scaling factor

새 emitter attrs 는

attrs_new = derive( attrs_1 ∨ attrs_2 ∨ ... )

 

5. Emit 컴파일의 형식적 정의

Emit 들의 부분 그래프 S 에 대해

5.1 정보 수집

F = Join(Provides_i for i in S)
C = Meet(Constraints_i for i in S)

 

5.2 후보 Emit E* 가 있을 때

E* 는 다음을 가진다

  • Requires(E*)
  • Build(E*, F)

치환 조건

F ⊢ Requires(E*)

하위 Emit 정보로부터 상위 Emit 요구 조건을 증명 가능해야 한다.

 

5.3 치환

성공 시

S → E*

E* 의 Contract 는

Contract(E*) = Derive(F)

 

6. Emit 제거 (Elimination)

N -> 0 치환

reshape 제거 조건

  • storage 동일
  • stride 동일
  • ABI 요구 없음

충분히 정밀한 정보가 있어야 제거 가능

 

7. Emit 삽입 (Materialization)

Constraints 를 만족시키기 위해 삽입되는 Emit

  • contiguous
  • cast
  • transpose
  • expand

최적화는 제거만이 아닌 삽입도 포함

 

8. Emit 최소 Lowering 단위의 의미

다음을 만족해야 한다

  • 독립적 계약 단위
  • 격자 정보의 안정적 축적 단위
  • 상위 Emit 으로 치환 가능한 단위

Emit 을 더 쪼개면

  • 계약 정보 분산
  • fuse 판정 복잡도 폭증

Emit 을 너무 크게 만들면

  • 결합 기회 감소

의미적 안정성과 결합 가능성 사이의 균형점

 

9. 전체 컴파일 흐름

Sem-Graph (Emit DAG)
    ↓
Contract Propagation (정보 정밀화)
    ↓
Rewrite / Fuse / Eliminate / Insert
    ↓
Optimized Emit Graph
    ↓
Final Lowering (ABI / Launch / Kernel Selection)