AMD Radeon R9 Fury Xの性能をViennaCLで試す

みなさん、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と呼んでも差し支えないのではないかと個人的には思っています。

ただお値段もお値段なので、しばらくなかなか手に入らず・・・。
しかし、先日たまたま借りることができた!のでさっそく使ってみました。

設置状況

こんな感じで足元の計算機に設置しました。

Radeonで光る

分かりにくいですが、RADEONの文字が赤く光ってちょっとカッコイイです。

使用するのは、以前に第2回GPGPU勉強会で発表のあったViennaCLで共役勾配法を使った流体計算の一部での比較に使われたプログラムちょっと修正したものを使います(テスト用に反復回数などを減らしました)。
このプログラムで、なるべく実アプリケーションに近い形で、かつViennaCLというオープンソースのヘッダーのみの線形代数ライブラリを使用していて実装にあまり属人性をつけない(局所的に特定のアプリケーションに職人芸で最適化したりしない)ように比較をしてみます。なお、倍精度浮動小数点演算であり、演算性能とメモリ帯域幅の両方が求められる問題だろうと考えられます。

結果は以下の通りです。

処理時間
加速率

今回は、FuryXを含めて、今、社内で手に入るデバイスをいくつか集めて比較してみました。

GPU

  • AMD Radeon R9 Fury X, AMD APP SDK 3.0, Ubuntu 15.04
  • AMD Radeon 290X, AMD APP SDK 3.0, Ubuntu 14.04
  • NVIDIA Tesla K20c, CUDA7, Fedora21
  • NVIDIA GeForce GTX 680, CUDA7, Fedora21
CPU

  • Intel Core-i7 3770K, gcc 4.9.2, Ubuntu 15.04
  • Intel Core-i7 2600K, gcc 4.8.4, Ubuntu 14.04

各デバイスがそれぞれ別々の計算機にインストールされていて環境が揃えられていないので厳密な意味でのデバイス性能の比較はできていないのであくまで参考値と捉えてください。

結果をご覧のとおり、平均的には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が使えるようになっていたりと、これから色々と業務含めて使っていくのに楽しみなデバイスだなという印象でした。


なお、今回のように、弊社では自己研鑚や社内勉強会のために、割と自由に計算機を使うことのできる環境になっています(もちろん資源に余裕があれば、ですが)。
業務の合間の空いた時間に新しいデバイスで新しい計算を試したりするのが好きな方、ぜひ弊社で一緒に働いてみませんか?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です