Decode部の処理性能と同時にI-CacheのBandwidthもある程度確認できたので、次はI-CacheのLatencyを確認してみたい。グラフ30~37はI-Cache Latencyをまとめたものである。テストはForward/Backward/Random/Pseudo-Randomの4種類の飛び方でNear JumpとFar Jumpを行うのにどの位のLatencyが必要だったか、から測定している。まずグラフ全体を見てみると、概ね1.5KB位までの範囲に関して言えば、どのCPUも結果は一定で、

Zacate : 2.25Cycle
Atom : 3.00Cycle
Nano : 3.20Cycle

といったところ。ところがこれを超えるとAtomやNanoでは、急にLatencyが増える場面が目立つ。構成から言えば、

Zacate : 32KB 8way set associativity
Atom : 32KB 2way set associativity
Nano : 64KB 16way set associativity

で、1wayあたりの容量は4KB(これはPage Sizeにあわせているのだろう)~16KBだから、ここまで差がでる理由がわからないのだが、AtomはNear Jumpの場合に1.5KBあたりからLatencyが急に増え、概ね7cycle程度まで悪化する(Far Jumpの場合は3cycle前後のまま)。逆にNanoはFar Jumpの場合にやはり1.5KBあたりから急激に悪化、15Cycle程度までLatencyが増加する(Near Jumpの場合は3.2Cycle前後のまま)という、ちょっと不思議な結果になっているのが非常に面白い。Zacateは? というと、こうした不思議な振る舞いは一切なく、32KBあたりまでほぼ一定となっている。

その先、特にMmeory Accessの範囲もなかなか面白い。明らかに一番変なのがNanoで、例えばNear JumpのBackward(グラフ31)が170cycle弱なのに、Near JumpのPseudo-Random(グラフ33)が70cycle強というのは、一体Nanoのメモリコントローラ(というか、正確に書けばVB8001に搭載されているVIA CN896チップセットのメモリコントローラ)はどういうインプリメントをしているのか、全く想像もつかない。そんなわけでNanoはまぁ措いておき、AtomとZacateを比較してみると、規則的なアクセス(ForwardとかPseudo-Random)に関してはAtomの方が低Latencyで動作するのだが、BackwardとかRandomになると俄然Zacateが有利になるという傾向が見て取れる。ZacateのForwardがやや遅いのは、ひょっとするとメモリコントローラの帯域制限が関係しているのかもしれないが、Random系が相対的に低LatencyというのがZacateの特徴といえそうだ。