본문 바로가기

AI Compiler framework

AICF Emit IR - Classical Compiler IR 와의 대응 관계 정리

1. 목적과 배경

AICF 의 emit 계층은 코드 생성 단계가 아닌, 의미가 이미 해석된 연산을 실행 단위로 고정하는 단계 

 

2. 고전 컴파일러 관점에서의 IR 재정의

2.1 고전적 IR 의 핵심 성질

Classical Compiler 에서 Intermediate Representation 은 다음 성질을 가진다

  • 의미 보존적 Semantics-preserving
  • 명령 단위 표현 instruction-level
  • 입력과 출력의 명확한 관계
  • 타겟 독립성 또는 제한적 타겟 의존성
  • 최적화 패스의 입력으로 사용 가능

 

3. Emit IR 의 위치 정의  ( IR 레벨 구분 )

AICF 는 다음 IR 계층을 가진다

[ Python Layer / Builder 호출 ]
        ↓
[ AICF Logical IR ]        ← 연산 의미 중심
        ↓
[ Emit IR (emit_resolved) ] ← 실행 단위 중심 (본 문서의 대상)
        ↓
[ CUDA Dispatch / Kernel ]

Machine IR 에 가깝고 Kernel-level IR 에 해당 ( 실제 ISA 가 아님 )

 

4. Emit IR = IR Instruction

4.1 기본 명제

emit_resolved 호출 1회 = IR instruction 1개

이는 고전 SSA-IR 의 다음과 대응

out = add a, c

 

5. 필드별 상세 대응 관계 ( add.emit 기준 )

emit_resolved(
    b,
    kind="add",
    name=name,
    inputs=[a, c],
    outputs=[out],
    kind_id=ctx.EltwiseAdd,
    attr_schema=0,
    attr_blob=b"",
    attrs={},
    constraints=constraints,
    hints=hints,
)

 

5.1 kind - Logical Opcode

  • 고전 IR : add, mul, fadd, ...
  • AICF : kind = "add"

의미

  • 연산의 논리적 의미
  • backend 와는 분리된 symbolic opcode
  • 문서, 디버그, 검증, IR dump 의 기준

언어적 IR 식별자

 

5.2 kind_id - Backend Opcode

  • 고전 IR : Instruction selection 이후 opcode
  • AICF : kind_id = ctx.EltwiseAdd

의미

  • 타겟에서 실제 실행될 연산 ID
  • emit 시점에 이미 lowering 완료되었음을 의미

 

5.3 inputs - SSA Use / Operand List

  • 고전 IR : instruction operands
  • AICF : inputs = [a, c]

의미

  • 연산이 읽는 value id 목록
  • 데이터 의존성의 명시적 표현

 

5.4 outputs - Definition / Destination

  • 고전 IR : SSA def
  • AICF : outputs = [out]

설계 의미

  • GPU memory planning 친화적
  • in-place / overwrite legality 표현 가능
  • CUDA Graph 캡처 및 replay 와 직접 호환

 

5.5 타입 / Shape 정보

  • 고전 IR : instruction 에 타입 포함
  • AICF : value 에 타입 / shape 포함

 

5.6 attrs, attr_schema, attr_blob - Instruction Attributes

설계적으론

  • 연산 변형
  • 수치 옵션
  • 커널 파라미터

등을 수용 가능, 확장 가능한 instruction attribute 공간

 

5.7 constraints - Legality Constraints

이 IR 은 어떻게 바꿀 수 있는가에 대한 규칙

 

5.8 hints - Optimization Metadata

의미에 영향을 주지 않는 최적화 가이드