NVIDIA показала CUDA Rust: два пути писать GPU-ядра на Rust
NVIDIA показала CUDA Rust: два пути писать GPU-ядра на Rust 8 сентября 2026 года NVIDIA представила CUDA Rust — два проекта, которые позволяют писать GPU-ядра на Rust и компилировать их напрямую в PTX, промежуточный код для видеокарт NVIDIA. Раньше ядро можно было запустить из Rust, но само тело ядра обычно писалось на другом языке; CUDA Rust закрывает этот разрыв. Первый проект, cuda-oxide, — это SIMT-трек: программист описывает работу одного потока и запускает тысячи таких потоков. Это кастомный бэкенд компилятора rustc: функции-ядра идут через внутренние представления Rust и LLVM до PTX, остальной код — через стандартный путь. Хост- и девайс-код живут в одном файле и собираются одной командой. Проект находится в ранней альфе. Безопасность здесь строится на сигнатуре ядра. Обычный изменяемый срез не подходит для выходного буфера — borrow checker такое не пропустит. Вместо него cuda-oxide использует тип DisjointSlice, который разбивает один borrow на независимые куски по потоку на элемент. Индекс потока — не голое число, а специальный тип, а выход за границы превращается в Option, который ядро обязано обработать. Хостовая часть должна подтвердить заявленную геометрию запуска: безопасный метод запуска принимает только токен, который вернула валидация. Ядро без контракта получает лишь небезопасные методы запуска. Второй проект, cutile-rs, — Tile-трек, уровень выше. Программист описывает операцию над плиткой данных, а компилятор сам решает, как она ложится на реальные потоки GPU. Ядро JIT-компилируется через CUDA Tile IR при первом запуске. Изменяемые тензоры разбиваются на хосте до запуска, и каждая плитка получает свой непересекающийся кусок — гарантия владения Rust продлевается через границу запуска. Геометрия сетки выводится из разбиения данных, а не задаётся в коде. Всё до точки синхронизации — ленивое описание, которое выполняется один раз в конце. Оба трека ловят самую коварную ошибку — передачу выходного буфера как собственного входа: она не компилируется. Но гарантии ограничены. Ни один из инструментов не заметит, если ядро читает не тот вход, делает неверную редукцию или ходит по памяти так, что убивает производительность. Безопасность памяти и свобода от гонок — не то же самое, что корректность вычислений. Стадии проектов разные. cutile-rs опубликован на crates.io, работает на стабильном Rust 1.89+ и CUDA 13.3 и уже используется вне NVIDIA — в движке вывода Grout от Hugging Face и в mistral.rs. cuda-oxide требует ночной тулчейн с фиксированной датой, CUDA 12.x и clang, и обновляется по графику NVIDIA. Оба требуют Linux и GPU с compute capability 8.0+. Покрытие возможностей неполное, API будут меняться, и NVIDIA описывает оба проекта как работы, которые будут зреть до 2027 года и позже. Совет NVIDIA по выбору прост: сначала пробовать Tile-трек — он проще и безопасен по построению для поэлементных операций, редукций и матричных вычислений. SIMT нужен, когда требуется ручное управление памятью, потоками или нестандартные паттерны доступа. Переписывать существующие стеки на CUDA C++ и Python не предлагается: треки добавочные, и NVIDIA заявляет планы межъязыковой совместимости, так что Rust-ядро может соседствовать с C++ и Python-ядрами. Источник: https://dev.to/chenyuan20509/cuda-rust-what-the-two-gpu-kernel-tracks-actually-guarantee-22f0