---
title: "엔비디아, 러스트로 CUDA 커널을 쓰는 공식 컴파일러 공개"
published: 2026-05-11T15:55:07.000Z
canonical: https://jeff.news/article/2647
---
# 엔비디아, 러스트로 CUDA 커널을 쓰는 공식 컴파일러 공개

엔비디아 연구소가 러스트 코드로 CUDA 커널을 작성하고 실행하는 ‘CUDA-oxide’를 공개했어. 제공된 예시는 러스트 매크로로 GPU 커널을 선언하고, 호스트 코드에서 CUDA 컨텍스트·디바이스 버퍼·런치 설정을 구성해 벡터 덧셈을 실행하는 흐름을 보여줘. 기사 본문은 코드 예제 중심이라 세부 설계나 성능 수치는 확인되지 않아.

- 엔비디아의 CUDA-oxide는 러스트 코드에서 CUDA 커널을 작성하고 실행하는 공식 컴파일러로 소개됐음
  - 본문은 긴 설명보다 코드 예제가 전부에 가까움
  - 그래도 예제만 보면 목표는 분명함. 러스트 문법과 매크로로 GPU 커널을 선언하고, 호스트 쪽에서도 러스트 API로 CUDA 실행을 구성하는 흐름임

- 예제는 가장 기본적인 GPU 데모인 벡터 덧셈임
  - 입력 배열 a와 b는 각각 1,024개의 f32 값을 담음
  - a는 전부 1.0, b는 전부 2.0으로 채워지고, 결과 c의 첫 값이 3.0인지 assert로 확인함
  - 수치 자체는 단순하지만, 커널 선언부터 디바이스 메모리 복사, 실행, 결과 회수까지 전체 경로를 보여주는 예제임

- 커널 정의는 러스트 매크로 기반으로 구성됨
  - #[cuda_module]로 CUDA 모듈을 만들고, #[kernel]로 vecadd 커널을 표시함
  - 커널 내부에서는 thread::index_1d()로 현재 GPU 스레드의 1차원 인덱스를 가져옴
  - 결과 버퍼는 DisjointSlice<f32>로 받고, get_mut(idx)로 해당 위치를 안전하게 꺼내 값을 씀

- 호스트 코드는 CUDA 실행 준비를 러스트 타입으로 감싸는 모양새임
  - CudaContext::new(0)으로 0번 GPU 컨텍스트를 만들고 기본 스트림을 가져옴
  - DeviceBuffer::from_host로 입력 데이터를 GPU 메모리에 올림
  - DeviceBuffer::<f32>::zeroed로 결과 버퍼를 1,024개 크기로 초기화함
  - LaunchConfig::for_num_elems(1024)로 실행할 원소 수 기준의 런치 설정을 넘김

- 개발자 입장에서 흥미로운 지점은 ‘CUDA를 러스트스럽게 감싸는 정도’임
  - 예제 코드만 보면 커널 코드와 호스트 코드가 한 파일 안에서 자연스럽게 이어짐
  - C/C++ CUDA에 익숙한 개발자라면 모듈 로드, 디바이스 버퍼, 커널 런치라는 개념은 그대로 보일 거임
  - 차이는 러스트의 매크로, 타입, borrow 스타일 API로 그 흐름을 표현한다는 점임

- 다만 본문에 없는 건 꽤 많음
  - 성능 벤치마크, 지원되는 러스트 기능 범위, CUDA C++ 대비 제약, 디버깅 경험은 확인되지 않음
  - 실제 프로덕션 GPU 코드를 옮길 수 있는 수준인지, 학습·실험용인지도 본문만으로는 판단하기 어려움
  - 지금 단계에서 공유 포인트는 ‘엔비디아가 공식적으로 러스트-CUDA 경로를 보여주기 시작했다’ 정도가 가장 정확함

## 핵심 포인트

- CUDA-oxide는 엔비디아의 공식 러스트-투-CUDA 컴파일러로 소개됨
- 예제는 GPU에서 1,024개 f32 원소를 더하는 벡터 덧셈 커널을 보여줌
- #[cuda_module]과 #[kernel] 매크로로 러스트 코드 안에서 CUDA 모듈과 커널을 정의함
- 호스트 코드는 CudaContext, DeviceBuffer, LaunchConfig를 사용해 실행 환경과 GPU 메모리를 다룸

## 인사이트

아직 본문만 보면 프로젝트 철학이나 벤치마크보다 ‘러스트 문법으로 CUDA 커널을 이렇게 쓸 수 있다’는 시그널이 핵심이야. GPU 코드에서도 러스트의 타입 시스템과 안전성 모델을 끌고 오려는 흐름으로 보면 됨.
