このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。
みなさん、AMD Radeon R9 Fury Xをご存知ですか?
AMD Radeon R9 Fury X (Fiji)は、この6月に発売されたばかりのAMDの新しいGPUで、GDDR5ではなくHBMを搭載したことが最大の特徴です。
前世代のRadeon R9 290X(Hawaii)に比べ、ピーク演算性能・メモリ帯域幅ともに大きく向上しており(どちらも約1.5倍、詳しくはIT mediaの記事などを参照)、本稿執筆時点では世界最強のGPUと呼んでも差し支えないのではないかと個人的には思っています。
ただお値段もお値段なので、しばらくなかなか手に入らず・・・。
しかし、先日たまたま借りることができた!のでさっそく使ってみました。
使用するのは、以前に第2回GPGPU勉強会で発表のあったViennaCLで共役勾配法を使った流体計算の一部での比較に使われたプログラムをちょっと修正したものを使います(テスト用に反復回数などを減らしました)。
このプログラムで、なるべく実アプリケーションに近い形で、かつViennaCLというオープンソースのヘッダーのみの線形代数ライブラリを使用していて実装にあまり属人性をつけない(局所的に特定のアプリケーションに職人芸で最適化したりしない)ように比較をしてみます。なお、倍精度浮動小数点演算であり、演算性能とメモリ帯域幅の両方が求められる問題だろうと考えられます。
結果は以下の通りです。
今回は、FuryXを含めて、今、社内で手に入るデバイスをいくつか集めて比較してみました。
各デバイスがそれぞれ別々の計算機にインストールされていて環境が揃えられていないので厳密な意味でのデバイス性能の比較はできていないのであくまで参考値と捉えてください。
結果をご覧のとおり、平均的には290XよりFury Xの方が15-20[%]程度の速度向上が見られました。
ただ一方で、要素数(横軸)が大きくなるにつれて前世代の290X(Hawaii)との差が縮まっており、最後には(図ではちょっと見えませんが)ちょっとだけFuryXの方が遅くなってしまいました。
この先どうなるのかも試してみたかったのですが、残念ながらメモリ量が足りずに計測できませんでした(そもそも粒子法で1000万粒子までいくと大型計算機で計算する量なので、デバイス単体で比較してもあまり意味はなさそうです)。
なぜ差が縮まるのか、はっきりとした理由は分からないのですが、一般に要素数が多くなって未知数が多くなれば、その分だけ行列も大きくなるので、疎行列×ベクトル演算でキャッシュにヒットしづらくなっていきます。その辺りが関連しているのかもしれません。
また、TeslaやGeForceも試してみましたが、やはりNVIDIA系のGPUでOpenCLを実行するのはつらいものがあるなと改めて思いました。
一応、CPUに比べて6-7倍の速度が出ていますが、Radeon系に比べると2-4倍の差があります。
ViennaCLはCUDAで実行することもできるらしいのですが、元のプログラムでも未実装のようで、確かにすんなりとコンパイルできなかったので、もう少し色々試してみる必要があるようです。
少し不思議なのは、Radeon系だと、要素数(粒子数)が増えると、加速率(CPUでの処理時間/GPUでの処理時間)まで増えていくことです。
以前にFireProで別の計算をした時にも同じような傾向を見せていたので、AMD系のGPUは全体的にこういう傾向のようです。
CPUとGPUの理論性能比はハードウェアが変わらない限り一定のはずなので、TeslaやGeForceのように一定の加速率を見せるならなんとなく納得できるのですが・・・。
こちらも明確に説明できる理由は思いつきませんでした。最大の500万粒子であたりではGPU内部で並列演算できる数を間違いなく超えているはずなので、そういった場合の取り回しがRadeonの方がうまいのかもしれません。
もしくはCUDAにするとTeslaやGTXでも同じように加速率も増えていくのかもしれません。
ということで、ViennaCLで倍精度演算をさせてみた限りだと、実用の範囲内ではFury Xは前世代に比べて確かに速度向上が見られました(特に要素数が極端に多くない時)。
Fury Xの魅力は性能向上だけではなく、例えばVulkanが使えるようになっていたりと、これから色々と業務含めて使っていくのに楽しみなデバイスだなという印象でした。
なお、今回のように、弊社では自己研鑚や社内勉強会のために、割と自由に計算機を使うことのできる環境になっています(もちろん資源に余裕があれば、ですが)。
業務の合間の空いた時間に新しいデバイスで新しい計算を試したりするのが好きな方、ぜひ弊社で一緒に働いてみませんか?
コンピュータビジョンセミナーvol.2 開催のお知らせ - ニュース一覧 - 株式会社フィックスターズ in Realizing Self-Driving Cars with General-Purpose Processors 日本語版
[…] バージョンアップに伴い、オンラインセミナーを開催します。 本セミナーでは、...
【Docker】NVIDIA SDK Managerでエラー無く環境構築する【Jetson】 | マサキノート in NVIDIA SDK Manager on Dockerで快適なJetsonライフ
[…] 参考:https://proc-cpuinfo.fixstars.com/2019/06/nvidia-sdk-manager-on-docker/ […]...
Windowsカーネルドライバを自作してWinDbgで解析してみる① - かえるのほんだな in Windowsデバイスドライバの基本動作を確認する (1)
[…] 参考:Windowsデバイスドライバの基本動作を確認する (1) - Fixstars Tech Blog /proc/cpuinfo ...
2021年版G検定チートシート | エビワークス in ニューラルネットの共通フォーマット対決! NNEF vs ONNX
[…] ONNX(オニキス):Open Neural Network Exchange formatフレームワーク間のモデル変換ツー...
YOSHIFUJI Naoki in CUDAデバイスメモリもスマートポインタで管理したい
ありがとうございます。別に型にこだわる必要がないので、ユニバーサル参照を受けるよ...