1) aicf 전체 메커니즘
C++ 정적 라이브러리를 중심으로
- IR / Lowering / Runtime (CUDA Graph 캡처/리플레이)
- Backend (CUDA ops) 를 한 덩어리로 묶고, 예제에서 링크해서 실행하는 구조
Python 확장 중심이 아닌 C++ 코어 라이브러리 중심
aicf 호출 흐름
- include / aicf / ... 공개 API 호출
- (backend) src / backends / cuda / ops / * / launcher.cu
- (device) kernels.cuh 에 있는 __global__ / __device__ templete
2) 왜 aicf 는 api.hpp / launcher.cu / kernels.cuh 로 쪼갰나
(1) include / ... / api.hpp 는 ABI / 사용자 계약 (Contract) 라서
- 외부에서 include 되는 공개 헤더
- 최소한의 타입 / 함수 시그니처만 두는 게 유지보수에 유리
- 커널 구현 세부가 헤더에 섞이면 컴파일 폭발 + 의존성 폭발
api.hpp 는 링킹 대상이 되는 라이브러리의 표면만 남기는 게 정답
(2) launcher.cu 는 호스트 코드 + 런치 정책 + 디스패치라서 .cu 가정석
- grid / block 계산, shareed mem bytes 계산
- 템플릿 인스턴스 선택
- stream, workspace, alignment 체크
host code, C++ 쪽과 섞이기도 하고, nvcc 로 컴파일되어야 하므로 launcher.cu 가 맞음
(3) kernels.cuh 가 나온 이유 : 커널은 템플릿 / 인라인 중심이 되기 때문
향후 Tensor Core / WMMA, tiling 변형, epilogue 퓨전 같은 역할을 하려면
- template<int TILE_M, ...> 처럼 템플릿화
- __device__ 유틸/프래그먼트 연산 인라인화
- 여러 .cu 들을 같은 커널을 include 해서 인스턴스화
이때 .cu 로 두면
- translaton unit 에서 재사용하기 까다로움
- 템플릿 인스턴스 관리가 지저분
- 중복 컴파일 / 링크 이슈
커널은 헤더, 런처만 .cu 가 흔한 패턴
3) CMake 관점에서 aicf 가 깔끔해진 이유
aicf 는 빌드 산출물
- aicf.lib
- 예제 exe 들
이라서 ops 마다 pyd 를 따로 만드는 복잡한 타겟들이 없음
ge_v2 는 _ops_* 모듈을 많이 만들고 그걸 Python 패키지가 로드하는 구조, CMake 타겟이 폭발하기 쉬움
'AI Compiler framework' 카테고리의 다른 글
| CUDA Elementwise 커널 구현 및 Nsight Compute 분석 문서화 (AICF - Torch 커널 대체의 첫 단계) (0) | 2025.12.18 |
|---|---|
| AICF 초기 프레임워크 구조 정립 및 커널 관측에 대한 기록 - 초기 Pytorch 구현 이유, 실제 커널 실행 흐름 관찰 (0) | 2025.12.17 |
| AI Compiler Framework — Project Structure Overview (0) | 2025.12.16 |
| AI Compiler 각 파이프라인 단계 역할 이해하기 (0) | 2025.12.12 |
| Pattern matching vs Compiler - 어떤 점이 달라져야 하는가 ( 일련의 컴포넌트를 따라 변환 ) (0) | 2025.12.12 |