본문 바로가기

dev_AI_framework

epilogue 실행 방식 고민 - 모놀리식 통합형 ( 항상 커널 내부에 epilogue 가 존재하도록 !!! )

모놀리식 통합형 (네 방식)

epilogue가 항상 커널 내부에 존재하며, compile-time 특수화로 제거 가능.

실행 과정

 
GEMM.forward(...) → 내부에서 epilogue::apply(...) 인라이닝 → if constexpr 로 bias/act/dropout 존재 시만 코드 유지 → 한 번의 커널 launch

특징

  • gemm.cu 안에서 epilogue_fused.cuh 템플릿 포함.
  • 컴파일 시 ActKind, HasBias, DoDropout 등 인스턴스 확정.
  • 런타임 분기 없음, LTO로 epilogue 호출 완전 인라이닝.

장점

  • 독립 모듈 단위에서도 최고 성능 / 최소 메모리 왕복.
  • CUDA Graph Capture 완전 안전.
  • 별도 디스패처 필요 없음 → 단일 binary만으로 실행 가능.

단점

  • 조합 수 많아질수록 빌드 부하↑.
  • 코드 수정 시 재빌드 필수.
  • 각 모듈마다 epilogue 코드가 일부 포함(바이너리 중복).