Cache/Memory/QPI
Cache/Memory/QPIについて説明したい。まずCacheであるが、兼ねてから言われていた通り、3レベルの構造となる(Photo24)。各コアは32KBのL1 Instruction/Data Cacheと256KBのUnified Cacheを持ち、これは従来通り各コアが独占する。これに加え、全てのコアで共有する形のL3キャッシュを、Quad Coreの場合で最大8MB搭載する。ただ、ここでL3 CacheがInclusiveであることを強くアピールしているのは、やはりAMDへの対抗であることは間違いないだろう。それはともかく何故L2を256KBに縮小したかだが、理由は2つ考えられる。1つはLatencyの削減。ConroeのL2 Cacheはこちらのグラフ22でも判るとおり、最良の場合でもLatencyが8~9Cycle必要とされる(PenrynではL2が大容量化した関係で更に遅くなった)。これをもう少し高速化したいと思った場合、やはり容量を下げるのは効果的である(Hit/Missの検索に要する時間が短縮されるからだ)。256KBまで縮小すれば恐らく6Cycle程度までLatencyは削減される筈だ。これは当然L1 Miss/L2 Hitの場合の性能改善に役立つ。当然容量は減る分、アプリケーションによってはHit率は下がるだろうが、それはL3 Cacheでカバーすれば良いという判断だろう。
2つ目は、Inclusive Cacheでは避けられない、Cacheの利用効率の低下を避けるためだ。最初のNehalemは8MBの容量と言いながら、4つのコアが各々持つ256KBのL2キャッシュと内容が重なる公算が高いから、実質的に意味がある容量は8MB - 256KB×4 = 7MBとなる。逆に言えば、それでも7MB残る計算だ。これがコアあたり1MBとかになると、実質的なL3の容量は4MBに減ってしまい、平均してコアあたり1MBしか割り当てられない事になってしまう。Inclusive Cacheの構成を取る以上、ある程度L2とL3の容量差が大きくないと、折角のL3の効用が薄れてしまいかねない。
さてそのL3 Cacheだが、今回は素直にInclusive Cacheの方式を取った。実は2007年のMicroProcessor ForumでIntelはMany Core時代のキャッシュ構成に関する研究を発表しており、このなかでMany Core世代ではNCID(Non-inclusive Cache, Inclusive Directory)が最適という見解を発表しており(Photo26)、Nehalem世代では最大8コアまでサポートされるから、あるいはこれを搭載してくるかと思ったが、素直にInclusive方式とした(Photo27)。
こうしてみると、Nehalem世代はL3 Cacheを追加したというよりは、L2 CacheをL3 Cacheに格下げし、L1 Cacheとの間にL1.5 Cacheという位置づけのCacheを追加した、と考えるのが妥当な気がする。おまけに命令Cacheに関してはLoop Stream DetectorがいわばL0.5 Cacheとして動作するわけで、実に4段構成もの重厚なCache構成を取るアーキテクチャになったと考えるのが妥当かもしれない。