新しいインテルのXeonプロセッサは性能を向上させるため多くの技術が根本的にリニューアルされました。具体的には、CPUアーキテクチャを「Intel Coreマイクロアーキテクチャ」に刷新することでCPUコア性能を大きく改善し、大容量の共有キャッシュと1333MHzの高速FSBによりメモリアクセス速度を改善、FB-DIMM技術を採用しメモリ帯域を21GB/secへと向上、コンパイラや数値演算ライブラリなどを新アーキテクチャに最適化させるなど、性能向上を目指すために多くの新技術が組み合わされています。その結果、OpenMP並列プログラムの性能向上、数値演算ライブラリによる並列計算性能の向上、MPI並列性能の向上など、多方面での性能向上が果たされました。
ところが、一部のMPI並列計算において並列性能が向上しないという問題が見え隠れしていました。そして、その原因としてはメモリ帯域の不足が主に疑われています。しかし本当にそうなのかは検証されないまま憶測で評価されるのも残念です。
ところが他方で、新世代のCoreマイクロアーキテクチャを採用したDual-Core Xeonでシングルプロセスジョブを複数平行に実行させた時の性能は、NetBurstマイクロアーキテクチャ世代のCPUと比較して圧倒的に高性能です。この事実からメモリ帯域不足が起こっているとは思えません。メモリ帯域不足を疑うにも苦しいところがあるのです。メモリ帯域不足への対策は万全で、2基のXeonに対して2本のFSBを持ち、動作周波数も1333MHzへと高速化しています。メモリ帯域も従来の3倍以上の21GB/secに向上しています。さらにキャッシュも大容量化されています。これらのことから、「メモリ帯域に対する懸念は払拭されている。」と弊社では認識しているのです。
【参考】2ソケットの新旧での簡易性能比較表
| 2ソケット | |||
| Dual-Core Xeon | Dual-Core Xeon | Quad-Core Xeon | |
| 旧 | 新 | 新 | |
| アーキテクチャ | NetBurst | Intel Coreマイクロ | |
| コア毎のクロックあたりの 同時実行可能命令数 |
2 | 4 | |
| コア数 | 2 | 2 | 4 |
| キャッシュサイズ (MB) | 2 + 2 | 4 (共有) | 4 (共有) + 4 (共有) |
| FSB (MHz) | 800 | 1333 | |
| FSB チャネル数 | 1 | 2 | |
| メモリ帯域 (GB/s) | 6.4 | 21 | |
| 搭載可能メモリ容量 (GB) | 16 | 32-64 | |
Quad-Core XeonやDual-Core Xeonでのメモリ帯域不足を懸念する議論は、新技術の導入初期に起こりがちな、開発環境の開発の遅れに起因する場合が多く、時間が経って解消するものも多いと弊社では考えています。これらのことは古くからHPC計算機を利用されている方なら経験されていることと思います。昔は新アーキテクチャが登場してから、対応する開発環境がユーザの手元で整備されるまでに1〜2年のタイムラグは当たり前でした。さらに、その環境で開発されたアプリケーションが配布されるにはそこから1年近くもかかっていました。最近の事例ではPentiumIIIからPentium4 (NerBurst) への移行期にもこの現象が起こり、2年程度のタイムラグがありました。この構造は現在でも大きくは変わらないと考えられます。
さて、あるお客様からご依頼されたCHARMmのインテグレーション作業において、Woodcrest (Dual-Core Xeon 3.0GHz) 1ノード 4CPUコア機が、ノード内のMPI計算であるにもかかわらず2プロセスまでしか並列性能の向上が見られず、4プロセスにいたっては完全に性能が低下してしまっている現象が確認されました。ノード内の4コアMPI並列がシリアル計算に負けてしまっていたのです。これには言葉を失ってしまいました。

弊社ではこの衝撃の結果を目の当たりにして、OSやカーネルの設定、コンパイラオプションの変更などを網羅的に行い、原因の検討を開始しました。しかし、どうしても2プロセス以上で性能を向上させることはできませんでした。そのため、一時的にではありますが、「メモリ帯域の不足による並列性能の頭打ちが起こっているのではないか。」との考えに傾いてしまいそうになったこともあった程です。
しかし、「原因をメモリ帯域不足」と決め付けたとしても、それで実質的な課題が解決できたことにはなりません。そこでお客様に了解をいただいた上でさらに、OS、カーネル、コンパイラのバージョン、オプション、数値演算ライブラリのバージョン等、性能に大きな影響を与える可能性がある全ての要素について網羅的なテストを徹底的に行いました。しかし、それでも良い結果は得られませんでした。
もうテストする要素が尽きかけ、最後に残ったのが、並列性能に影響を及ぼす可能性は小さいだろうと見込んでいたMPIライブラリの交換でした。考えていたMPIライブラリは「Intel-MPI」と呼ばれるインテルの純正品です。インテル純正品ですからインテルコンパイラやインテル数値演算ライブラリなどとの親和性が高く、インテルのDualコアアーキテクチャに対しても最高度に最適化されている筈です。このIntel MPIに望みを託して最後の検証に臨みました。
テストすると、その結果は劇的なものでした。低迷していた並列性能はスパンと向上し、見事に課題をクリアできました。その結果をグラフにしました。
一時は、「メモリ帯域の不足による深刻な性能障害である。」との結論になびいてしまいそうになったのですが、幸運にもMPIライブラリの変更によってMPI並列性能が向上し、DualコアXeon機の真の性能を顕在化させることができました。システムが性能を発揮したことで、お客様もおおいに喜ばれました。また弊社も目から鱗が取れる思いでした。

お客様の課題に対する対策は完了し、お客様に喜んでいただくことはできました。しかし、その発生メカニズムの検証作業はここからです。そこでまず最初に、MPICHがノード内で通信する場合にどのような特性を示すのかを確認しました。(テスト機はQuad-Core Xeon 8CPUコア機による) すると、2プロセス間の通信では問題が起こりませんでしたが、プロセス数を4、8プロセスと増やしてゆくと、小さなサイズのデータ転送時には通信性能の低下が傾向的に発生していることが判明しました。
そのテスト結果をグラフにしました。MPICHは青系の色です。2プロセスは妥当な性能ですが、プロセス数が増えると小さなサイズの通信では性能が急激に落ちていることが見て取れます。これに対して、赤色のIntel-MPIでは8プロセスでも高い性能を示しています。MPI実装の違いによる性能差が見事に現れました。

さらに継続的にベンチマークを行い、QuadCore Xeon 2node 8CPUコア + Intel-MPI環境にて、システムインターコネクトをGbEとInfiniBandの2種類を用いてその性能差を比較しました。するとCHARMmでは、より大規模な並列計算になるとInfiniBandが必須であることが示されました。Intel-MPIにより真の性能を引き出されたQuad-Core Xeonはノードの並列性能が向上し、この計算では2ノードのクラスタからInfiniBandを必要とするほどの性能を発揮するようになったのです。

さらに参考として、jac1000の計算をAMBER9でも同じ計算機環境で行い、先のCHARMmの計算結果との比較グラフを作成しました。
ベンチマークデータは、CHARMmとAMBER9の性能比較の指標として良く利用されるjac1000を利用しています。
■ jac1000 : http://amber.scripps.edu/amber8.bench2.html
・23,558 atoms
protein: 159 residues, 2489 atoms
water: 7023 molecules TIP3P, 21,069 atoms
・Cubic periodic box, 62.23 A dimension
・9A nonbond cutoff with 2A buffer, i.e., list with 11A cutoff
・1 fs timestep, 1000 steps
・NVE ensemble (constant energy, constant volume); CHARMM was run with NVT using Nose'-Hoover
・bonds to hydrogen constrained (SHAKE)
・PME electrostatics with 64x64x64 grid
・equilibration temperature was 300K