新しく登場したNehalem Microarchitectureの演算性能向上に大きく貢献している要素として、新しく採用されたCPU上にメモリコントローラを搭載しする仕組みがあります。この仕組みにより、従来のXeon (R) でメモリボトルネックが問題となっていた「メモリ性能依存型」アプリケーションでの性能停滞が大きく緩和されています。その効果はSPEC CFP2006の結果で確認できます。「メモリ性能依存型」アプリケーションのCore(TM) i7、Xeon (R) 、AMD Opteron(TM)での4スレッドでの性能比較を確認すると
「4ジョブでのCore(TM) i7によるXeon (R) との経過時間の比」は約3倍
「4ジョブでのCore(TM) i7によるAMD Opteron(TM)との経過時間の比」は約2倍
と圧倒的な性能向上が確認されています。
このテスト結果から推測すると、Core(TM) i7に搭載されているメモリシステムの実効性能は、「メモリ性能依存型」のアプリケーションを用いる場合、Xeon (R) の約3倍高速、AMD Opteron(TM)の約2倍高速という推測が成り立ちそうです。では実際はどの程度なのでしょうか。確認のためにメモリシステムの構成を調べてみます。
Nehalem Microarchitecture (Core(TM) i7) のメモリシステムは、CPU上に直接メモリコントロラを搭載し、各CPU毎に3チャネルのメモリ接続ポートを持ち、メモリにはDDR3と呼ばれる新世代の高速メモリモジュール用いて構成されています。テストに用いたCore(TM) i7のシステムでは、DDR3-1066規格のメモリを3チャネルのインターリーブで接続しており、25.6GB/s (8.53GB/s x3) のメモリ帯域を実現しています。
AMD Opteron(TM)のメモリシステムは、CPU上に直接メモリコントロラを搭載し、各プロセッサ毎にDDR2-800規格で転送速度が6.4GB/sのメモリモジュールを2個接続し、12.8GB/s (6.4GB/s x2) のメモリ帯域を実現しています。この値はCore(TM) i7のメモリ帯域の半分です。これは上述の「メモリ性能依存型」アプリケーションを用いた場合でのCore(TM) i7とAMD Opteron(TM)で確認された2倍の性能差に符合します。
Xeon (R) のメモリシステムは、CPUと独立したメモリコントローラを持ち、CPUとはフロントサイドバス (FSB) を介して接続する方式をとっています。メモリコントローラにはDDR2 667MHz FB-DIMM規格で転送速度が5.4GB/sのメモリモジュールを2個接続し、10.8GB/s (5.4GB/s x2) のメモリ帯域を実現しています。CPUとメモリコントローラの間も転送速度10.5GB/sのフロントサイドバス (FSB) を用いて接続されています。メモリシステムとFSBの帯域幅はそれぞれ10.5GB/sとバランスが取られています。しかし、幾つかのデバイスを介した通信を行うためオーバーヘッドの影響を受けているようです。そのためメモリ負荷の大きな4ジョブ並行処理では、メモリ性能差が1.2倍のAMD Opteron(TM)に対しては実効性能で約1.6倍の差がついています。さらにメモリ性能差が2.4倍のCore(TM) i7に対しては3倍もの大差が付いています。
■参考 DDR2とDDR3のメモリ仕様とシステムレベルの総合転送性能の比較表 (表の値はウィキペディアなどを参照)
| メモリ種類 | チップ規格 | モジュール 規格 |
メモリクロック (MHz) |
バスクロック (MHz) |
データ 転送速度 (GB/s) |
CPU | CPU毎の 接続チャネル |
CPU毎の データ 転送速度 (GB/s) |
| DDR2 DIMM | DDR2-400 | PC2-3200 | 100 | - | 3.20 | Opteron | 2 | 6.40 |
| DDR2-533 | PC2-4200 | 133 | - | 4.27 | 8.54 | |||
| DDR2-667 | PC2-5300 | 166 | 333 | 5.33 | 10.66 | |||
| DDR2-800 | PC2-6400 | 200 | 400 | 6.40 | 12.80 | |||
| DDR2 FB-DIMM | DDR2-400 | PC2-3200 | 100 | - | 3.20 | Xeon (NetBurst) (Core) |
(2) | (6.40) |
| DDR2-533 | PC2-4200 | 133 | - | 4.27 | (8.54) | |||
| DDR2-667 | PC2-5300 | 166 | - | 5.33 | (10.66) | |||
| DDR2-800 | PC2-6400 | 200 | - | 6.40 | (12.80) | |||
| DDR3 DIMM | DDR3-800 | PC3-6400 | 100 | 400 | 6.40 | Xeon Core(TM) i7 (Nehalem) |
3 | 19.20 |
| DDR3-1066 | PC3-8500 | 133 | 533 | 8.53 | 25.59 | |||
| DDR3-1333 | PC3-10600 | 166 | 667 | 10.67 | 32.01 | |||
| DDR3-1600 | PC3-12800 | 200 | 800 | 12.80 | - | (3) | (38.40) | |
| DDR3-1800 | PC3-14400 | 225 | 900 | 14.40 | (43.20) | |||
| DDR3-2000 | PC3-16000 | 250 | 1000 | 16.00 | (48.00) | |||
| DDR3-2133 | PC3-17066 | 266 | 1066 | 17.06 | (51.18) |
Nehalem (Core(TM) i7) にて「メモリ性能依存型」のアプリケーションを利用するシステムを検討する場合のポイントは、CPUクロック速度向上の演算性能向上への貢献は、4ジョブ並行処理ではあまり期待できません。性能向上に効果が期待できるのはメモリクロック速度のようです。最高クロックのCPUにコストを掛けるよりは、高速なメモリを搭載しているシステムを導入する方が賢明な様子です。現時点で公開されているNehalem (Core(TM) i7) テストのDDR-3 1066メモリ製品を搭載した構成だけです。ぜひともDDR3-1333メモリを搭載したシステムのテスト結果を評価してみたいものです。
Nehalem Microarchitectureは各CPUにメモリコントローラが搭載されているので、CPU数の増加に伴いメモリシステムとメモリ帯域が増加します。そのため、CPU数の増加によるメモリ競合が原因のスループットの低下を心配する必要は低いです。
メモリ価格の低下と大容量化が進んでいるので、計算機に搭載するメモリ容量には十分な余裕を持たせることをお勧めします。メモリ量が少ないと、ジョブの利用メモリサイズがローカルに搭載しているメモリ容量を超えてしまい、リモートのメモリを利用することになります。すると、メモリのI/O性能が低下し、特に「メモリ性能依存型」のアプリケーションでは演算性能に影響があらわれる可能性があります。しかし、十分な容量のメモリを搭載していると、このような状態に陥ることを減らすことができます。
大規模計算のプリポスト処理などでは単一プロセスが、リモートCPUに接続されているメモリアレイを利用する場合があり、その場合のメモリレイテンシーが懸念されます。しかし、Intel(R)の資料によると、リモートのメモリをアクセスする場合のレイテンシーは、従来のXeon (R) がローカルメモリをアクセスする場合のレイテンシーと同程度であり、十分に高速とのことです。もちろん、ローカルメモリのレイテンシーは従来のXeon (R) よりもさらに低レイテンシーです。
Nehalem Microarchitectureでは全てのコアで共有する大容量の3次キャッシュを搭載しています。3次キャシュを各コアで共有することで、コア間にてキャッシュ内容の一貫性を確認するための通信オーバーヘッドなどが削減され、さらなる高速メモリI/Oが実現されます。