次はFast Unaligned Cache Accessである(Photo20)。現在のSSE系の命令の最大の欠点は、データのAlignmentが要求されることである。プレゼンテーションにもある通り、SSE系命令は原則として16Bytes Boundaryに沿った形でメモリをアクセスする。なので、データがこの境界をまたぐ様な配置になっている場合、遅くなるのを覚悟でUnaligned命令を使うか、あらかじめデータの並べ替えを行ってからSSE命令を使うといった面倒さがあった。これに対し、NehalemではデータがUnaligned命令を高速化したことで、Unaligned命令を多用しても性能差が出ないようになった。これはSSE命令を使って、特に科学技術計算などを行わせる場合に大きく効果が出やすい。どちらかといえば、HPC用途を考慮した改良と言えよう。

Photo20:あくまでもこれはCacheに対しての話。なので、メモリアクセスは相変わらずAlignedである必要がある。もっとも、SSEで直接メモリアクセス命令を使うかどうかは微妙。例えばPHADDW(Packed Horizontal Add Word)はDestinationにXMMレジスタと128bitのメモリアクセスの両方を選択可能だが、これはメモリアドレスがキャッシュされていないとむしろ遅くなる。なので、あらかじめPrefetchなどと組み合わせてMOVUPSなりMOVDQUなりでメモリの内容をXMMレジスタに取り込んでおき、その後レジスタ間演算をする形になる事が多い。なので、事実上はこれでそれほど差し支えないのだろう。

最後がFaster Synchronization Primitivesである(Photo21)。これはもう単純に、LOCK prefixとかXCHG命令の処理を高速化したことで、複数Thread間の同期が高速化されるという話だ。

Photo21:例えばXCHGの場合Pentium 4は論外として、Conroe/PenrynだとLatencyは1.5 Cycle、Throughputは1 Cycleになっている。恐らくはNehalemではLatencyも1 Cycleにしたという話であろう。

もう一つ、忘れてはいけないのはSMTの搭載であろう(Photo22)。Pentium 4で搭載されたHyper-Threadingでおなじみの機構である。問題は、どの程度のリソースをSMT用に分けたかという話で、例えば同じくSMTを搭載するAtom Processorの場合、Register FileすらThread別に分けるといった構造になっているが(Pentium 4の場合、RAT(Register Alias TableはThread毎に搭載されていたが、Register Fileそのものは共通である)、現状ではまだこのあたりの詳細は未公開のままだ(Photo23)。

Photo22:SMTの利点として挙げられている項目は、かつてPentium 4のHyper-Threadingに関する説明と全く同じである。強いて違いを挙げれば、Pentium 4の時代よりも大容量のキャッシュや、遥かに高速なメモリバスが、より効率よく動作する事を助けている程度か。

Photo23:こうして見ると、ITLBや2nd Level TLB、Renamed RSBがいずれもSMTを考慮しての機能と分類されていることが判る。