Out-of-order load execution(Photo07)

Photo07:このOut-of-order LoadがそのままL2キャッシュのレイテンシ低減に繋がる、というのはL3までをVictim Cacheの構成にしたことと無縁では無い気がする。

機能的には、IntelがCore 2でSmart Memory Accessという名前で実装したMemory Disambiguationに近いものがある。図1はLoad-Store Unitの概念図であるが、Athlon 64 X2はL1キャッシュが12エントリ、L2キャッシュが32エントリで合計44エントリ用意される。L1キャッシュ用のエントリからは、最大で1cycleあたり2 64bit operation(Load/StoreのMIX)が可能で、この結果Loadなら最大16Bytes/cycleを実現できる。一方L2キャッシュ用エントリは、ここから直接的にRead/Writeを行うことを想定していない。またL1キャッシュ用のエントリからのLoad/StoreはあくまでIn-Orderで実施される。

図1

他方Phenomの場合、LSUの目的が大きく変わった(図2)。共有L3キャッシュまであることを考えて、LSUそのものはL2キャッシュ以下を見ない事にしたようだ。ただし、2種類のエントリがある事は変わらない。名前はLS1とLS2に変わっており、またサイズは現時点では未公開である。ただPhoto01では合計44Entryとなっているから同じままかもしれないが、LS1を増やしてLS2を減らすなんて事も行われている可能性も否定はできない。

図2

LS1から同時に2 operation/cycleが可能なのは同じだが、operationは128bit Load/64bit Storeに変更されており、これにより最大32Bytes/cycleのReadが可能となっている。またこのOperationをOut-of-Orderで発行できるようになっている。このStoreに関しては、LS1発行し、LS2(L2キャッシュ用エントリ)でDoneする構造になっている様だ。

これとは別に、Superforwardingなる機能も搭載されている。これは浮動小数点演算のロードを高速化するもので、例えば、

fld [somefloat]
fadd st(0),st(1)

といった命令が並んでいた場合、コンサバティブにはまずFLD命令を実施して、st(0)の領域にデータをロードし(つまり一旦Register Fileに値を格納し)、それが終わってからFADD命令を開始する。ところがSuperforwardingを搭載している場合、FLDによってロードされた値は、(レジスタファイルを経由せずに)直接FADDの処理に渡される仕組みとなっている。

これについても、適切なComponent Benchmarkは存在しない。強いて言えばグラフ1~12のスコアを見れば一目瞭然というあたりだろうか。ただOut-of-Orderを実施する/しないの制御は外部から不可能なので、これらのグラフが示す高い性能の一部にOut-of-Orderが貢献している、と考えるしかないだろう。