SSE128の搭載

ちょっと写真が元に戻るが、Athlon 64 X2までのSSEユニットとPhenomのSSEユニットの性能差がPhoto03に示されている。同時処理できる命令数も倍増し、また細かく見るとLatencyも削減されている。これについてまずはちょっと性能を見てみたい。

グラフ51

まずグラフ51は定番のSandra VIIである。ここではSSE系を使う、Whetstone iSSE3、MUlti-Media Int x4 aEMMX/aSSE4、Multi-Media Float x4 iSSE2の3つの結果をまとめてみた。ところでこのテスト、完全にMulti-Thread化されているので、Dual CoreのAthlon 64 X2ではどうやっても性能が半分以下になる。そこで比較のために、Athlon 64 X2の結果を単純に2倍にした「(なんちゃって)Athlon 64 X4」もグラフに加えてみた。

結果を見ると、どうしてもMulti-Media Int x4の成績に行ってしまうが、これはSandraの問題。Core 2 QuadはSSE3 Moduleで、Athlon 64 X2やPhenomではSSE Moduleでテストを行うためで、これはイーブンな条件とは言えない。そこでこの数字を除くと、WhetstoneやMulti-Media Floatではなかなかいい勝負と言える。特にWhetstoneでは、動作周波数の差(2.66GHz vs 2.6GHz)を考慮すると、実質同等と言ってよい。またPhenomと(なんちゃって)Athlon 64 X4を比較しても性能向上が見られている。

グラフ52

グラフ53

そこでもう少し別のテストも行ってみた。グラフ52、53は(いい加減止めようと思いつつも、代替できるベンチマークがないので未だに使っている)ScienceMarkである。今回はこの中でSGEMMとDGEMMの結果をグラフに示す。このテストは科学技術計算で良く使われるLAPACK(Linear Algebra PACKage)という線形演算ライブラリ(netlibで公開されている)の核となるBLAS(Basic Linear Algebra Subprograms)と呼ばれるコアライブラリの一つである、GEMM(行列演算関数)の性能を測定するものである。SGEMMは単精度、DGEMMは倍精度での演算となり、この結果SGEMMはFPU、3DNow!、SSEでの結果が、DGEMMではFPUとSSE2での結果がそれぞれ示される。このテストはSingle Threadなので、ここからは"(なんちゃって)Athlon 64 X4"の結果は示さない。

まずグラフ52だが、Compiled(つまりx87を使うプログラムのまま)だとやはりPhenom/Athlon 64 X2が良いスコアを出すのはFPUの高速さに起因する部分だろう。3DNow!でCore 2 Quadが無いのは3DNow!をサポートしていないからで、これは当然である。面白いのはこの先で、SSEではPhenomのスコアがAthlon 64 X2に比べて大幅に伸び、Core 2 Quadと同等のところまできていることだ。

この傾向は、グラフ53にも引き継がれている。ここで注目すべきはSSE2 scalarとSSE2 packedの違い。PhenomやCore 2 Quadの場合、Scalar SSE2演算では性能を引き出せず、Packed SSE2演算が必要になる。逆にPakcedにするとその性能は大きく伸びており、Assembly x87(つまりFPUを直接叩いた演算)の2倍近くまでスコアが伸びる。これを見ると、確かにSSEユニットの処理能力を倍増したという話は間違いないようだ。

グラフ54

最後にグラフ54に、MMX/SSE/SSE2を使った場合のMemory AccessのBandwidthをまとめてみた。これはMMX/SSE/SSE2命令を使い、8MB~16MBの範囲でサイズを変えながらRead/Write/Copyを行った結果の平均値をまとめたものである。流石にSSE128(最近AMDはPhenomのSSEゆにっとをこう称している。128bit幅を持つSSEユニットの意味らしい)にあわせて帯域を広げただけの事はあり、Read/Write/Copyの全ての処理で最大の帯域を誇っており、これだけ見ていればかなり高速な処理が期待できそうではある。