Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RustとGPU

tata
September 06, 2022

 RustとGPU

tata

September 06, 2022
Tweet

Other Decks in Programming

Transcript

  1. RustとGPU たた @8picoz

  2. Rustの強みについて 記法がシンプルかつ新しい (ミュータブル/イミュータブルの扱い方など ) Rustはunsafeを使用しない限り未定義動作が基本的に存在しない (Well-defined) 実行時ではなくできるだけコンパイル時にエラーを発見しようとする思想 並列の安全性などを型レベルで保証してくれる (レースコンディションなど)

  3. 便利ツール rust-bindgen: C/C++のライブラリへのバインディングを自動で作成してくれるツール C/C++の型情報が記述されたヘッダを渡してあげるとシンボルなどが対応した Rustのファイルが出力 される cc: RustのCargoによるビルドにC/C++のコードを混ぜてビルドすることができるツール

  4. 便利ツール miri: MIRという中間表現の言語があり、 Rustはこの段階で借用検査や最適化等を行う miriはMIRのインタプリタとなっていて unsafeなコードが未定義動作を引き起こさないかチェックするこ とができる(すべての未定義動作を発見できるわけではない ) CIなどに入れておくと良い 例として範囲外メモリアクセスや解放後の使用、メモリリークなど

    miriが見つけられるバグ一覧 ここに未定義動作チェックも入れる →
  5. DirectX winapi-rs: 非公式による第三者のプロジェクトで最近はあまり開発が行われていない (?) DXRへのサポートもIssueが途中で放置されている状態だった windows-rs: Microsoftの公式が提供してくれている

  6. windows-rs winapi-rsは手動でAPIを再定義して作成するものだった。 対してこちらはwin32metadataというMicrosoft公式が提供しているWindows APIのメタデータから 自動生成される。 DXRも自分が確認する限りは必要な型が定義されていた

  7. Vulkan Vulkano: 高機能なラッパーライブラリ Vulkanのオブジェクトのライフタイムなどもライブラリ側が管理してくれる Ash: とても薄いラッパー ほとんどバインディングを素のまま提供するような形で大体 unsafe どちらもVKRに対応している

  8. Ash Vulkan Headersから自動で関連ファイルを生成する機構を持っているので更新も早そう 薄いとは言っても、Vulkan.hppのようにBuilder patternによる構造体の構築などができるような機能 は存在するので扱いづらいということではない

  9. その他 wgpu rust-cuda gpu-allocator

  10. wgpu WebGPUのRust実装 WebAssembly上で動かすことができたり、 WinやLinuxなどのネイティブ環境(D3D12やVulkanをラッ プするような形)でも動かすことができる Firefoxのレンダリングエンジンの GeckoにWebGPU実装として組み込まれている C++向けのFFIライブラリも公開されている (wgpu-native) シェーダーはWGSL,

    SPIR-V に対応
  11. wgpu https://github.com/gfx-rs/wgpu/blob/master/etc/big-picture.png

  12. rust-cuda CUDAの諸々をRustでサポートしたもの kernelなどもRustでかける exampleにoptixを使ったパストレーサーもあります

  13. gpu-allocator メモリ(バッファ確保)を周りをよしなに色々やってくれるもの 自分でバッファを扱うための Utilityやらを書かなくて済む Windows-rsやwinapi-rsとの型変換用のヘルパーライブラリなども一緒に提供されていて Vulkanでも Direct3D 12でも使えるような形になっている

  14. rust-gpu EmbarkStudiosが開発しているライブラリ/ツール/コンパイラバックエンド RustをそのままSPIR-Vにコンパイルしてシェーダーとして使用することができる https://github.com/EmbarkStudios/rust-gpu

  15. rust-gpu SPIR-V Cranelift相当のもの https://blog.rust-lang.org/2016/04/19/MIR.html

  16. rust-gpuのよいところ 外部ライブラリが使用できる | 外部にライブラリを公開することができる (既存の公開されたライブラリでも完全に静的リンクだけで解決できるものなら含められる ) ベアメタル環境でやっているような感じ (?)

  17. rust-gpuのよいところ 型定義が使い回せる マテリアルシステムを作るに当たって設計がしやすい ホスト側からマテリアルの情報諸々をおくるときにそのままシェーダーの型情報から引っ張ってこれる シェーダー内で関数定義 → ホスト側で呼び出し

  18. rust-gpu まだまだ機能の実装途中 … https://github.com/EmbarkStudios/rust-gpu/issues/78

  19. 興味がある方はぜひ一緒にRustでGPUを!✨