1. Header-only
- 보통의 라이브러리는 .h (선언) + .cpp/.cu (구현) 파일로 나뉘고, 빌드하면 .a (static lib) 이나 .so/.dll (shared lib) 파일을 만들어서 링크
- 그런데 header-only 라이브러리는 .h(.hpp/.cuh) 파일에 구현 코드까지 전부 들어있다.
- 따라서 사용자는 CUTLASS 를 별도 컴파일/링크할 라이브러리로 빌드하지 않고, 자기 프로젝트에서 #include <cutlass/...> 만 하면 된다.
- CUDA 코드라서 nvcc 가 인클루드 시점에 템플릿들을 컴파일해준다.
즉, 따로 .so 나 .a 를 배포하거나 링크하지 않아도 된다는 의미
2. 템플릿 라이브러리
- CUTLASS 는 거의 모든 기능이 C++ 템플릿으로 되어 있다.
- cutlass::gemm::device::Gemm<...> 같은 식으로, 행렬 레이아웃, 데이터 타입, 타일 크기, 에필로그 functor 등을 템플릿 인자로 전달.
- 이런 템플릿은 컴파일 타임에 실제 코드로 인스턴스화된다.
- 특정 GEMM 조합을 쓰고 싶으면, 그에 맞는 템플릿을 인스턴스화하는 코드만 작성하면 된다. 필요한 커널만 코드 생성이 되고, 나머지는 빌드 결과에 포함되지 않는다.
즉, CUTLASS 는 컴파일 타임 커스터마이즈를 위한 설계라서, 모든 구현이 템플릿 코드로 header 에 들어있다.
3. 의미와 장단점
장점
- 유연성 극대화 : 데이터 타입, 매트릭스 레이아웃, tile 크기, 에필로그 연산까지 전부 조합 가능
- 성능 최적화 : 템플릿이므로 인라이닝, 상수 전파가 잘 되어 성능 최적화가 용이
- 빌드 단순화 : 별도 .so 링크 필요 없음 -> 그냥 include 하면 끝
단점
- 컴파일 시간이 길다 : 템플릿 인스턴스가 많아질수록 빌드가 무거워짐
- 바이너리 크기 증가 위험 : 필요 이상의 조합을 많이 인스턴스화하면 코드 사이즈 폭증
- ABI 안정성 부족 : precompiled 라이브러리처럼 "버전 안정 ABI" 가 없고, 항상 소스 레벨에서 컴파일해야 함
'dev_AI_framework' 카테고리의 다른 글
| epilogue 동작과정 이해 (0) | 2025.09.04 |
|---|---|
| Graph Executor v2 (GE2) 개발 진행 기록 (0) | 2025.09.04 |
| cuBLASLt / CUTLASS 의 에필로그 epilogue 까지 흡수한다. - GEMM 연산 이후의 연산들 (bias add, activation, scaling 등 ) 의 커널 통합 ( 호스트 디스패치 + 커널 특화 방식, 나는 CUTLASS 가 맞을 듯??) (0) | 2025.09.03 |
| AI Compiler, Graph Executor 로드 (0) | 2025.09.03 |
| 📄 문서: e2e f16 GEMM + Bias + ReLU 테스트 동작 과정 (0) | 2025.09.03 |