1. 문제 인식
초기 설계 과정에서 op 와 kernel 을 동일한 단위로 인식하는 혼동이 있었음
특히 lowered ops 단계에서 각 연산이 이미 CUDA Kernel 과 1:1 로 대응되는 것처럼 보이기 때문에
op 단위에서 바로 kernel 이 선택된다는 인상을 주기 쉬웠음
=== LoweredOps(v2_kid_trace_by_id_test) ===
ops: 18
#000 gemm (0, 1) -> (3) {transB=True} kid=gemm_f16_tc_wmma_out_f16_v0
#001 bias_add (3, 2) -> (3) kid=bias_add_f16_vec2_v0
#002 relu (3) -> (4) kid=relu_f16_vec2_v0
#003 copy_saved (4) -> (5) kid=copy_f16_v0
#004 gemm (4, 6) -> (8) {transB=True} kid=gemm_f16_tc_wmma_out_f16_v0
#005 bias_add (8, 7) -> (8) kid=bias_add_f16_vec2_v0
#006 mse_grad (8, 9) -> (10) kid=mse_grad_f16_v0
#007 gemm (10, 6) -> (11) {transA=False, transB=False} kid=gemm_f16_tc_wmma_out_f16_v0
#008 gemm (10, 4) -> (12) {transA=True, transB=False} kid=gemm_f16_tc_wmma_out_f16_v0
#009 reduce_sum (10) -> (13) {axis=0, keepdim=False} kid=reduce_sum_keep_lastdim_f16_v0
#010 relu_bwd (11, 5) -> (14) kid=relu_bwd_f16_vec2_v0
#011 gemm (14, 1) -> (15) {transA=False, transB=False} kid=gemm_f16_tc_wmma_out_f16_v0
#012 gemm (14, 0) -> (16) {transA=True, transB=False} kid=gemm_f16_tc_wmma_out_f16_v0
#013 reduce_sum (14) -> (17) {axis=0, keepdim=False} kid=reduce_sum_keep_lastdim_f16_v0
#014 sgd_step (1, 16) -> (1) {lr=0.01} kid=sgd_step_f16_half2_v0
#015 sgd_step (2, 17) -> (2) {lr=0.01} kid=sgd_step_f16_half2_v0
#016 sgd_step (6, 12) -> (6) {lr=0.01} kid=sgd_step_f16_half2_v0
#017 sgd_step (7, 13) -> (7) {lr=0.01} kid=sgd_step_f16_half2_v0
그러나 online kernel selection 및 op fusion 을 도입하는 순간 op 와 kernel 은 명확히 다른 역할을 갖는 계층임이 드러난다.
2. 핵심 개념 요약
- op : IR 수준의 의미적 연산자
- Lowered Op : 실행 친화적으로 분해된 primitive op
- Kernel : 실제 GPU 에서 실행되는 구현 단위
- Region : 여러 op 가 결합되어 하나의 kernel 로 실행되는 범위
Op 는 의미 단위, Kernel 은 구현 단위로 Kernel 은 하나 이상의 Op 를 포함할 수 있음
3. Op 는 Kernel 보다 더 작은 단위
3.1 Op 의 역할
- 어떤 수학적 / 의미적 연산을 수행하는가
- 입력 / 출력 텐서의 관계는 무엇인가
- 다른 op 와 결합할 때 의미가 어떻게 변하는가
독립적으로도 실행 가능하지만, 의미적으로는 서로 결합될 수 있다.
3.2 kernel 의 역할
- 어떤 연산 시그니처를 지원하는가
- dtype / layout / epilogue 조합이 가능한가
- 어떤 하드웨어 제약
Kernel 은 Op 들의 조합 결과를 만족할 수 있을 때만 선택된다.
4. 왜 Op Attribute 와 Kernel Meta 가 분리되어야 하는가
fusion / online selection 이 추가되었기 때문
4.1 실제 필요한 구조
- Op Attribute
- 이 op 가 region 에 어떤 의미를 추가하는가
- compose 의 입력
- Kernel Meta
- 이 kernel 이 어떤 region attribute 를 지원하는가
- cadidate filtering 의 대상
5. Attribute 계층 구조
5.1 Op Attribut
- lowered op 에서 동적으로 생성
- 개별 op 의 의미를 표현
5.2 Region Attribute
- 여러 OpAttr 를 compose 한 누적 상태
- canonial form 으로 수렴
5.3 Kernel Meta
- 사전에 정의된 정적 메타 데이터
- kernel 이 지원 가능한 RegionAttr 의 범위 명시
6. online kernel selection 에서의 올바른 흐름
- lowered op - OpAttr 생성
- AttributeState 에 OpAttr compose
- RegionAttr 갱신
- KernelMeta 후보 교집합 갱신
- 결합 불가 시 flush
- Region 에 대해 kernel 하나 확정
'AI Compiler framework' 카테고리의 다른 글
| StageC 현재 방식 확인 (0) | 2026.01.27 |
|---|---|
| 객체가 아닌 상태로서의 kernel 해석 - op attribute 구조를 끝까지 들고 가자 (0) | 2026.01.26 |
| Attribute-State 기반 Online Kernel Selection 설계 (0) | 2026.01.25 |
| 행렬(서로 다른 속성들의 교차 필요)과 같은 연산 처리로 DAG 를 만들자 - 아이디어 정리 (0) | 2026.01.24 |
| 전통적인 컴파일러의 흐름 (0) | 2026.01.24 |