1 セカンドキャッシュとは i486DX2の登場以降、CPUに内部クロック逓倍回路が搭載されたことにより、メモリ等を駆動するシステムクロックとCPUコアの動作クロックが乖離し始めた。特に、Pentium世代になるとCPUコアの動作クロックはシステムクロックの3倍・4倍となり、CPUの高速化が顕著に進行するわけだが、一方でメモリは従来の動作クロックのままで動いており、CPUがメモリアクセスの処理待ちで足を引っ張られるようになった。 これに対応するために、CPUとメインメモリの間に高速なバッファメモリを設けることによって、処理待ちを軽減するような方法が採られるようになった。このバッファメモリがキャッシュメモリである。 通常のメモリはDRAMと呼ばれる形式のメモリで、これは構造が単純で容量が稼げる(よって安価)のだがアクセス速度は比較的遅い傾向がある。これに対して、SRAMと呼ばれる形式のメモリは構造が複雑なため低容量のチップとなってしまいかなり高価なものとなってしまう。 そこで、主記憶には大容量が確保できるDRAMを採用し、キャッシュメモリとして小容量だが高速なSRAMを採用したシステム構成が採用されるようになった。 そして486〜Pentium世代においては、CPUに小容量の高速1次キャッシュを内蔵し、マザーボードに低速の(とは言ってもメインメモリよりは高速なのだが…)2次キャッシュ(セカンドキャッシュ、2nd cache)を搭載するのが一般的であった。 486世代では、マザーボード上にDIPソケットが設けられておりSRAMチップを必要個数載せるという形式が一般的であったが、Pentium世代になるとSRAMのチップ形状がQFP等になったこともあり、SRAMチップとTagRAMを搭載したモジュールを専用ソケットに増設する形式が主流となった。 PC-9821Xv20においても、チップセットである430HXがサポートする256KB/512KBのセカンドキャッシュが使用できるようになっており、標準で256KBのセカンドキャッシュが搭載されている。 2 K6-III換装時のセカンドキャッシュ さて、通常使用時は当然のことながらセカンドキャッシュの容量を増加させることによって性能が向上するのだが、これがCPUをAMDのK6-IIIに換装した時にもあてはまるのかどうか、それを検証してみるのが本稿の目的である。 なぜにこのようなことを今更検証するのかといえば、PC-9821Xvが市販されていた当時において検証した事例が少ないからである。 というのも、CPUをK6-2あるいはK6-IIIに換装したシステムではセカンドキャッシュを搭載したままでは動作が不安定になることが多く、セカンドキャッシュを取り外すことが基本となっていたのである。しかも、512KBのセカンドキャッシュに至ってはNEC純正品で定価が24,000円もするのだが、その性能向上効果はほとんど体感できないと言われており実際に導入した人が少なかったという事情もあった。 そして肝心なことは、K6-IIIの場合CPU内部に2次キャッシュを256KB内蔵しているため、マザーボード上にあるキャッシュの意味がほとんどなくなってしまうという点にある。一応、当時のAMDによれば、マザーボード上のキャッシュは3次キャッシュとしての位置付けになるため高速化としては無駄じゃないという言い方をしていたと記憶しているが、いかんせん排他制御などの細かい制御をしていない以上、3次キャッシュはおまけ程度と言わざるを得ない。 しかしながら、なぜか手元にアイ・オー・データ製のNE-XAV512Kがあり、しかもK6-IIIに載せ替えてもセカンドキャッシュが動作するPC-9821Xvがあるとなれば、やはりやらねばなるまい!ということで実験をスタートすることにする。 ※NE-XAV512Kの外観。SRAMはNKK N343532LQF-8、TAG RAMはNKK N341256SJ-12。両面に1組ずつ搭載。 3 キャッシュの有無、容量の相違によるメモリアクセスの状況 意外に難しかったのが、セカンドキャッシュの搭載/非搭載、あるいは容量の違いをどうやって視覚化するかという点。性能云々よりもここがこう違う!というところが見えないと、そもそも検討すらできないし。 で、今回はRightMark Memory Analyzerを使用してみた。まずは、K6-III搭載・キャッシュなしの時のBandwidthの値から。 |
K6-IIIのオンチップ1次キャッシュはデータ32KB+コード32KBということで、最も高速なメモリアクセスが確保できるのは32KBまでとなっている。次にオンチップ2次キャッシュが有効な256KBまでが1次キャッシュのおよそ半分の速度で転送できている。これを越えると、メインメモリに直接アクセスするため、グラフは下の方を這うようになっている。 続いて、K6-IIIと256KBの2次キャッシュ(CPUコアから見て3次キャッシュ)を載せた場合のグラフである。 |
ほとんど、キャッシュを搭載していない時と変わらない傾向を示している。CPU内蔵2次キャッシュの容量が256KBでマザーボード上のキャッシュが256KBとなれば、そりゃこういう結果になることは想像できる。 ただ、実は微妙に異なるところがあるのだが、それについては後述する。 最後に、K6-IIIと512KBの2次キャッシュ(CPUコアから見て3次キャッシュ)を載せた場合のグラフである。 |
今度は、3次キャッシュとして容量が512KB確保されていることから、グラフの右下の方が持ち上がっている。とは言っても、その速度の遅さからくるCPU内蔵キャッシュとの差は歴然である。 4 ベンチマークデータ それでは、キャッシュなし・256KB・512KBのそれぞれについてのベンチマークデータを載せておく。 ※キャッシュなし ◎HDBENCH ★ ★ ★ HDBENCH Ver 3.40 beta 6 (C)EP82改/かず ★ ★ ★ M/B Name Processor AMD K6-III+ 530.53MHz[AuthenticAMD family 5 model D step 0] Cache L1_D:[32K] L1_I:[32K] L2:[256K] Name String AMD-K6(tm)-III Processor VideoCard NVIDIA GeForce FX 5700LE Resolution 1024x768 (32Bit color) Memory 260,668 KByte OS Windows 2000 5.0 (Build: 2195) Service Pack 4 Date 2006/10/09 19:28 I-O DATA UIDE-66 PCI IDE Controller ST3160812A 3.AA NEC PD-1 ODX658 2.0M NEC PD-1 ODX658 2.0M PIONEER DVD-ROM DVD-116 1.22 ALL Integer Float MemoryR MemoryW MemoryRW DirectDraw 23417 29616 18338 6546 3017 6541 28 Rectangle Text Ellipse BitBlt Read Write RRead RWrite Drive 29312 20958 3152 341 49684 40299 26453 20035 C:\100MB ◎Superπ 104万桁 9分04秒 ◎3DMark2000 1534 ◎ゆめりあベンチ 640*480最高 3180 ※256KBキャッシュ ◎HDBENCH ★ ★ ★ HDBENCH Ver 3.40 beta 6 (C)EP82改/かず ★ ★ ★ M/B Name Processor AMD K6-III+ 530.53MHz[AuthenticAMD family 5 model D step 0] Cache L1_D:[32K] L1_I:[32K] L2:[256K] Name String AMD-K6(tm)-III Processor VideoCard NVIDIA GeForce FX 5700LE Resolution 1024x768 (32Bit color) Memory 260,668 KByte OS Windows 2000 5.0 (Build: 2195) Service Pack 4 Date 2006/10/09 16:33 I-O DATA UIDE-66 PCI IDE Controller ST3160812A 3.AA NEC PD-1 ODX658 2.0M NEC PD-1 ODX658 2.0M PIONEER DVD-ROM DVD-116 1.22 ALL Integer Float MemoryR MemoryW MemoryRW DirectDraw 23358 29630 18347 6548 3017 6124 28 Rectangle Text Ellipse BitBlt Read Write RRead RWrite Drive 29755 20958 3440 341 49444 40299 25983 20113 C:\100MB ◎Superπ 104万桁 9分15秒 ◎3DMark2000 1603 ◎ゆめりあベンチ 640*480最高 3333 ※512KBキャッシュ ◎HDBENCH ★ ★ ★ HDBENCH Ver 3.40 beta 6 (C)EP82改/かず ★ ★ ★ M/B Name Processor AMD K6-III+ 530.52MHz[AuthenticAMD family 5 model D step 0] Cache L1_D:[32K] L1_I:[32K] L2:[256K] Name String AMD-K6(tm)-III Processor VideoCard NVIDIA GeForce FX 5700LE Resolution 1024x768 (32Bit color) Memory 260,668 KByte OS Windows 2000 5.0 (Build: 2195) Service Pack 4 Date 2006/10/09 08:32 I-O DATA UIDE-66 PCI IDE Controller ST3160812A 3.AA NEC PD-1 ODX658 2.0M NEC PD-1 ODX658 2.0M PIONEER DVD-ROM DVD-116 1.22 ALL Integer Float MemoryR MemoryW MemoryRW DirectDraw 23482 29631 18346 6548 3017 6224 29 Rectangle Text Ellipse BitBlt Read Write RRead RWrite Drive 30000 20979 3456 340 49444 39828 27299 20113 C:\100MB ◎Superπ 104万桁 8分47秒 ◎3DMark2000 1704 ◎ゆめりあベンチ 640*480最高 3465 5 ベンチマークデータについての考察 ということで、キャッシュのない状態から512KBモジュールを載せた状態まで調べてみたわけだがいかがだろうか。 256KBキャッシュモジュール搭載時は、CPU内蔵2次キャッシュと競合するためにHDBENCH及びSuperπで数値が低下する傾向が出ている。ただし、3DMark2000とゆめりあベンチでは明らかにスコアが向上しており、セカンドキャッシュの搭載が有効な部分があることを示している。これについては、「PC-9821Xv20のソフトウェア設定(その2)」でも同様の結果が出ているので参考にして欲しい。 原因としては、CPU内蔵2次キャッシュにおいてヒットしなかった場合の処理において、単純な処理ではマザーボード側セカンドキャッシュモジュール(CPUから見て3次キャッシュ)でもキャッシュにヒットしないためにペナルティによりオーバーヘッドが生じるのに対し、大きなデータを扱っている場合にはCPU内蔵キャッシュにヒットしなくてもマザーボード側セカンドキャッシュモジュールにヒットする場合が出てくるからだと思われる。 上に載せたグラフの右下部分のみを再掲してみるが、256KBキャッシュモジュールを積んでいる場合、キャッシュなしの場合に較べて256KB〜512KBの間がわずかに持ち上がっているのがわかる。 これが、CPU内蔵2次キャッシュにはヒットしないがオンボードキャッシュモジュールにヒットした場合の効果ではないかなと。 |