2次キャッシュなしのパフォーマンスは?
97/10/01長橋 かずなり
ソフトウェアの開発用のマシンとして組み上げたマシンは、マザーボードにASUS
TX97-XE、AMD K6-233、EDO DRAM 64MBを選んでいた。NTとの組み合わせで整数性能が高いマシンで静かなPCを目指していたので、チップセットに430TXの省電力機能と、K6の性能の高さに満足していた。430TXは物理メモリが64MBまでは高速なPB-SRAM(今となっては高速でもないか)の2次キャッシュにキャッシングを行い、低速なメインメモリをカバーしてくれるが、64MB以上を搭載するとキャッシングはサポートされていない事は承知していた。当初の予定ではMSのVC++を1つとその他のツールを数個起動する事を想定していたので、64MBで十分であると見積もっていたのだが、最近複数個の開発環境を起動する使用方法が増えてしまい64MBのメモリではスワッピングが頻繁になりパフォーマンスに不満を感じるようになってしまったのである。
そこでもう一台のマシンからEDO-RAMを64MBを追加した。確かにスワッピングは減ってソフトの切り替えなどは快適になったのだが、ビルド(プログラムをコンパイル・リンクしてEXEファイルを作る)の速度を測定すると64MB時に3分20秒ほどのビルドが4分を超えるようになってしまったのである。測定しなければよかったのだが、せっかくの高速なAMD
K6が不憫でならない。気にしないようにすればするほど、どうにかしたくなる。メモリ量を倍にして速度が大幅に低下するのである。なんでIntelはこんな制約を付けたんだ。
この状況を改善するにはいくつかの選択肢があった。
1.に関してはマザーボードの出費だけなのでもっとも低コストであるが、TX97-XEの持つ省電力時にCPUファンを停止する機能は捨て難い。AMD640のチップセットなども興味があるが、今のところメルコなどのAT形状のボードしか存在しない。2.はマザーボードとCPUの新規購入となり現状では10万円程度の出費となってしまう。また、OSのインストールのし直しと環境整備が必要になり大掛かりなのも問題だ。3.はメモリの新規購入となるが、TX97-XEをそのまま使えるのでOSのインストールと環境整備は必要なくなる。コスト的には96MBで5万円程度、128MBで7万円強である。EDO-DRAMの最大5-2-2-2アクセスに対して、5-1-1-1アクセスとなるので2次キャッシュ並みのパフォーマンスが期待できる。
こうしてみると3の選択肢が魅力的に感じるのだが結構な出費なので、その効果が無かったときのショックは大きい。そこでいろいろな雑誌を漁ってベンチマークを見てみたが、どの雑誌も64MBまでのベンチマークしか行っていない。しかも結論としては、EDO-DRAMからSD-RAMへ変更すると数パーセントのパフォーマンス向上なので無理にSD-RAMを選択する事はないという結びである。どの雑誌も430TXは64MBまでしかキャッシングしないと触れながらも、64MB以上のメモリベンチマークは行っていないのである。ウーン、こうなってみるとますます気になってしまう。自分でやってしまえ!
ベンチマーク環境
マザーボードはASUS TX97-XE、CPUはAMD K6-233をベースクロック66MHzの3.5倍の233MHzの正規の使用方法とベースクロック75MHzの3倍である225MHz、メモリはEDOは32MBX2、16MBX2の96MB構成とSD-RAM64MB+32MBの96MB構成を切り替えて行った。DOSのベンチマークはMS-DOS Ver6.2、WindowsのベンチマークはWindows NT 4.0上で行った。75MHzの3.5倍などのオーバークロックは安定動作しないので行っていない。
まずはWinBench 96のCPUmarkである。
いずれもEDOの64MBを96MBに増設すると20%〜25%以上の激しいパフォーマンスの落ち込みがある事が分かる。スワッピングによるパフォーマンス低下に比べればたいした事はないが、それでもメモリの増設でこれだけのパフォーマンス低下は損した気分だ。64MB時のEDOとSD-RAMの比較はどうであろう。これは雑誌などのベンチマーク同様SD-RAMのほうが2〜5%程度のパフォーマンスの向上となる。しかし、積極的にSD-RAMを選ぶ理由にはならないだろう。SD-RAMを96MBに増設した場合は、EDOの64から96MBの増設ほどのパフォーマンス低下は見られない。2〜9%程度のパフォーマンス低下にとどまる。EDO
64MBと比べても4〜5%程度のパフォーマンス低下である。SD-RAMが2次キャッシュ並みに動作している事がわかる。
次はDOS上のベンチマークの結果である。
上図ではベースクロック75MHzと66MHzの差が大きく見えるがスケールの開始が0からではなく、数値付近が引き伸ばされているからそう見えるだけであって、実際の差は僅差である事に注意していただきたい。このベンチマークではどの条件でもたいしたパフォーマンスの差は表れない。想像ではあるがベンチマークプログラムのメモリアクセス自体がCPU内の1次キャッシュ内に収まってしまってしまって差が表れないのかもしれない。この場合はベンチマークとしてはあまり意味を成していない。実際のゲームなどでは差が表れるかもしれないので機会があればQUAKEベンチでもとったほうが良さそうだ。
最後のベンチマークはプログラムのコンパイルリンクである。これはART Viewer LiteのVer2.0のBeta版をプリコンパイルヘッダーを使用せずにMS
VC++ Ver4.2でビルドし、ビルドが終了するまでの時間(秒)である。
今までのグラフと異なり、バーが短いほうがパフォーマンスが高い事に注意されたい。EDOを64MBから96MBに増設を行うと40秒以上、20%程度のパフォーマンス低下が見られる。コンパイルリンクというとCPUを酷使するように考えるかもしれないがVC++の場合はテンポラリファイルを多く生成するためにディスクアクセスも時間比で10〜15%程度発生する。これを考慮に入れればCPUmarkのベンチマークの結果をほぼ反映しているといえる。SD-RAMでは増設により4%程度のパフォーマンス低下が、EDO 64MBと比較して1%〜3%程度の低下にとどまる。CPUmarkのEDO64MBとSD−RAM96MBの4%〜5%の低下よりも差が小さい事から想像すると、CPUmarkが2次キャッシュの容量である512KBでキャッシュヒットが多かったのに対して、コンパイルリンクのケースでは2次キャッシュのキャッシュミスが多かった事が考えられる。
総評
2次キャッシュが有効である限り、EDOを選択しようとSD-RAMを選択しようと大きな差はない事を再確認した。しかし、期待通り2次キャッシュの効かない64MB超の領域ではEDOとSD-RAMの差は顕著であった。EDOで2次キャッシュの効かない場合の20数%程度のパフォーマンス低下と、2次キャッシュなしながらも数%程度のパフォーマンス低下のSD-RAMのどちらを選択するかはコストとシステム移行の手間を考えてバランスの良いものを取れば良いだろう。ベースクロックに関してはCPUの動作クロックが少しくらい低くなろうと、常にベースクロック高いほうがパフォーマンスの良い結果が得られている。75MHzの動作クロックは保証されるものではないが、個人の責任で試してみるのも悪くないだろう。ちなみに私の環境ではどちらも非常に安定してNT上でソフトウェアの開発を行える。
参考
ここのベンチマークで使用したグラフの作成方法を紹介しておく。MS Accessに1つのテーブルを作成し、ベンチマーク結果を格納する。そのデータをもとにMS-Graphでグラフを作成した。その後、スクリーンイメージをビットマップでPainBrushに貼り付けて保存し、ART Streamerを使用して3bit(8色)のGIFに変換しファイルサイズを6KB程度に押さえている。