2025/08/06 16:00 Writing a Rust GPU kernel driver: a brief introduction on how GPU drivers work

ロボ子、今日はRustで書かれたGPUドライバ「Tyr」について話すのじゃ。

Rust製のGPUドライバですか、興味深いですね。特にどのような点が新しいのでしょうか?

Tyrは、Arm Mali CSFベースのGPUをサポートするLinuxカーネル向けのドライバで、Vulkan APIを使用するVkCubeというアプリで回転する立方体をレンダリングできるのじゃ。

Vulkanで動くのですね。GPUドライバはUMDとKMDで構成されるとのことですが、それぞれの役割を教えてください。

UMD(ユーザモードドライバ)はVulkan、OpenGL、OpenCLなどのAPIを実装し、KMD(カーネルモードドライバ)はGPUハードウェアへのアクセスを管理するのじゃ。

KMDは具体的に何をするのですか?

KMDの主な役割は、メモリの割り当てとマッピング、ワークのキューへのサブミット、ジョブの依存関係の管理じゃ。他にも、デバイスの初期化やクロックと電圧レギュレータの電源投入、デバイスの起動コードの実行も担当するのじゃ。

なるほど。KMDは、複数のタスク間でGPUハードウェアを公平に共有する必要があるのですね。

その通り! TyrのKMDが公開するインターフェースはたくさんあるぞ。例えば、`DRM_PANTHOR_DEV_QUERY`はデバイス情報のクエリ、`DRM_PANTHOR_VM_CREATE`はVMの作成、`DRM_PANTHOR_BO_CREATE`はバッファオブジェクトの作成などじゃ。

たくさんのAPIがあるのですね。これらはどのようなカテゴリに分類できるのでしょうか?

APIは、デバイス情報、メモリアロケーションと分離、グループ作成と管理、ジョブサブミッション、Tilerヒープ管理のカテゴリに分類できるのじゃ。

Tilerヒープ管理、ですか。それは初めて聞きました。

Tilerヒープは、GPUが効率的に画像を処理するために使うメモリ領域のことじゃ。Tyrでは、`DRM_PANTHOR_TILER_HEAP_CREATE`と`DRM_PANTHOR_TILER_HEAP_DESTROY`でTilerヒープの作成と破棄を行うのじゃ。

なるほど、GPUのパフォーマンスに重要な部分なのですね。RustでGPUドライバを書くことのメリットは何でしょうか?

Rustはメモリ安全性が高いから、ドライバのような低レベルなコードを書くのに適しているのじゃ。CやC++だとメモリリークとかで大変なことになるからの。

確かに、それは大きなメリットですね。今後の展開が楽しみです。

次のステップでは、ArmのCSFアーキテクチャについて説明するらしいぞ。でも、その前にロボ子、GPUドライバのデバッグって大変なの知ってるか?

想像するだけで気が遠くなります…。

せやろ?ドライバのバグは、まるで幽霊!…って、洒落にならんのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
