Click



後藤弘茂のWeekly海外ニュース

次世代CPU群DuronとSamuelとEzraのキャッシュの謎


●変則的な次世代CPUのキャッシュ構成

 来週に控えた「COMPUTEX TAIPEI 2000」のおかげで、今週はCPUやチップセット、マザーボードの話題が盛り上がっている。AMDの次世代Athlonである「Thunderbird(サンダーバード)」と対Celeron CPU「Duron(デュロン:コードネームはSpitfire)」で採用されるSocket A対応マザーボードは、いたるところでアナウンスが始まった。Computexでは、少なくともThunderbirdは当り前に展示されることになりそうだ。

 さて、そのThunderbirdとDuronだが、従来のCPUと比べるとちょっと変わったところがある。それは、キャッシュのサイズだ。現在の情報によると、両CPUの1次(L1)キャッシュと2次(L2)キャッシュの量は以下の通りだ。

・Thunderbird L1 128KB / L2 256KB
・Duron     L1 128KB / L2 64KB

 両CPUの、L1は実際には命令キャッシュ64KBとデータキャッシュ64KBで構成されている。いずれにせよ、見ての通りで、どちらもL1に対してL2の量が従来のCPUより少ない。L2にはL1の4倍以上の量を用意するのが普通だったのに、ThunderbirdのL2はL1の2倍しかないし、DuronにいたってはL2の方が少ないという変則的な構成になっている。

 しかし、この変則的なキャッシュ構成は、今後のCPUでは当たり前になっていくようだ。例えば、VIA Technologiesが計画している次々世代CPU「Samuel(サミュエル)1/2」と「Ezra(エズラ)」のキャッシュの量は以下の通りだ。

・Samuel1 L1 128KB / L2 0KB
・Samuel2 L1 128KB / L2 64KB
・Ezra    L1 128KB / L2 128KB

 Samuel2はL1が128KB、L2が64KBとDuronと同様の構成、EzraはL1が128KBでL2が128KBと、L1/L2の容量が同じになっている。つまり、L2はL1よりサイズが大きいもの、というのはもはや常識ではなくなってしまうというわけだ。どうして、次世代CPUのキャッシュはこんな構成になっているのだろう。


●L1/L2を排他的に制御

 まず、こうした新CPUは、いずれもL1/L2のキャッシュの制御を排他的に行なうと思われる。つまり、L1に書き込んだデータはL2に書き込まない、L2に書き込んだらL1には書き込まない(あるいは消す)という制御をハードウェアで行なうと予想される。こうした制御を行なうと、L2とL1には重複して含まれるデータがなくなるため、L2の量が比較的少なくても効率が上がるようになる。そうでないと、ワーストケースではL2の量のうちL1の量の分が重複した内容という非効率なキャッシュになってしまう。

 キャッシュの制御テクニックとしては、L2をL1からあふれたブロックだけを入れる「victim cache」としてだけ使うということが考えられる。この場合、L2に入っているのは、L1からリプレースしたキャッシュライン(のうち最新の部分)だけとなる。また、L1をミスしてからL2にアクセスするのではなく、L1とL2に並列にアクセスすればさらにキャッシュの効率は上がる。

 こうした制御をする場合、L2は、伝統的なL2のイメージと異なり、L1の拡張エリア(レイテンシの大きな)のような使われ方になる。これなら、L2の量がL1より小さくても不思議はない。

 排他的なキャッシュの制御は、じつは珍しい技術ではない。インターネット上にも論文がいくつかポストされているし、すでにVIAのCyrix IIIが採用している。だから、VIAの次世代CPUがこの技術を採用するのは確実だろう。

 AMDがこうした技術を採用するという情報は、じつは、まだ入手していない。しかし、キャッシュ構成を考えると可能性は高い。Web上のAMDウオッチングサイトも同じような推測をしているし、状況証拠もある。例えば、AMDは顧客に対してThunderbirdのキャッシュの量がCoppermine(カッパーマイン:現行のPentium III)の1.5倍だと説明しているが、これも排他的な制御を行なうと仮定すると計算があう。つまり、CoppermineのキャッシュはL1が32KBでL2が256KBの合計288KB。そのまま1.5倍にすると432KBでThunderbirdのキャッシュ合計量の384KBより多い。しかし、CoppermineのL1は内容がL2と重複しているとしてカウントしないとキャッシュ容量は256KBとなり、Thunderbirdのキャッシュはちょうどその1.5倍になる。


●キャッシュの搭載量の制約

 CPUのキャッシュの構成や制御テクニックが変わり始めたのは、まず、L2をCPUに統合するOn-Dieキャッシュ化が必須となったからだ。

 GHz時代を迎えて、CPUのクロックはますます上がりつつある。クロックの向上に見合う性能向上を実現するためには、On-Dieキャッシュにすることで、L2アクセスの帯域を広げ、レイテンシを抑えることが必要となっている。その一方で、PCの低価格化とともにCPUの価格競争も激しくなった。CPUのコストを下げるためにも、On-Dieキャッシュにして、外付けのキャッシュSRAMを削除することが必要となっている。

 しかし、現在の0.18μmのプロセステクノロジでは、On-Dieキャッシュで入れられるSRAMの量には限りがある。経済的なダイサイズ(半導体本体の面積)である100弱~130平方mm程度に、512KBものSRAMはとうてい載せられない。つまり、トータルのキャッシュサイズが限られてしまう。

 では、L1を小さくして、L2との量のバランスを取ればいいかというとそうでもない。性能が落ちてしまうからだ。例えば、Thunderbirdを64KBのL1と320KBのL2という構成に変えると、おそらく性能がかなり落ちると思われる。これは、L1のサイズの方が性能に与える影響が大きいからだ。例えば、VIAに買収されたCentaur TechnologyのGlenn Henry氏は、'98年10月のMicroprocessor Forumで「1次キャッシュを大きくしたほうが、小さな1次キャッシュと大きな2次キャッシュの組み合わせより性能が上がる」と説明、WinChip 3/4にL2を搭載せず128KBのL1だけの構成で行くことを明らかにした。WinChip 4はSamuel1と名前が変わっており、先ほど書いたように通りL2を搭載していない。


●L1は128KBが標準に?

 こうした事情から、CPUメーカーは、性能を最大限に引き出すために、一定のレイテンシ(最大で3サイクル)の中で最大の容量のL1を搭載しようとする。あまりサイズを大きくしすぎるとレイテンシが長くなるため意味がなくなってしまうが、プロセステクノロジの進化で、L1のレイテンシのワク内で搭載できる容量は段々大きくなっている。今はそれが128KBということらしい。

 というわけで、次世代CPUは、L1を128KB確保して、経済的なダイに収まる範囲の量のL2をそれに加えるという構成になったようだ。コストを下げるためにダイを小さくしなければならないDuronは切りつめて64KB、それよりはやや余裕があるThunderbirdは256KBといった具合だ。

 だが、こうした事情も、次の0.15/0.13μmプロセスからは変わる。例えば、Intelの0.13μm版CPUである「Northwood(ノースウッド、Willametteの後継)」や「Tualatin(テュアラティン、Coppermineの後継)」は512KBのL2を搭載すると言われている。大容量L2を搭載できるようになり、再びキャッシュ構成のトレンドは変わりそうだ。

 また、Intelは他のCPUメーカーと異なり、命令レベルでのキャッシュ制御を行なうという考え方でいるようだ。例えば、IA-64プロセッサの「Itanium」は、L1から浮動小数点(FP)レジスタへのポートを持っていない。FPレジスタはL2に接続されていて、サイズが大きいFPデータはL1データキャッシュには入れずに直接L2からロードする仕組みになっている。IA-64アーキテクチャでは、どのキャッシュに入れるかを明示的に指示できるので、データタイプごとに制御を行なうつもりだと思われる。


バックナンバー

(2000年6月1日)

[Reported by 後藤 弘茂]


【PC Watchホームページ】


ウォッチ編集部内PC Watch担当pc-watch-info@impress.co.jp