Sandra 2012 Engineer Edition(グラフ13~23)

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

ベンチマークの最後はこちら。SandraのGPU関係ベンチマークを行った結果だが、ちょっと面白いことになった。

まずグラフ13・14は、GP(GPU/CPU/APU Benchmark)の結果である。これはCPU/GPU/両方を使い、マンデンブロ図形を計算・描画するというものだが、今回はCPUあるいはCPU+GPUの結果は省き、CPUのみで行った結果のみまとめた。さて、グラフ13はFloatの結果である。OpenCLで案外にRadeon HD 6950のスコアが振るわない(Radeon HD 6850と大差ない)のが気になるが、せいぜいがその程度だ。ところが、Doubleになるとこれが一転する。とにかく、Radeon HD 7700/7800シリーズのスコアが振るわないのだ。これはOpenCL/DirectComputeの両方で同じ傾向になっており、何かしら違いがあることがわかる。

ではCryptographyの結果は? ということでOpenCLをグラフ15、DirectComputeをグラフ16に示すが、こちらはGCNの本領発揮とでも言うべきか、Radeon HD 7770ですらRadeon HD 6950を上回るスコアをたたき出している。ただRadeon HD 7870のOpenCLのSHA256 Hasingだけはなぜか異様に低いスコアになっているが、これは気になってやり直しても同じ結果だったので、OpenCLドライバの問題なのかもしれない(DirectComputeの結果は真っ当である)。これだけ見ていると、先のグラフ13の結果は説明しにくい。

もう一つ面白いのが次のGPU Memory Bandwidthである。グラフ17がOpenCL、グラフ18がDirectComputeなのだが、どちらも変である。まずOpenCLは、Internal BandwidthのスコアがRadeon HD 7950のみ他と一桁違うという、ちょっと考えにくい事になっている。ハードウェア的に見れば唯一Radeon HD 7950のみ384bit幅のメモリであるが、それで10倍もスコアが違うことは考えにくい。ということで、OpenCLの内部のドライバの問題が何かしらあると思われる。一方、DirectComputeの方はというと、Internal Memoryの方はほぼスペック通りの数字が出ているが、System to Deviceの値が妙にばらついているし、全体的にOpenCLよりも数字が低いということになっている。表1に示したとおり、Radeon HD 7800シリーズはまだベータ版の専用ドライバだが、Radeon HD 7770はCatalyst 12.2を使ってだから、ドライバそのものに問題があるとすればRadeon HD 7950ももう少し低くてもよさそうなものだ。

ではGPGPUではなく、DirectX/OpenGL Deviceとしてはどうか? ということでグラフ19・20がVideo Renderingである。こちらはDirect 3D/OpenGLを使い、やはりマンデンブロ図形の計算と表示であるが、Floatの場合(グラフ19)はごく真っ当な傾向なのにDoubleの場合(グラフ20)はグラフ14とよく似た傾向になった。特にDirectX 11とOpenGLでこれが顕著である。こうなってくると、単にドライバの不出来という話ではなく、明確に意志というか目的があってこうなっている、と考えたほうが良いだろう。

グラフ21~23はDirectXを使ってのVideo Memory Bandwidthの結果だが、恐らくDirectComputeと同じドライバを使っているためか、どのケースでもグラフ18と極めて似た結果に終わっている。

残念ながらGPGPU的なテストがSandraしかないので、これに関する筆者の暫定的な考察をここで示しておくと、恐らくGCNと呼ばれるものには2種類あり、Tahiti(Radeon HD 7900シリーズ)とPitcairn/Cape Verde(Radeon HD 7800/7700シリーズ)では基本的な構成が異なっていると思われる。その最大の違いはDoubleの対応である。TahitiはGPGPU的に利用されるケースが非常に多くなるので、32bitのFloatのみならず64bitのDoubleでもそれなりの性能が出せるようにハードウェア的な工夫がなされていると思われる。今回の場合で言うと、Radeon HD 7950におけるGPU Processingの性能比はFloat:Doubleが概ね4:1~5:1となっており、これはフルに演算器を動かした場合の性能にほぼ近い。この話はRadeon HD 6950にも繋がる話である。対してPitcairn/Cape Verdeは、勿論GPGPU的に使われる場合もあるだろうが、主な用途は3Dグラフィックであり、メインは32bit演算であるので、64bit演算は遅くても良しと割り切り、その分ハードウェア的に色々節約したのではないかと思われる。これがFloat:Doubleの性能比が10:1~20:1にもなる最大の理由であろう。

これによるメリットは、ダイサイズの節約や消費電力の低さである。GPGPU的に使われる可能性が少ない用途向けに、フルにGPGPUの機能を入れても無駄なだけ、という割り切りがある可能性がある。

OpenGLの場合のInternal Memoryの遅さも、勿論ドライバの不具合の可能性もあるが、実はこのあたりの割り切りに起因している可能性も否定できない。このあたり。もう少し断定的な事を言うにはあまりにテストが少なすぎるので、一応この可能性を指摘しておく程度に今回は留めておきたいとおもう。