Адрес: ул. Б. Очаковская 32 Москва Россия
Наши официальные канал и чат в telegram
Поднимем Devuan на вершину Distrowatch! Просто перейдите по ссылке один раз в день.

NVIDIA опубликовала CUDA-oxide, компилятор из Rust в CUDA

Новости собранные из разных RSS источников
Аватара пользователя
root:#
Site Admin
Сообщения: 1757
Зарегистрирован: Вт ноя 08, 2022 3:27 pm
Благодарил (а): 54 раза
Поблагодарили: 28 раз

NVIDIA опубликовала CUDA-oxide, компилятор из Rust в CUDA

Сообщение root:# »

NVIDIA опубликовала CUDA-oxide, компилятор из Rust в CUDA
Компания NVIDIA опубликовала первый выпуск инструментария CUDA-oxide, позволяющего создавать на языке Rust параллельно исполняемые в GPU ядра CUDA SIMT (Single Instruction, Multiple Threads). Проект позволяет компилировать код на языке Rust, использующий штатную систему типов и модель владения Rust, напрямую в инструкции для выполнения в виртуальной машине CUDA PTX (Parallel Thread Execution) без применения промежуточных предметно-ориентированных языков (DSL) и обвязок. Код инструментария написан на языке Rust и распространяется под лицензией Apache 2.0. Первый выпуск позиционируется как начальная альфа-версия. Инструментарий включает в себя:
  • Бэкенд генерации кода для компилятора rustc, позволяющий компилировать функции с атрибутом "#[kernel]" в параллельно исполняемые на GPU ядра в представлении CUDA PTX. При компиляции используется штатная для rustc цепочка преобразований на базе фреймворка Pliron: Rust -> MIR -> Pliron IR -> LLVM IR -> PTX. Унифицированная система сборки компонентов, выполняемых на хост-системе и на GPU, которая сводится к выполнению команд "cargo oxide build" и "cargo oxide run". Набор Rust-абстракций, который можно использовать в ядрах на стороне GPU. Например, доступны функции для индексации, использования разделяемой памяти и барьеров, атомарных операций, синхронизации групп потоков, TMA (Tensor Memory Accelerator). Возможен вызов обвязок над низкоуровневыми инструкциями, специфичными для архитектуры Blackwell (например, расширенные матричные операции). Crate-пакеты с выполняемыми на стороне хоста компонентами CUDA runtime, позволяющими управлять памятью, запускать ядра на GPU и взаимодействовать с выполняемыми на GPU функциями в асинхронном режиме. Коллекция примеров ядер, демонстрирующих такие возможности, как работа с векторами, умножение матриц (GEMM), атомарные операции, асинхронное выполнение, интеграция с библиотекой MathDx, применение дженериков и замыканий, взаимодействия с CUDA-ядрами на C++/CCCL.
Ядра для GPU создаются на обычном Rust (не диалект), но выполняются в окружении no_std и могут использовать только функции из библиотеки libcore и ранее отмеченные специализированные Rust-абстракции, без доступа к стандартной библиотеке Rust (libstd). Поддерживаются примитивные типы (u8..u64, f32, f64, bool), структуры, перечисления, кортежи, массивы ([T; N]) и слайсы (&[T]), операторы match / if / if let, циклы for и while, итераторы (.iter(), .enumerate()), замыкания и дженерики. Не поддерживаются типы String, Vec и Box, макросы format!, panic! и println!, Trait-объекты и реализуемые через обращение к операционной системе функции стандартной библиотеки (работа с файлами, ввод/вывод, сетевые операции). Доступно три уровня обеспечения безопасности CUDA-ядер на Rust: защита через систему типов (safe), использование блоков unsafe и обращение к низкоуровневым аппаратным инструкциям. Производительность созданной на CUDA-oxide реализации матричного умножения (GEMM SoL) на GPU B200 достигает 868 триллионов операций в секунду, что составляет 58% от производительности оптимизированной библиотеки cuBLAS.
Изображение

Изображение

Изображение

Изображение

Изображение

Изображение

Источник: https://www.opennet.ru/opennews/art.shtml?num=65426