본문 바로가기

AI Compiler framework

ISA vs Compiler

현재 구조가 왜 ISA 에 가까운지

 

1. 전통적인 AI Compiler 의 역할

  • High level IR - Low-level IR 로 점진적 lowering
  • 연산 fusion
  • 메모리 계획
  • 스케줄 탐색 / auto-tuning
  • target-specific codegen
  • 얇은 런타임

 

2. 그런데 너 구조는 왜 그 방향을 안 갔나?

이유 1) Python이 이미 ‘최상위 언어’이기 때문

너는:

  • 모델 정의
  • forward/backward
  • optimizer step
  • meta 업데이트
  • control flow

이걸 Python 코드로 직접 작성하고 있음.

이 말은 곧:

  • 이미 사람이 읽을 수 있는 “프로그램”이 존재
  • 굳이 그걸 다시 컴파일 언어로 바꿔야 할 이유가 없음

전통적 컴파일러는 “동적 프레임워크 위에 정적 실행 경로를 만들기 위해” 필요했는데, 처음부터 실행 경로를 명시적으로 만들고 있음.

 

이유 2) 커널 코드 생성이 목표가 아니었음

너의 목표는:

  • CUDA 커널을 “새로 생성”하는 것 ❌
  • 이미 있는 커널들을 어떻게 조합하고 실행할지를 제어 ✔️

그래서:

  • codegen 파이프라인이 없음
  • 대신 KernelVariant + dispatch 구조

이건 컴파일러보다는:

  • ISA + runtime dispatch
  • 혹은 “micro-runtime”에 가까움

 

이유 3) CUDA Graph + host-managed meta

이게 결정적이야.

CUDA Graph는:

  • “실행 시퀀스”를 캡처하고 재생
  • 값은 캡처하지 않음
  • 포인터 + 커널 호출만 기록

이 모델과 가장 잘 맞는 건:

  • 런타임에 값이 바뀌어도
  • 포인터만 유지되는 구조

→ 그래서 meta tensor를 Python에서 직접 관리하는 설계가 자연스럽게 됨.

전통적 AI Compiler는:

  • optimizer state를 “그래프 내부 값”으로 취급
  • 컴파일 타임에 고정하려고 함

너 구조는 정반대:

  • optimizer state는 외부 상태
  • 커널은 그걸 참조만 함

이건 CPU 프로그램 + ISA 실행 모델이랑 똑같아.