このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。
みなさん、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が使えるようになっていたりと、これから色々と業務含めて使っていくのに楽しみなデバイスだなという印象でした。
なお、今回のように、弊社では自己研鑚や社内勉強会のために、割と自由に計算機を使うことのできる環境になっています(もちろん資源に余裕があれば、ですが)。
業務の合間の空いた時間に新しいデバイスで新しい計算を試したりするのが好きな方、ぜひ弊社で一緒に働いてみませんか?
keisuke.kimura in Livox Mid-360をROS1/ROS2で動かしてみた
Sorry for the delay in replying. I have done SLAM (FAST_LIO) with Livox MID360, but for various reasons I have not be...
Miya in ウエハースケールエンジン向けSimulated Annealingを複数タイルによる並列化で実装しました
作成されたプロファイラがとても良さそうです :) ぜひ詳細を書いていただきたいです!...
Deivaprakash in Livox Mid-360をROS1/ROS2で動かしてみた
Hey guys myself deiva from India currently i am working in this Livox MID360 and eager to knwo whether you have done the...
岩崎システム設計 岩崎 満 in Alveo U50で10G Ethernetを試してみる
仕事の都合で、検索を行い、御社サイトにたどりつきました。 内容は大変参考になりま...
Prabuddhi Wariyapperuma in Livox Mid-360をROS1/ROS2で動かしてみた
This issue was sorted....