NVIDIA CUDA Rust: Tile과 SIMT를 고르는 기준
Rust 기반 시스템에서 GPU를 사용하려면 기존에는 호스트 코드를 Rust로 작성하더라도 커널 본체는 CUDA C++ 같은 다른 언어로 구현하는 경우가 많았다. NVIDIA CUDA Rust는 이 경계를 줄여 GPU 커널까지 Rust로 작성할 수 있게 한다.1
이는 단순히 지원 언어가 하나 늘어난 것 이상의 변화다. NVIDIA는 Rust로 Nova 리눅스 드라이버를 작성했으며, NVIDIA Dynamo에도 Rust 기반 코어를 사용한다. NVTX 역시 Rust 바인딩을 제공한다. NVIDIA CUDA Rust는 이러한 흐름을 GPU 커널 개발까지 확장한다.1
두 가지 커널 모델: Tile과 SIMT
NVlabs가 오픈소스로 공개한 프로젝트는 cutile-rs와 cuda-oxide다. 둘 다 Rust로 GPU 커널을 작성할 수 있게 하지만, 개발자가 제어하는 추상화 수준이 다르다.
Tile: 하드웨어 매핑을 컴파일러에 맡긴다
cutile-rs는 Tile 모델을 사용한다. 개발자는 개별 스레드가 아니라 데이터 타일 하나에 적용할 연산을 정의하고, 컴파일러가 이를 하드웨어에 어떻게 배치할지 결정한다. 커널은 CUDA Tile IR을 통해 JIT 컴파일되며, 안정판 Rust 1.89 이상을 지원한다.1
이 접근은 아키텍처별 스레드 배치 결정을 코드에 직접 넣어야 하는 부담을 줄인다. NVIDIA가 특별한 이유가 없다면 Tile 모델을 먼저 검토하라고 안내하는 이유도 여기에 있다.1
SIMT: 메모리와 스레드를 직접 제어한다
cuda-oxide는 SIMT 모델을 지원한다. 개발자가 단일 스레드의 동작을 정의하면 GPU가 이를 수천 개의 스레드에서 실행한다. 작성한 코드는 Rust MIR에서 Pliron과 LLVM을 거쳐 PTX로 컴파일된다.2
cuda-oxide에서는 호스트 코드와 디바이스 코드를 한 파일에 배치하고 cargo oxide 명령으로 빌드할 수 있다. 타입이 지정된 인덱스, 분리된 쓰기 영역, 실행 설정 계약 등을 활용해 잘못된 메모리 접근이나 실행 구성을 더 일찍 확인하도록 돕는다.2
실무에서는 무엇을 선택해야 할까
선택 기준은 필요한 제어 수준이다.
이식성과 생산성이 우선이라면 Tile: 아키텍처별 매핑을 컴파일러에 맡기고 데이터 단위 연산에 집중할 수 있다.
세밀한 제어가 필요하다면 SIMT: 메모리 배치와 스레드 실행 방식을 직접 조정해야 하는 커널에 적합하다.
다만 두 프로젝트는 아직 성숙한 CUDA C++ 도구 체계를 전면 대체하는 단계가 아니다. 특히 cuda-oxide는 초기 알파로 소개되며, 기능 누락과 API 변경 가능성이 명시돼 있다.3 따라서 당장은 운영 환경을 즉시 전환하기보다 작은 커널을 대상으로 안전성, 성능, 도구 호환성을 검증하는 편이 현실적이다.
요약: NVIDIA CUDA Rust의 핵심은 GPU 커널을 Rust로 작성하면서 Tile과 SIMT라는 두 가지 추상화 중 요구사항에 맞는 방식을 선택할 수 있다는 점이다. 아키텍처 매핑을 컴파일러에 맡기려면 Tile을, 메모리와 스레드를 직접 제어하려면 SIMT를 검토할 수 있다. NVIDIA가 2027년 이후까지 이 생태계를 발전시키겠다고 밝힌 만큼, 지금은 작은 실험을 통해 가능성과 한계를 함께 확인할 시점이다.1
참고
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.
