国立天文台に NEC SX9 がはいって既に半年がたちました。性能の数字とかを
少しだそうかと思っていたのですが、なかなか忙しくて時間もとれませんでし
た。少し時間があることにして以下書きます。
ベクトル機なので、興味はまずメモリバンド幅、ということで、 STREAM です。
8PE で
 ----------------------------------------------
  Double precision appears to have 16 digits of accuracy
  Assuming 8 bytes per DOUBLE PRECISION word
 ----------------------------------------------
  ----------------------------------------------
  STREAM Version $Revision: 5.6 $
  ----------------------------------------------
  Array size = 1600000000
  Offset     =          0
  The total memory requirement is **** MB
  You are running each test  10 times
  --
  The  best time for each test is used
   EXCLUDING the first and last iterations
  ----------------------------------------------
  Number of Threads =   8
  ----------------------------------------------
  ----------------------------------------------------
  Your clock granularity/precision appears to be     52 microseconds
  ----------------------------------------------------
 Function     Rate (MB/s)  Avg time   Min time  Max time
 Copy:          1757524.1824            0.0152            0.0146            0.0162
 Scale:         1512653.3078            0.0172            0.0169            0.0174
 Add:           1701974.7400            0.0226            0.0226            0.0227
 Triad:         1827251.6972            0.0211            0.0210            0.0213
  ----------------------------------------------------
  Solution Validates!
  ----------------------------------------------------
で、Scale だけ何故かちょっと低いですが、他は大体 1.7TB/s 以上でている
ことがわかります。この数字はよいのですが、16PE になると
 ----------------------------------------------------
 Function     Rate (MB/s)  Avg time   Min time  Max time
 Copy:          2713319.2429            0.0095            0.0094            0.0096
 Scale:         2759552.3619            0.0094            0.0093            0.0096
 Add:           2695856.8827            0.0143            0.0142            0.0144
 Triad:         2760214.4539            0.0141            0.0139            0.0144
 ----------------------------------------------------
となって 2.7TB/s になってしまいます。実はこの数字は10月に測定したので
すが、低いのは何かおかしいかと思って公表を控えていました。が、 NEC が
HPCC ベンチマークの数字として発表したものがやはり 2.7TB/s だったので、
まあ、本当にこの数字、ということのようです。
NEC の公式の数字は 16PE で4TB/s なので、2/3 です。ベクトル機なんだから
STREAM でピークの 90% 以上がでるのは当然、と思っていたのですが、SX9 は
バッファメモリとかがついた関係か、そうなっていないようです。
これを x86 PC と比べると、
例えば Opteron で DDR2-800 2チャネルだと理論値は1ソケット 12.8GB/s で
すが実力はまあ 7GB/s くらい、これが Core 2 になると同じ理論値で実力は
5GB/s 程度まで低下します。
これは面白い状況で、 x86 並列機をソケット 100万で買うとメモリバンド幅
1GB/s 当りのコストは 14-20万円ですが、 SX9 が1ノード2億円だとすると
(地球シミュレータセンターの買い値はもうちょっと安いです)1GB/s 当りの
価格は7万円となって、大きな差があるわけです。
これは、 SX9 のソケット当りのメモリバンド幅が SX8/8R に比べてほぼ3倍改
善されて、ソケット当りの価格は(多分)あまり変わっていないからです。
まあ、地球シミュレータの時期に比べると、 SX は 32GB/s が実力 170GB/s になっ
て6年間で5.3倍、x86 は P4 で名目 3.2GB/s、実力 2GB/s くらいだったのが
3.5倍にしかなってないので、今の瞬間では相対的にベクトルが良くなってい
るわけです。
もちろん、来月になって Nehalem がでてくるとメモリバンド幅の実力が Core
2 に比べて3倍程度になるようなので、SX9 と同等になり、メモリバンド幅当
りのコストとしては地球シミュレータ当時と同様に x86 ベースの高い計算機
とベクトル機で同等、 x86 で安く上げることができれば1桁良い、ということ
になります。
結局相対的な性能比は変わってないので、1年前に 50 で
した議論はあまり変わらないわけです。但し、1年前の議論で若干問題だったの
は、 x86 のメモリバンド幅を理論ピーク値で評価していることです。Opteron
(少なくとも 1ソケットや2ソケットなら)はまあ実力がピーク 6-7割がでるので
それほど大きな乖離はないのですが、 Core 2 は4割くらいしかでないので結
2.5倍の差になり、2倍程度の差を議論している時には結論が変わってきます。
これは、HPC でベクタ向けに書かれたアプリケーションだと、Opteron のほう
が Core 2 よりも速いこともある、ということでもあります。
ちなみに、SPARC64-VII を搭載する富士通の最新鋭 HPC 用サーバ FX1 は、
名目メモリバンド幅 40GB/s なのですが実力(STREAM 実測)は 13.5GB/s との
ことで3割程度のようです。もうちょっとがんばってないと、、、という感も
あります。
この辺はやはりキャッシュありの共有メモリマルチプロセッサの難しいところ
で、キャッシュコヒーレンシを維持するためにはプロセッサ間で複雑なやりと
りが必要になり、そのためにメモリアクセスレイテンシが増えると実効バンド
幅もさがってしまう、ということがあるように思われます。
この意味では、GPU ライクな構造をもたせるのにコヒーレントキャッシュで、
しかもプロセッサ間はレイテンシの大きなリング結合をもつ Larrabee でアプ
リケーションの性能がでるのかどうかはとても興味深いです。