NVIDIA/cuda-tile
CUDA Tile IR is an MLIR-based intermediate representation and compiler infrastructure for CUDA kernel optimization, focusing on tile-based computation patterns and optimizations targeting NVIDIA tensor core units.
NVIDIA / cuda‑tile – CUDA Tile IR
무엇인가요
- MLIR/LLVM 위에 구축된 오픈소스 컴파일러 인프라로, 새로운 CUDA Tile dialect를 도입합니다.
- 이 다이얼렉트는 NVIDIA GPU(특히 Tensor-Core 유닛)에 효율적으로 매핑되는 타일 기반 계산 패턴을 표현합니다.
- 다음을 포함합니다:
- MLIR 다이얼렉트 (타일된 텐서, 포인터 등에 대한 연산 및 타입)
- IR을 프로그래밍적으로 구성하고 변환하기 위한 Python 바인딩
- 바이너리 bytecode 형식과 MLIR 텍스트, bytecode, 최종 GPU 바이너리(cubin) 간 변환 도구
- 컨플라이언스 테스트 스위트.
왜 중요한가요
- 타일링은 고성능 커널(행렬 곱셈, 컨볼루션 등)의 핵심 최적화입니다. CUDA Tile은 일급 추상화를 제공함으로써 개발자가 고수준에서 커널을 작성하면서도 수동 최적화된 CUDA의 성능에 도달할 수 있도록 합니다.
- CUDA Toolkit 13.1 릴리스와 통합되어 있어 생성된 코드를 일반 CUDA 드라이버 API로 실행할 수 있습니다.
주요 구성 요소
| 구성 요소 | 목적 |
|---|---|
| CUDA Tile Dialect | GPU 메모리 계층과 Tensor-Core 사용을 고려한 tile<…> 타입, load_ptr_tko, print_tko, reshape, broadcast 등의 연산을 정의하는 MLIR 다이얼렉트. |
| Python 바인딩 | C++를 작성하지 않고도 스크립트로 Tile IR을 구축, 검사, 변환 패스를 실행할 수 있게 합니다. |
| Bytecode | 컴팩트한 바이너리 표현(.tilebc)으로, CUDA 드라이버에 의해 JIT 컴파일되거나 tileiras로 AOT 컴파일되어 cubin으로 변환될 수 있습니다. |
| 테스트 스위트 | LLVM‑lit 기반 테스트로 다이얼렉트 의미와 엔드투엔드 컴파일 흐름을 검증합니다. |
일반적인 워크플로우
- 작성: CUDA Tile 다이얼렉트를 사용하여 MLIR로 커널을 작성합니다(README 예제 참조).
- 변환:
cuda-tile-translate로 bytecode로 변환합니다. - 컴파일: bytecode를 cubin으로 컴파일합니다(
tileiras) 또는 런타임에 직접 bytecode를 로드합니다. 드라이버가 JIT 컴파일합니다. - 실행: CUDA 드라이버 API(또는 런타임 API)를 통해 호스트 프로그램에서 커널을 시작합니다.
빌드 및 설치
- CMake ≥ 3.20, C++17 컴파일러, Python ≥ 3.6, 그리고 호환 가능한 LLVM/MLIR 체크아웃이 필요합니다(정확한 커밋은
cmake/IncludeLLVM.cmake에 고정되어 있습니다). - LLVM 제공 방법 3가지:
- CMake가 자동으로 올바른 LLVM 소스를 다운로드합니다(느리지만 가장 간단).
- CMake에 로컬 LLVM 소스 트리 경로를 지정합니다.
- 미리 빌드된 LLVM 설치에 링크합니다(파이썬 API가 필요한 경우
-DMLIR_ENABLE_BINDINGS_PYTHON=ON으로 빌드되어야 함).
- 선택적 플래그:
-DCUDA_TILE_ENABLE_BINDINGS_PYTHON=ON– 파이썬 API 빌드.-DCUDA_TILE_ENABLE_TESTING=ON– lit 테스트 스위트 빌드 및 실행.-DCUDA_TILE_ENABLE_CCACHE=ON– 재컴파일 속도 향상.
예제 (README에서)
# 라이브러리 및 도구 빌드
cmake -G Ninja -S . -B build \
-DCMAKE_BUILD_TYPE=Release \
-DCUDA_TILE_ENABLE_BINDINGS_PYTHON=ON \
-DCUDA_TILE_ENABLE_TESTING=ON
cmake --build build
# MLIR 파일을 bytecode로 변환
cuda-tile-translate example.mlir \
--bytecode-version=13.1 \
--mlir-to-cudatilebc --no-implicit-module -o example.tilebc
# AOT로 cubin에 컴파일 (sm_100을 GPU 아키텍처로 교체)
tileiras --gpu-name sm_100 example.tilebc -o example.cubin
# cubin을 로드하는 호스트 프로그램 컴파일 및 실행
g++ example_host.cpp -o example -I/usr/local/cuda/include \
-L/usr/local/cuda/lib64 -lcuda
./example
이 프로그램은 데이터 배열을 출력하여 Tile IR 소스에서 GPU 실행까지의 완전한 엔드투엔드 경로를 보여줍니다.
사용 사례
- 딥러닝 연산자용 커스텀 커널을 구축하는 연구자로, Tensor-Core를 활용해야 하는 경우.
- 재사용 가능한 고수준 타일 알고리즘 표현을 원하면서도 저수준 CUDA를 생성할 수 있는 성능 엔지니어.
- MLIR에 GPU 전용 패스를 확장하는 도구 개발자; CUDA Tile은 구체적인 다이얼렉트와 테스트 허브를 제공합니다.
버전 관리 및 호환성
- 오픈소스 버전은 CUDA Toolkit 버전(
13.1.x)과 일치합니다. 패치 번호는 오픈소스 코드 자체의 릴리스를 추적합니다. - 각 릴리스는 특정 LLVM 커밋 범위에 연결되어 있으며, 헬퍼 스크립트(
scripts/get-cuda-tile-version-for-llvm-hash.sh)는 주어진 LLVM 리비전에 적합한 CUDA Tile 태그를 선택하는 데 도움을 줍니다.
기여 모델
- 프로젝트는 Apache‑2.0 with LLVM exceptions 라이선스 하에 오픈소스이지만, README는 외부 기여는 현재는 수락하지 않습니다라고 명시하고 있습니다. 버그나 피드백은 이슈를 제출하도록 권장합니다.
결론: CUDA Tile은 MLIR 다이얼렉트를 통해 타일화된 GPU 커널을 기술하고 최적화할 수 있는 진정한 생산 수준의 컴파일러 스택이며, 변환, 테스트, 기존 CUDA 워크플로우에의 통합을 위한 완전한 도구 체인을 갖추고 있습니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트