Документация / РусскийИсходный текст ↗

Драйвер API и серверные части

English | 简体中文 | 日本語 | Deutsch | Русский

Документация · Среда выполнения API · Совместимость · 中文

Драйверные крейты Ruda связывают общий контракт среды выполнения с бэкендами исполнения. Руководство описывает точки входа бэкендов Rust, а не прямые замены функций CUDA Driver API.

1. Крейты бэкендов

Ящик Серверная часть выполнения
ruda-driver-cuda NVIDIA CUDA пути к драйверам и компиляции
ruda-driver-cpu CPU
ruda-driver-wgpu WGPU
ruda-driver-hip HIP

2. Выберите устройство NVIDIA.

ruda_driver_cuda::CudaDevice выбирает устройство через общедоступное поле index: usize, значение которого по умолчанию равно 0. CudaRuntime реализует признак Runtime.

Получите клиент устройства по умолчанию с помощью:

use ruda_driver_cuda::{CudaDevice, CudaRuntime};
use ruda_kernel::dsl::Runtime;

let client = CudaRuntime::client(&CudaDevice::default());

Полный пример работоспособности см. в ptx-runtime. Индекс устройства идентифицирует текущую позицию перечисления компьютера, а не стабильную идентичность между компьютерами или изменения в порядке перечисления.

3. Конфигурация

RuntimeOptions содержит memory_config для управления памятью. CudaCompiler и CudaComputeKernel — это псевдонимы типов для цепочки компиляции CUDA C++; включение прямых PTX не меняет их смысла.

Выберите путь компиляции с помощью RUDA_CUDA_COMPILER, как описано в руководстве по компиляции. install::cuda_path(), install::include_path() и install::cccl_include_path() определяют пути к набору инструментов.

4. Внешние зависимости

Прямая генерация PTX обходит этап компиляции ядра CUDA C++/NVRTC. Для выполнения по-прежнему требуется драйвер NVIDIA, а в крейте сохраняются зависимости NVRTC.

Интерфейсы не гарантируют принятие произвольных внешних контекстов CUDA, потоков или необработанных указателей устройств. Межъязыковая интеграция должна учитывать владение, зависимости выполнения и распространение ошибок; Серверная часть CUDA сама по себе не обеспечивает полную совместимость с ABI.

5. Интегрируйте другой серверный интерфейс

Серверная часть использует Runtime для связи устройства, компилятора и вычислительного сервера. Более высокие уровни получают доступ к контракту через ComputeClient. Перед интеграцией вычислительных библиотек определите хранилище, ошибки компиляции, синхронизацию и семантику запросов возможностей.

Точки входа в исходный код: экспорт CUDA, тип устройства, реализация во время выполнения и характеристика времени выполнения.

6. Взаимодействие с потоками и событиями CUDA

ruda_driver_cuda::interop::{command, StreamCommand, record_allocation} использует ту же службу устройства и контекст CUDA, что и ядра RUDA. ID потоков и событий — управляемые RUDA идентификаторы, а не сырые дескрипторы CUDA; stream 0 — поток по умолчанию.

record_allocation(device, stream, handle) сохраняет выделенную память до завершения уже отправленной в этот поток работы; это не заменяет зависимость исполнения. Создание потоков ограничено streaming.max_streams и завершается ошибкой при исчерпании пула. Эти API не импортируют произвольные внешние потоки или контексты CUDA.