さて、次はMemoryとQPIである。最初にリリースされるNehalem EPでは、CPUにMemory Controllerが内蔵され、且つQPIと呼ばれるInterconnectによりCPU同士やCPU⇔チップセットが接続されるというのは既に報じられた通りだ(Photo28)。さて、その最初の製品はRegistered DIMMとUnbuffer DIMMをサポート、DDR3-1333までをサポートする(Photo29)。これによりピークのメモリアクセス性能はCPUあたり最大32GB/secに達する計算だ(Photo30)。ちなみにInterleaveはどうなるのか? と思ったが、ちゃんと1/2/3-way Interleaveをサポートしているようだ(Photo31)。

Photo28:最初の製品は3本のDDR3メモリチャネルを搭載する。もっとも、全てのNehalem世代が3本という訳ではないようだ。それにしても、まんまHyperTransport Linkを使ったOpteronそのものだと思うのは筆者だけではあるまい。

Photo29:各CPUから3本づつメモリチャネルが出る。DDR3-1600以降は、とりあえずはサポートされないようだ。まぁ制限事項(1本のメモリチャネルあたり1枚)を考えると、あまり現実的ではないかもしれないが。

Photo30:1333MHz×8Bytes(64bit)×3=32GB/secという計算になる。ただ、3chだと192bitというメモリ幅になるわけで、32GB/secといってもどこまでその実力が出るのかはちょっと? ではあるが。Page Boundaryとかにあわせると遅くなるので、多少無駄が出てもx3にAlignする可能性も捨てられないが、Logical Re-Orderを考えるとそれもなさそうな気がする。

Photo31:NehalemにおけるInterleave Mechanism。1/2/3watでのMemory Interleaveをサポートするが、64MB単位で並べ替えをする、という不思議な機能が搭載されているのが判る。

ちなみに1本のMemory Channelに何本のDIMMが装着できるか? については、3本(Photo32)と2本(Photo33)の2つの資料がある。察するに、Registered DIMMだと3本/Channel、Unbuffered DIMMだと2本/Channelという辺りではないだろうか?

Photo32:この図を見ると、1chあたり3本のDIMMが装着できているが、Dual Processor構成だからここはRegistered DIMMの公算が高い。

Photo33:こちらはマザーボードのガイドライン。"2 DIMM per channel/UDIMM only support"とあるあたり、デスクトップ向けはUnbuffered DIMMに限られ、2本までに制限されているのであろう。

一方Dual Processor以上だと、複数のProcessorが各々Memoryを持つことになる。これをどう扱うか? という話であるが、機構的には当然ながらNUMAとなる(Photo34)。アクセスのメカニズムは、きわめてXfireに近い。例えばCPU0がLocal Memory Accessを行う場合であっても、自動的にCPU1に対してSnoopが発生する(Photo35)。当然ながら、Remote Memory AccessはSnoopに続いてデータの転送がQPI経由で行われる事になる(Photo36)。ちなみにIntelによれば、Local Memory Accessは従来のFSB方式の60%程度、Remote Memory Accessであっても従来のFSB未満のLatencyでアクセスできる、としている(Photo37)。ちなみに4P構成における構造はこんな具合(Photo38)で、やはり全てのProcessorが1hopで接続される。このため、Latencyは「大きくは」増えないだろう。

Photo34:これはOpteronなども当然そうなるわけだが、物理的にはともかく論理的にはUMAとして見える仕組みを作っており、これを支えるのがXfireという話であった。このあたり、Intelがどうするか? アプリケーションの互換性を考えると、UMAに見せる仕組みは絶対に必要だろうが、それとは別にNUMAのまま動くモードを提供しても不思議ではないとは言える。

Photo35:Xfireの場合も、Memory Access時には同時に他のProcessorへのSnoopが発生する。このあたりは、論理的にはUMAを構成する仕組みになる。つまりプログラムから見れば、それがLocalなのかRemoteなのかを区別する必要が無い訳で、このあたりは典型的なUMAの実装になっている。

Photo36:Remoteの場合は、当然QPI経由でCPU1のIMC(Integrated Memory Controller)からデータを貰う形に。

Photo37:これは2Pだからこれでもいいわけだが、Photo38に示す4Pはともかく、将来の8P構成になった場合にどうなるか? が気になるところ。現在のNehalemの4P構成は全てのプロセッサが1hopで接続されるからこれでもいいのだが、2hopを許すことが出来るとすると、流石にこうしたケースではもう少し遅くなりそうに思える。

Photo38:Photo36の構図をそのまま4Pに展開すると、例えばCPU0はCPU 1/2/3に対してSnoopを掛ける事になる。この結果、3つのCPUからの返事を受け取る事になるわけで、これが全く同時という事はありえないから、同期のために多少余分に時間を食うことになるだろう。