ドキュメント / 日本語ソースを見る ↗

ドライバー 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 を参照してください。デバイス インデックスは、現在のマシンの列挙位置を識別するものであり、マシン間での安定した ID や列挙順序の変更を識別するものではありません。

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 コンテキスト、ストリーム、または RAW デバイス ポインターの採用を保証しません。言語間の統合では、所有権、実行の依存関係、エラーの伝播を考慮する必要があります。 CUDA バックエンドだけでは、完全な ABI 互換性は提供されません。

5. 別のバックエンドを統合する

バックエンドは、Runtime を使用して、デバイス、コンパイラー、およびコンピューティング サーバーを関連付けます。上位層は、ComputeClient を通じてコントラクトにアクセスします。計算ライブラリを統合する前に、ストレージ、コンパイル エラー、同期、機能クエリのセマンティクスを確立します。

ソース エントリ ポイント: CUDA エクスポート、デバイス タイプ、ランタイム実装、および ランタイム特性。

6. CUDA ストリームとイベントの相互運用

ruda_driver_cuda::interop::{command, StreamCommand, record_allocation} は RUDA カーネルと同じデバイスサービスおよび CUDA コンテキストを使用します。ストリームとイベントの ID は RUDA が管理する識別子であり、生の CUDA ハンドルではありません。stream 0 はデフォルトストリームです。

record_allocation(device, stream, handle) は、そのストリームに既に投入された処理が完了するまで割り当てを保持します。実行依存関係の代わりにはなりません。ストリーム作成数は streaming.max_streams に制限され、プールを使い切るとエラーになります。これらの API は任意の外部 CUDA ストリームやコンテキストを取り込みません。