LoginSignup
4
6

More than 1 year has passed since last update.

amdgpu 21.40 で RDNA2 で HIP(CUDA っぽいの)が動くようになりました(experimental)

Last updated at Posted at 2022-01-01

背景

AMD GPU で GPGPU(CUDA ぽいの)ができる ROCm がいつまで経っても RDNA/RDNA2 対応しておらんかった...

しかし, 最近 Cycles X が AMD HIP で RDNA2 で動かせるようになる(まずは Windows で)という記事があり, HIP 再訪することにしました.

https://code.blender.org/2021/11/next-level-support-for-amd-gpus/
https://code.blender.org/2021/04/cycles-x/

(ちなみに buggy OpenCL driver とあるのは AMD のことでしょうね :smiley: )

Linux では, 21.40 でついに対応し始めったっぽい?

admgpu 入れると rocm 関連のパッケージも入ります.

いままでは rocm 用(GPUGPU 用)と, OpenCL/OpenGL などのグラフィックスドライバの SW スタックは別でした.

21.40 から OpenCL あたりも rocr(ROC runtime) で動くようになります(ついでにいうと OpenCL も完全? OSS なスタックとなる).

ROC は Radeon Open Compute の略かしら?

upgrade

Linux では cuda repo とは異なり, amdgpu-install では(現時点では)アップグレードは対応していません.
amdgpu-uninstall してパッケージをアンインストールしておき, amdgpu-install の deb を再インストールで対応となります.

HIP とは

NVIDIA で言う CUDA みたいなのです(CUDA API 互換のライブラリとかを提供)
内部的には C/C++(LLVM に変換できるコンパイラがあれば rust なども) を GCN/RDNA ISA などで動くようにしていますので,
特に CUDA API にこだわらなければ, より汎用な C/C++ コードを GPU で動かせると思います.

いろいろ紆余曲折あったようですが, 最近では binary(fat binary)を comgr/rocr で動くように統一されてきたっぽい.

2020 年後半以降の HIP, HIP clang compiler について
https://qiita.com/syoyo/items/240a1b08cb72f1ea6fbe

最近ではやっと hipcc も apt で入る感じになってきました.

仕組み

AMD のサイトとかにまともな資料無いっぽいので推定ですが, こんな感じでしょうか...
(VEGA or later)

  HIP app   |  OpenCL app とか
            |
    |       |    |
    |/      |    |/
+-----------+-----------+
| hip.bc    |  oclc.bc  |    device library bitcode(`/opt/rocm/amdgcn/bitcode`)    
+-----------------------+  
| rocr/rocclr           |    (common) runtime
+-----------------------+
| amdgpu(former amdkfd) |    kernel driver
+-----------------------+

動かす.

amdgpu ドライバ(最近は apt meta package 形式)を入れているとします.

$ sudo apt install roc-dev

で hipcc など入れます.

あとはコンパイルするだけです!

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

info: running on device AMD Radeon RX 6800
info: allocate host mem (  7.63 MB)
info: allocate device mem (  7.63 MB)
info: copy Host2Device
info: launch 'vector_square' kernel
info: copy Device2Host
info: check result
PASSED!

Voila!

これで RDNA2 で Vulkan/OpenGL などでレイトレしたりレンダリングしたり, マイニング(OpenCL)したりしつつ, GPGPU(HIP)もできるようになります!

pytorch-rocm は...?

残念ながら最新 docker image でも gfx1003 が有効になっていないっぽく seg fault(HIP compile 失敗)しました.
ソースコードから gfx1003 有効にしてビルドすればいけるかもしれません.

しかし, Radeon VII で試したところ, 結局のところ pytorch-rocm は使い物にならないままのようですので(GPU のカーネルコンパイルが激遅 + GPU のほうが遅い),期待しないほうがいいでしょう.
(pytorch CUDA の API や書き方に合わせて無理やり動かしているので, 非効率)

HIP(C/C++) で, 自前で機械学習ライブラリ(MIOpen, ROCblas, ...)を叩いたほうがよさそうです!

HSA はどうなる?

不明. HIP に統一されていくのでしょうか...

RT core はどうなる?

ISA 自体はあるっぽいので, うまく叩けば使えるかもしれませんが, OptiX のように簡易に使える API は提供されていません.
とりあえずは Vulkan 経由になるでしょうか(HIP sample に Vulkan interop の例があります)

ただ, RDNA2 の HW raytracing(texture unit)の性能自体そんなに良いわけではないので, 無理して使っても性能でないでしょうから, RDNA3 など次期アーキテクチャに期待でしょうか.

Intel dGPU はどうなる?

Intel Xe ではどうなるでしょうか. Intel は OpenCL コンパイラをきちんとメンテしている感じがしますが... SYCL とかになるのかな?

4
6
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
4
6