NVIDIA, GPU 커널용 Rust 개발 경로 'CUDA Rust' 공개
최근 30일 조회수 — 좋아요 —핵심 요약
NVIDIA가 GPU 커널을 Rust로 직접 작성해 PTX로 컴파일할 수 있는 CUDA Rust를 공개했다.
NVIDIA가 2026년 9월, GPU 커널을 Rust로 직접 작성할 수 있는 새로운 개발 경로 ‘CUDA Rust’를 공개했다. 기존 CUDA C++와 CUDA Python이 이미 엔터프라이즈급 성숙도를 갖춘 상태에서, NVIDIA는 CUDA Rust를 2027년 이후까지 계속 키워나가겠다고 밝혔다.1
이번 발표의 배경은 AI 시스템 소프트웨어 전반에서 Rust 채택이 늘어나는 흐름이다. 추론 엔진, 서빙 인프라, 드라이버, 에이전트 런타임 등 AI의 시스템 계층은 모델과 기법이 바뀔 때마다 계속 변하는데, 이 영역에서 Rust를 쓰는 코드가 늘고 있다는 것이 NVIDIA의 설명이다. Rust는 성능을 포기하지 않으면서도 컴파일 시점에 여러 종류의 버그를 잡아낸다는 장점 때문이다. NVIDIA 내부에서도 이미 이런 전환이 진행 중이다. Nova Linux 드라이버는 Rust로 작성됐고, 추론 서빙 프레임워크 NVIDIA Dynamo는 Rust 코어 위에 만들어졌으며, 프로파일링 도구 NVTX에는 Rust 바인딩이 있다.
다만 GPU 커널 자체는 이 흐름에서 예외였다. Rust에서 커널을 실행(launch)하는 것은 가능했지만, 커널 코드 자체는 다른 언어로 작성해야 했다. CUDA Rust는 이 공백을 메운다. GPU 커널을 Rust로 작성하고 PTX(NVIDIA GPU의 중간 표현 명령어 집합)로 네이티브 컴파일할 수 있게 되어, 다른 언어로 작성된 코드를 감싸는 래퍼 방식에서 벗어난다.
SIMT와 Tile, 두 갈래 트랙
CUDA Rust는 기존 CUDA가 지원하는 두 프로그래밍 모델을 그대로 따른다. 하나는 SIMT(Single Instruction, Multiple Threads)로, CUDA C++나 numba-cuda에서 이미 쓰던 방식이다. 하나의 스레드가 할 일을 지정하고 이를 수천 개 실행시키는 구조다. 다른 하나는 비교적 새로운 모델인 Tile로, C++와 Python에서도 이미 제공되고 있다. Tile은 데이터 한 조각(타일)이 할 일만 명시하면 되고, 나머지는 Tile IR 컴파일러가 아키텍처별 매핑을 알아서 처리한다. NVIDIA는 소스 코드에 아키텍처별 선택이 박히지 않는다는 이유로 Tile을 먼저 검토할 것을 권하고, 메모리와 스레드를 직접 제어해야 할 때만 SIMT로 내려가라고 안내한다.
이 두 모델과는 별개로 어떤 언어를 쓸지는 스택에 맞춰 고르면 된다는 것이 NVIDIA의 입장이다. CUDA Rust의 두 프로젝트는 이미 Rust 스택을 쓰고 있는 개발자를 위한 것이며, 향후 언어 간 상호운용(interop)을 지원할 계획이어서 Rust를 택해도 C++·Python 생태계와 완전히 단절되지는 않는다고 설명했다.
SIMT 트랙을 담당하는 것은 cuda-oxide라는 프로젝트다. 이는 커스텀 rustc 코드젠 백엔드로, 컴파일 과정을 가로채 #[kernel]로 표시된 함수를 Rust MIR, 커뮤니티 IR 프레임워크인 Pliron, LLVM IR을 거쳐 PTX까지 변환하고, 나머지 코드는 표준 백엔드로 넘긴다. Pliron 위에 얹힌 GPU 관련 dialect(중간 표현 확장)는 NVIDIA가 자체 개발한 것으로, 표준 LLVM 백엔드가 넘겨받기 전까지 모든 변환 과정이 Rust 안에서 이뤄진다.
실행 환경으로는 Linux, 컴퓨트 능력(compute capability) 8.0 이상 GPU, CUDA 툴킷 12.x 이상, libclang 헤더를 포함한 clang, 그리고 고정된 버전의 nightly 툴체인이 필요하다. cargo oxide doctor 명령으로 이 요구 조건과 선택적인 시스템 LLVM 설치 여부까지 한 번에 점검할 수 있다. 설치는 다음과 같다.
cargo +nightly-2026-04-03 install --git https://github.com/NVlabs/cuda-oxide.git cargo-oxide
cargo oxide new vecadd_demo
cd vecadd_demo
cargo oxide doctor
cargo oxide run
첫 cargo oxide run 실행 시에는 코드젠 백엔드 자체를 빌드하기 때문에 시간이 걸리지만, 이후 실행부터는 캐시를 재사용한다. NVIDIA가 공개한 예시 프로그램은 1,024개 부동소수점 원소에 대한 벡터 덧셈(elementwise addition)을 수행하며, 정상 실행 시 PASSED: all 1024 elements correct를 출력한다. #[kernel], #[launch_bounds(256)], #[launch_contract] 같은 매크로로 GPU 진입점과 블록 구성을 지정하는 구조는 기존 CUDA C++ 커널 작성 방식과 크게 다르지 않다.
이번 발표는 SIMT 트랙에 해당하는 cuda-oxide의 사용법까지만 공개된 상태이며, Tile 트랙을 Rust로 다루는 프로젝트에 대한 세부 내용은 자료에 포함되어 있지 않다.
Footnotes
-
NVIDIA Technical Blog, “Introducing CUDA Rust: Two Tracks for Writing GPU Kernels” ↩
읽기 목록은 이 브라우저에 저장됩니다.
출처
- Introducing CUDA Rust: Two Tracks for Writing GPU Kernels | NVIDIA Technical Blog — NVIDIA Technical Blog
이 글은 위 출처를 근거로 자동 생성된 뒤 발행됐습니다. 원문을 함께 확인해 주세요. 교차 보도 없이 단독 출처로 작성됐습니다.