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

ということで次はSandraである。RTX 2080ではOpenCLが使えない(実際SandraではOpenCLデバイスとして認識されなかった)代わりにCUDAを利用しての結果をまとめている。

まずグラフ47とグラフ48がGPGPU Processing、要するにマンデルブロ図形の描画である。サイズとAPIによって結果が激しく変わるが、例えばSingle FloatのOpenCL/CUDAでRadeon VIIとRTX 2080が大体並ぶ、という辺りが両者の生の演算器の性能を示している気もする。

ただHalf-Float OpenCL/CUDAを例外にすると(なぜかこれだけRadeon VIIの性能がかんばしくないのがちょっと理解に苦しむ)だいたいRadeon VIIが最高速で、RTX 2080はちょっと変わった型とかAPIになると性能が落ちる。D3D11のFloatとかですらかんばしくないのは、RTX 2080の最適化というか、ドライバの最適化? があまり進んでない気がする。

Quad-Float(グラフ48)のみ結果の桁が違うので分離したが、Radeon VIIの性能が猛烈に高いのは、各CU(Compute Unit)内部のデータの扱い方が変わり、ハードウェアで直接Quad Floatを扱えるようになったのかもしれない。Vega 64比で3倍の性能、というのはほかに理由が考えにくい。

グラフ49~51がGPU Cryptograpyの結果である。Encyption(グラフ49)とDecryption(グラフ50)はだいたい同じ傾向だ。Vega 64とRadeon VIIはセオリー通りの性能で、異様にRTX 2080が落ち込む結果になっている。正直、もう少し性能が上がっても良い気がするのだが。

逆にHasingは、SHA1やSHA-256だとRadeon VIIが最高速であるが、SHA-512でRTX 2080が逆転する。これはいままでも見られた傾向であり、Radeon VIIでもここには手が入っていないようだ。

グラフ52~54はGPU Financial Analysisの結果である。結果から言えばすべてのテストでRadeon VIIが最速ではあるのだが、例えばBinomial(グラフ53)だとVega 64と大きな性能差がないのに、Black-Scholes(グラフ52)やMonte Carlo(グラフ54)だと数倍の性能になる、という具合に以外にバラつきが大きい。

恐らくメモリ帯域が効果的に作用しているものと思われる。こうした用途ではRTX 2080もあまり性能が発揮できずにいるのも確認できる。

ではそのメモリ帯域は? ということで、まずはInternal Memory Bandwidth(グラフ55)を見ると、OpenCL/CUDAとD3D11の両方でRadeon VIIは660GB/sec近い帯域を確保している。

理論性能が1TB/secだから、66%程度の効率ということで悪くはない。理解できないのはD3D11におけるRTX 2080の結果で、そもそもメモリ帯域が448GB/sec(14Gbps GDDR6 256bit)なのに、なんで548GB/secの結果が出ているかだが、残念ながらSandraはこれ以上詳細な結果を出してくれていないので判断が付かない(キャッシュの帯域も加味されているのかもしれない)。

一方Interface Bandwidth(要するにPCI Express経由でのメモリアクセス)の結果がグラフ56だ。OpenCL経由でのHost→Deviceが遅いというAMD系のクセは相変わらずであるが、それ以外については多少のばらつきはあるものの、おおむね同等レベルになっている。

さて、ここからはメモリのLatencyである。グラフ57~59はOpenCL/CUDAによるGlobal Data Memoryに対するアクセスの結果だ。とにかくRTX 2080が低い一方で、Radeon VIIはVega 64に比べると多少改善しているものの、全般的にLatencyが多めである。

これがコアのアーキテクチャによるものか、それともHBM2のMemory I/FのLatencyがGDDR6よりも遅くなるという特性があるのかまでは判断できないが、例えばSequential(グラフ57)で64KBあたりまでを比較しても明らかにRadeon VIIやVegaのLatencyが大きいので、コアのアーキテクチャの問題かもしれない。

Constant Data Memory(グラフ60~62)も傾向は同じで、それこそ2KB Rangeですら数十nsのLatencyがあるのは、いかにマルチスレッドでLatencyを遮蔽しやすいとは言え、ちょっと凄い気がする。ちなみにRTX 2080の結果が64KBどまりなのは、Constant Data Memoryとして利用できるのが最大64KBまでになっているためである。

Shared Data Memory(グラフ63)とPrivate Data Memory(グラフ64)はRangeが小さいので、グラフをそれぞれひとまとめにしてみた。Shared Data MemoryではRTX 2080がアクセスパターンに関わらず一定(9.4ns)なのは、恐らく完全にキャッシングされているためだ。逆にVega 64/Radeon VIIはHBMの先にあるように思われる。

Vega 64/Radeon VIIについては、Private Data Memoryも同じ。RTX 2080では32KBあたりまではキャッシュが有効だが、その後はキャッシュミスが発生しているようだ。とはいえ、全般的にRTX 2080に比べてVega 64/Radeon VIIのLatencyは大きい、ということになる。

これがひっくり返るのはD3D11のケースである。まずGlobal Data Memory(グラフ65~67)を見ると、RTX 2080に関してはCUDAの場合と同じ結果なのに対し、Vega 64/Radeon VIIでは10ns未満という非常に少ないLatencyでアクセス可能になっている(~16KB Range)。

実際、Full Random(グラフ67)におけるRadeon VIIの4MB以降のみ、RTX 2080を超えるLatencyになっているが、それ以外はすべてRTX 2080未満のLatencyでアクセスできているのは、OpenCLの際のLatencyを考えるとちょっと理解しにくい。

Constant Data Memory(グラフ68)もそうで、明らかにきれいにキャッシュが効いており、しかもVega 64/Radeon VIIのLatencyは低めである。これがShaded Data Memory(グラフ69)になると多少Vega 64/Radeon VIIのLatencyが増えるが、値が一定なあたり、やはりきちんとキャッシュが効いているとしか考えられない。Private Data Memory(グラフ70)も同じである。

最後にTexture MemoryのLatency(グラフ71~73)も示す。実はこのTexture Memory、OpenCL/CUDAでもテストは走ったのだが、Vega 64/Radeon VIIでは正しく測定できない(Latencyが429496720.8ns、とかいうのは要するに測定に失敗したと思われる)ために結果は省かせていただいた。

その結果だが、アクセスパターンとRangeに関わらずほぼ一定となった。ただLatencyそのものはRTX 2080の方がかなり少ない。