追記: 2021/11 月に動きがありました. apt hip-clang で入ったりと便利になっています.
amdgpu 21.40 で RDNA2 で HIP(CUDA っぽいの)が動くようになりました(experimental)
https://qiita.com/syoyo/items/5e6f4cc056a94060329e
を参照ください.
=====
HIP clang は, 今後の(?) AMD GPU 向けコンパイラです.
何故か apt で prebuilt package がありません(ROCM-3.8 時点)
ビルド手順をみてわかるように, HIP 固有のビルドオプションは無くて(AMDGPU backend を有効にするだけ. これは clang/llvm ビルドデフォルトでは on), HIP 対応のコンパイラ機能はすでに clang/llvm のソースコードにありますので, 実のところ既存の clang++ でも使えます(version 10 くらいからを使うとよさそう).
clang++ -x hip
のようにして使います.
ただ, 実際は nvcc のようにいろいろパスやリンクの設定などをする必要があるため, 通常は hipcc フロントエンド(これは apt package rocm-dev
あたりで入る)を使ってコンパイルします.
hipcc フロントエンドは, lld, compiler-rt や clang-offload-bundler(clang tools)などを利用しているため, それらのパッケージもインストールしておく必要があります
(apt の場合, clang-tools など)
ちなみに, CUDA も同様にコンパイラの部分は clang へ移行していて, CUDA 対応のコードは clang/llvm のソースツリーに入っています(.h
や .lib
などは CUDA SDK にあるのを使う必要がある. また nvcc 自体はクローズドソースっぽい)
HIP
HIP がなんの略かは不明です. 検索性が悪くてつらいです.
最近(2020/10)ですと, runtime 環境は ROCclr https://github.com/ROCm-Developer-Tools/ROCclr に移行しています.
hcc は deprecated になって ROCm パッケージから外れたようで, HIP のビルド手順そのままではビルドできない(runtime を ROCclr の VDI にする必要がある)
VDI(Virtual Device Interface)は, fat binary でそれぞれのアーキテクチャのバイナリを一つにまとめて, 実行時に対応するデバイスのバイナリを使うっぽいようです
(いままで(hcc runtime)は gfx アーキテクチャを指定してコンパイルなど必要だった, はず)
ROCclr ソースコードを見る限りでは Navi, RDNA2, CDNA(Arcturus) 対応があるようですので, ROCm-3.10 あたりで Navi/RDNA2 正式対応があるかもしれません.
(ROCM-3.8 の prebuilt だと, NAVI(RX5700)だと VDI が NAVI 対応していないようで unsupported エラーとなり HIP 環境は動かない)
ついでに ROCclr は Windows の対応もしているようです(実際にビルドできるかは不明だが, コードはいくらかある).
そのうち ROCm 環境も Windows で動くかもしれません.
comgr
最近 amdgpu-pro ドライバなどでも見かけるようになりました.
Code object manager の略です. fat binary 管理用でしょうか? ROCclr が依存しています.
rocm-dev で prebuilt が入りますが, Navi 対応など最新が使いたければソースからビルドでしょうか.
ビルド手順メモ
実際にビルドは確認していません.
- comgr のビルド
- device lib のビルド
- llvm/clang コンパイラ(HIP clang としても使えるはず)のビルドも含む
- ROCclr のビルド
- HIP のビルド
でしょうか. 面倒ですね.