LoginSignup
0
0

More than 3 years have passed since last update.

MLIR を Vulkan で動かすメモ(mlir-vulkan-runner)

Last updated at Posted at 2020-02-24

背景

MLIR を Vulkan で動かしたい

LLVM Adds MLIR-Vulkan-Runner To Run MLIR On Vulkan-Enabled GPUs
https://www.phoronix.com/scan.php?page=news_item&px=LLVM-MLIR-Vulkan-Runner

mlir-vulkan-runner が追加されたので, これを試してみます.

試す

を参考にして, 一式ビルドします.

git clone https://github.com/llvm/llvm-project.git
mkdir llvm-project/build
cd llvm-project/build
cmake -G Ninja ../llvm \
   -DLLVM_ENABLE_PROJECTS=mlir \
   -DLLVM_BUILD_EXAMPLES=ON \
   -DLLVM_TARGETS_TO_BUILD="X86;NVPTX;AMDGPU" \
   -DCMAKE_BUILD_TYPE=Release \
   -DLLVM_ENABLE_ASSERTIONS=ON \
  -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DLLVM_ENABLE_LLD=ON

Vulkan 実行だけなら, NVPTX, AMDGPU ターゲットは不要かもしれません

cmake に, -DMLIR_VULKAN_RUNNER_ENABLED=1 を追加しておきます.

ビルドには, vulkan ライブラリのインストールが必要かもしれません(Ubuntu なら apt で入る)

Ryzen9 3950X で, 4 分 45 秒くらいでした(clang, lld 利用)

ビルドできれば bin/mlir-vulkan-runner ができているはずです!

サンプルを動かしてみます.

$ ./bin/mlir-vulkan-runner ../mlir/test/mlir-vulkan-runner/addf.mlir  --shared-libs=lib/libvulkan-runtime-wrappers.so,lib/libmlir_runner_utils.so --entry-point-result=void
Emitting via RTDyldObjectLinkingLayer:
{ ("main", [Callable]), ("_mlir_main", [Callable]) }
Unranked Memref rank = 1 descriptor@ = 0x7ffe6d0ff900
Memref base@ = 0x32478d0 rank = 1 offset = 0 sizes = [8] strides = [1] data =
[3.3,  3.3,  3.3,  3.3,  3.3,  3.3,  3.3,  3.3]

Voala!

内部としては, LLVM が SPIR-V コード生成, mlir-vulkan-runner が Vulkan API いろいろ呼び出して, SPIR-V カーネルを実行, という感じになっています(IREE などは使っていない)

SwiftShader で動かす

サーバで動かしているなど, Vulkan 対応 GPU がないときは, SwiftShader で動かせます!

冬到来! SwiftShader を使い人類史上最速で Vulkan プログラミングをはじめよう!
https://qiita.com/syoyo/items/ef5518f8c3638e50a6b9

Windows でビルドする.

Windows で llvm-project のビルドは, llvm-tblgen の処理がとっっっても遅いです! ビルドに 1 時間くらい時間かかります(しかもなぜか並列実行してくれない)

VULKAN_SDK 環境変数で Vulkan の場所を設定することで, Vulkan あり(mlir-vulan-runner)でビルドまでできるのを確認しました.
現状 mlir-vulkan-runner の unit test で memory allocation error あたりを出して落ちます.
しばし待てば治りそうです.

Windows の場合, LunarG の Vulkan SDK をインストールするのが手っ取り早いでしょうか.
ただ, Windows では LunarG Vulkan SDK は, installer 形式(exe)しかありません.

CI でビルドしたいなどの場合, Header(Vulkan-Headers)/Lib(Vulan-Loaders)をマニュアルで指定したい(self-contained でビルドしたい)場合は

SwiftShader の Software Vulkan 実装で自前 Vulkan アプリを作る準備(Linux)
https://qiita.com/syoyo/items/17a74b6809ebf1577ce7

にある vulkan-minimal-compute swiftshader branch https://github.com/syoyo/vulkan_minimal_compute/tree/swiftshader を参照するとよいでしょう.

今後に期待...?

途中でプロジェクトキャンセルのリスクはありますが, うまく開発が継続されれば, MLIR Vulkan で, 学習まで Vulkan でできる日は近いかもしれません(AMDGPU では, ROCm 不要で動かすことができる)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0