본문 바로가기

AI Compiler framework

kernel_select 부분 추가

현재 흐름

1. 그래프 작성

  • build 에서 linear / relu / save / mse_grad / linear_bwd / sgd_step 같은 고수준 op 호출

 

2. trace - IR 생성

  • trace_ir(build)
  • 결과 : IRGraph(values, nodes)
    • nodes 에는 Linear, ReLU, LinearBwd, SgdStep 같은 IR op 가 들어있음

 

3. lower Stage A ( 구조적 lowering + 기본 kid 박제 )

  • lower_to_backend_ops(ir)
  • 여기서 하는 일
    • 고수준 op 를 primitive op 분해
      • Linear - gemm + bias_add
      • LinearBwd - gemm (dx) + gemm (dw) + reduce_sum (db)
    • 동시에 op / dtype 기반으로 kernel_id 를 1차로 박제
      • gemm_f16_tc_wmma_out_f16_v0
      • reduce_sum_keep_lastdim_f16_v0
      • copy_f16_v0, mse_grad_f16_v0 등

즉 StageA 는 IR 재구성 (lowering) + 기본 매핑 단계

 

4. (선택) opt pass

  • LoweredOps 가 있었던 케이스는
    • gemm + bias_add + relu 를 gemm_epilogue 로 합치는 rewrite / fusion pass

 

5. Stage B = kernel_select / upgrade (형상 기반 최종 결정 박제)

  • apply_kernel_decisions_stageB
  • 여기서 하는 일
    • 형상 기반 variant 업그레이드
    • lastdim 이 짝수면
      • bias_add_f16_v0 → bias_add_f16_vec2_v0
      • relu_f16_v0 → relu_f16_vec2_v0
      • sgd_step_f16_v0 → sgd_step_f16_half2_v0
  • 그리고 결과를 lowered 에 kernel_id 로 다시 써서 최종 결정이 박제

 

6. plan 메모리 바인딩

 

7. exec 결정 박제 기반 실행