Sandra 2015(グラフ75~103)

SiSoftware
http://www.sisoftware.co.uk/

もう1つGPGPU系ベンチマークとして、Sandra 2015をお届けする。ただ最初にお断りしておくと、こちらまだ何かしらベンチマークの方に問題があるようで、いくつかのシナリオにおいて、特定のカードで一切データが取れない(R9 290Xの一部とTITAN Blackの一部)という問題があった。

またTITAN/TITAN Blackは本来ならプロパティでDouble Precisionを有効にすることが可能なのだが、これをやるとベンチマークがハングアップすることが頻発したため、KeplerベースのHardware Double Precision Supportは無効化している。恐らくSandra 2015がSP1かなにかにバージョンアップすれば解決すると思うのだが、今回はご了承いただきたい。

さて、テストそのものはGPGPUおよびVideo系に絞って行った。まずグラフ75~77が、Single/Double/Quad Floatを使ってのマンデルブロ図形の描画である。Double FloatはともかくQuad Float(4倍精度浮動小数点)はあまり一般的ではない。ただこれはサポートしているハードウェアが少ないというだけで、一応IEEE 754には含まれているフォーマットではある。

まずSingle-Float(グラフ75)は、APIによって多少の差はあるが、TITAN XはR9 290Xを上回る性能を出しており、単体GPUとしては最高速と言って良いだろう。もっともOpenCL環境ではR9 295X2がこれをぶっちぎっている訳だが、これは2つ分のGPUの性能だから除外していいだろう。

ではDoubleは? というとこれはハードウェアでDoubleのサポートをしているR9 290XやR9 295X2が圧倒的であり、TITAN Xもあまりかんばしくない。むしろTITAN Blackの方が性能が高いほうだ。

Quad-Floatも同様の傾向で、どうもベンチマーク内部のロジックはFloat×4とDouble×2の両方を搭載、Doubleが使えればDoubleで実行するらしく、見ての通りの性能差である。

余談ながら、ここではTITANとTITAN Blackの間に明確な性能差があるのも分かる。SMX数の比にほぼ近く、アプリケーションによってはきちんと性能差が出ることが確認できたとも言える。

次がGPUを使った暗号化関連(グラフ78~84)。AES128の暗号化(グラフ78)では、Keplerと比べてMaxwellが非常に伸びているのも面白いが、TITAN XもR9 290Xを1割上回る程度、というのは意外に性能差が無いように感じられる。ちなみになぜかComputeShaderはこれが実行できなかった。

AES256の暗号化(グラフ79)も傾向は同じである。案外にTITAN Blackの性能が伸びない(といってもTITANよりはずっと高速)なのも不思議である。

グラフ80はAES128の復号化で、傾向はグラフ78とほぼ同じ。AES256の復号化(グラフ81)も、グラフ79とほぼ同じようだ。グラフ79もそうだが、RADEON系のみCompute Shaderが動作している。ただその結果がR9 290Xでも異様に高いのがちょっと不思議ではあるが。

グラフ82がSHA-1、グラフ83がSHA2-256、グラフ84がSHA2-512のHasingである。SHA1ではRADEON系が圧倒的に高速なのもさることながら、Maxwell2製品が落ち込み、しかもTITAN BlackよりもTITANが伸びているというのはどう理解したものか。

ただSHA2-256ではこうしたおかしなことはなく、特にTITAN Xの性能の高さが引き立っている。R9 295X2とほぼ同等、というのは立派な成績だと思う。

SHA2-512では扱うデータサイズが大きいためか、全体的にスコアが低めになり、またRADEON系が相対的に性能を伸ばしているのが面白い。またCompute Shaderでは異様に性能が伸びるのもどうした理由なのか。このあたりは、ベンチマーク側にまだちょっと問題が多そうな気がする。

グラフ85~90はFinancial系。これはBlack-Scholes/Binomial/Monte Carloの3つの方法で、EUROのOpetion価格を推定するシミュレーションをFloat/Doubleの両方で行ったものである。

相対的に負荷の軽いBlack-Scholes方程式のFloat(グラフ85)ではTITAN Xの性能の伸びが異様に引き立っており、R9 295X2すら上回っている。謎なのは、これに関してはDual GPUを正しく使えていないようなことだ。またGTX 980がCompute Shaderではありえないほど低いスコアなのも謎である。

Double(グラフ86)だともう少しまし結果に落ち着いているが、なにしろR9 290Xの結果が出てこないので、R9 295X2がDual GPUでこの結果なのか、単独動作なのかが判断しにくい。ただDoubleだとMaxwell系が全体に性能が下がるのはもう仕方ないのだろう。

Binomial Float(グラフ87)もまた荒れてる感じではあるが、FloatだとMaxwell系の性能の伸びはすばらしく、またもやTITAN Xがトップの性能である。これがDouble(グラフ88)になるとがくんと落ちるのも同じだ。

最後のMonte Carlo法はなにしろ古いアルゴリズム(酔歩法、とかいう日本語だった記憶がある)で効率は悪いが、それを力技でなんとかしました、という感じで相変わらずTITAN Xが最高速である。Compute ShaderでR9 290Xと並んでいるのも特徴的である。

ただこれがDouble(グラフ90)になるとがくんと性能が下がるのも同じく。なんというか、個々の結果にはいまいち信用が置けないのだが、全体としての傾向はおおむねつかめる気がする。

グラフ91~96がScientific Analysisで、GEMM/FFT/N-BodyをそれぞれFloat/Doubleで実行するものだ。いまのGPGPUではこれが一番使われている用途ではないかという気がする。ちなみになぜかTITAN Blackはこれが全滅している。

まずグラフ91がSGEMM(Single-presicion GEMM)。TITAN Xはずいぶん健闘しており、TITAN比で倍近いスループットで、単体CPUとしては申し分なく高速である。R9 295X2はまぁDual GPUだからこんなもんだろう。

ただDGEMM(Double-precision GEMM)(グラフ92)だと評価が一転するのは同様だ。またTITANがTITAN Xを上回るスコアを出しているのも同じである。

グラフ93はFloatのFFTだが、ここではTITAN Xは健闘するもののR9 290Xとなんとか肩を並べる程度だ。ただし、珍しくDouble(グラフ94)では、TITAN XがTITANを上回る性能を出している。FFTの場合はむしろバタフライ演算に起因するデータの並べ替えが性能の肝であって、純粋な演算性能だけでは決まらないためかもしれない。

最後がN-BODY(多体問題)のシミュレーションである。Float(グラフ95)はTITAN Xがなかなか良い成績を残しており、TITAN比で2倍の性能なのに対し、Double(グラフ96)だとTITANの半分近くまで性能が落ちてしまう。これはもうMaxwellアーキテクチャの根本的な問題ということだろう。R9 290Xと比較すると、Floatでは上回っているのに、Doubleでは3分の1近くまで性能が落ちてしまうのは致し方ないところか。

演算性能はこのあたりにして、次はメモリ関連帯域。グラフ97~99はGPGPUからアクセスするメモリ帯域の測定である。グラフ97がInternal Memoryで、これはオンボードのGDDR5メモリのアクセス帯域である(オンチップのキャッシュ帯域測定のベンチマークは別にあるのだが、これもまたまともに動かなかったので今回はパスした)。

おおむねメモリ帯域がそのまま出ている感じである。ただ、TITANの場合は公称336.5GB/secに対して240GB/sec程度だから効率は71%強だが、R9 290Xは公称320GB/secに対して210GB/sec程度だから効率は66%弱で、これに関してはTITAN Xは優秀と評して良いかと思う。

グラフ98はSystem to Device(Host→GPU)、グラフ99はDevice to Sysem(GPU→Host)の転送で、要はPCI Expressの利用効率である。NVIDIA系はどちらの方向も11.5GB/sec程度で、PCIe Gen3 x16の16GB/secの理論帯域に対してこれも72%弱の効率である。

暴れているのはRADEON系で、特にDevice to Systemでは理論帯域をぶっちぎっているのは、多分正しく測定ができていないためと思われる。なのでR9 295X2の結果は無視していただいてR9 290Xの結果だけ見ていただくと、特にDevice→Systemが遅いのはもうRADEON系の持病である。取りあえずここでは驚くような結果は無い感じだ。

次はGPUではなくDirectX/OpenGL Deviceとしてのハンドリングである。グラフ100~102はDirectX 10/DirectX 11/OpenGLのデバイスとして、グラフ75~77と同じ事をやらせた結果である。

まずグラフ100がSingle-Floatの結果で、APIによって多少の差はあるがTITAN XはNVIDIA系では最速で、R9 295X2と比較しても見劣りしない。

ではDouble-Float(グラフ101)は? というと、ごらんの様にまた大差がついている。ちなみにDirectX 10でR9 290XがGTX 980より低いのは、DirectX 10ではDoubleがEmulation扱いになるためだ。なのでここではRADEON系もDoubleの演算器は利用していない。R9 295X2が飛びぬけているのはDual GPUの効果である。

これがQuad-Float(グラフ102)になると、どの製品もEmulationベースになるが、先のグラフ77同様に倍精度をハードウェアサポートしているRADEON系が有利という傾向だ。TITAN XがTITAN Blackにやや負けているあたりも、むしろよくここまで健闘したという気がする。

最後がDirectX Deviceとしてのメモリ帯域(OpenGLでのテストはうまく動かなかった)である。グラフ103がInternal Memoryで、これはグラフ97のDirectX版である。結果を見ると、TITAN Xではさらに効率が上がっている(72.5%)が、R9 290Xはこれよりもっと高い(78.9%)値であり、いい勝負という気がする。

System to Device(グラフ104)やDevice to System(グラフ105)はおおむねグラフ98や99と同じ結果(R9 295X2を除く)となったと思う。

Sandraでのまとめ

Sandraはテスト項目が多いので、ここで簡単にSandraの結果についての結論と考察を述べれば、TITAN Xは単精度に関して言えば非常に強力なGPGPUとして稼働する事は間違いない。ものによってはR9 295X2を上回ることもあることほどだ。ただ、倍精度になると途端にガクンと性能が落ちるのはMaxwellのアーキテクチャに起因するもので、これはGTX 780やGTX 780 Tiなどと変わらない。

またテストによっては単精度でも性能が出ないこともあるなど、いろいろと制約もある。強力ではあるが、使いどころは限られるという感じだろう。もっとも汎用のGPGPUとして使うのであればTeslaを選ぶべきであり、TITAN XはGPGPUはあくまで特定用途(例えばcuDNN)向けということなのかもしれないが。