メニュータイトルPC98-NX改造記録PC-98改造記録ThinkPad535活用講座WindowsCE活用講座雑感


メモリアクセスの高速化

(PCIレジスタの書き換え)
1 概説

 よく雑誌を見ていると、CPUの話題とともにPCIチップセットについての記事が掲載されていることに気がつくと思います。これは、いくらCPUが新しくなっても、それを活かすPCIチップセットが無ければその能力を100%発揮させることができないからです。だからこそ、マザーボードを選ぶときにはPCIチップセットに気を使うわけですね。
 さて、このチップセットですがThinkPad535-EF8には、HDDの高速化に書いたとおり、インテルの82437MXと82371FBが使われています。このうち、82437MXがCPU-メモリ間の速度やCPUの動作など機能の中心部分を受け持っています。
 メーカーは設計の段階でCPUとチップセット、あるいはその周辺回路とのタイミングを、動作が常に正常になるように設定します。そのため、多少の余裕を持った設定(マージン)がなされます。これは、各部品ごとに動作特性が違ったりすることや、また実際の動作時の不安定要素を吸収するためです。いわゆるクロックアップというのもこのマージンを食いつぶして動作限界に近づける作業なわけです。
 ここでは、このクロックアップに相当することをソフトウェアで行います。CPU-メモリ間のデータ転送速度の向上を狙って、メモリ転送タイミングの高速化、転送能力の向上などを行います。
2 準備

 まずは、チップセットのデータを操作することのできるソフトを入手する必要があります。私が使用しているのはカルビ氏作INTELSATというフリーウェアのソフトです。これは直接データを書き換えることもできますし、また16進データを見ながらエディットすることもできる高機能なものです。ここからダウンロードすることができます。
※注意 ここからダウンロードできるのはPC/AT互換機(DOS/V機)用です。PC-98シリーズには別途PC-98シリーズ対応のものを使用してください。
 私は、もう一つNBTUNE(Softhouse333氏作)というフリーウェアを使っています。これは現在の設定を簡単に確認できるので、そのために使用しています(後述の設定のところでも使用)。なお、これらのソフトはNIFTY-Serveなどから入手してください。

 ソフトウェアを入手したら、ドキュメントファイルにしっかりと目を通してください。使用条件や注意事項が書いてありますので、それに従えない場合は使用を中止してください。また、使用方法も書いてありますので、よくよく読みましょう。
3 初期設定

 最初に、標準状態でのチップセットの設定を確認してみましょう。ここではNBTUNEの結果を示します。
NBTUNE表示1
 このうち設定を変更できそうなのが、

(1)CPU to PCI Burst Transfer
(2)Refresh Rate
(3)Read Burst Timing
(4)Write Burst Timing
(5)RAS to CAS Delay
(6)RAS Precharge
(7)Refresh RAS Assertion

です。
 簡単に説明すると、(1)がCPUとPCI間のバースト転送についての設定、(2)(5)(6)(7)がメモリのリフレッシュ間隔やタイミング、(3)(4)がCPPU-メモリ間のバースト転送についての設定になります。基本的には転送タイミングはなるべく速く、リフレッシュはなるべくゆっくり設定することになります。
4 設定変更

 いよいよ設定を変更しましょう。まずは、私が現在設定している数値を示します(メモリサイズを除く)。
NBTUNE表示2
 Refresh Rate以外は、設定できる最速になっていると思います。たぶん、他のマシンでも転送タイミングはこれと同じ設定でいけるかと思います。
 問題はRefresh Rateです。クロックアップをしているせいか、これ以上間隔を開けるとエラーが発生します。ま、もう1タイミング遅くしても通常の使用には問題がないのですが、耐久試験(後述)を行うとエラーが起きます。これではぎりぎりの動作だと考えられますので、多少のマージンを設定するためにこのタイミングにしています。

 それでは、実際の設定画面をちょっと紹介しましょう。
INTELSAT表示
 コマンドライン(Windows上のDOSプロンプトでも可)からintelsat /editで起動すると、上のような画面になります。右端にそのアドレスのビットごとの説明がありますので、参考にしながら設定を変更します。変更した時点で実際にデータが書き変わりますので、ESCキーでコマンドラインに戻りましょう。

 ところで、「こんな設定自分ではわからない!」という方のために、バッチファイルでの設定方法を紹介しましょう。

INTELSATの実行ファイルをパスの通ったディレクトリに置いた上で、AUTOEXEC.BATファイルの終わりに、
intelsat 50 48
intelsat 57 02
intelsat 58 d5
という3行を付け加えます。1行目が(1)CPU to PCI Burst Transferの設定、2行目が(2)Refresh Rateの設定、3行目がそれ以降の設定項目です。私のAUTOEXEC.BATはこんな感じです
 ちゃんと動作すればいいですが、エラーが出る場合には1行ずつ動作させて、エラーが出る設定の行を特定して外してしまいましょう
5 動作確認

 設定が完了したら、安定して動作するか確認しましょう。こういうときのためのパソコン耐久試験用プログラム(というわけではないんですが)として有名なのが、東京大学金田研究室の「Super Pi」(32bitWindows上で動作)です。単純に円周率を計算するプログラムですが、これが動作中はCPUリソースを100%食い尽くし、数秒おきに約1MBのデータをHDDに読み書きするという過酷なプログラムです。実際に動作中の状況をシステムモニタの図で示しておきます(表示更新は1秒間隔)。
システムモニタ
 カーネルのプロセッサ使用率が、SuperPi実行後は100%に張り付いたままになり、数秒おきに巨大なデータ転送が行われているのがわかるかと思います。これだけCPUをぶんまわしますので、放熱が不足していたり、タイミングがちょっとでもずれるとすぐにエラーを出して止まってくれます。1677万桁の計算が止まらずに行われるようであれば、そのシステムは十分安定して動作していると考えていいと思います。私のマシンはこの耐久テストに耐え抜き、12時間51分14秒でクリアしました。
 また、このSuperPiはベンチマークとしても有名で、いかにして速く計算させるかということに命を懸けている人もいます。このプログラム、結構体感に近いベンチマークだと思います。画像表示関係だけはわかりませんが、CPU、メモリ、HDDが実使用に近い感じで計算結果に影響しますので、SuperPiで高速化が確認できれば、実使用でもそれなりに速く感じると思います。ちなみに、チップセットのレジスタをいじった結果、104万桁での計算速度が22分55秒→19分56秒に短縮されました。
(c)1998 WANI3/わくわくWANILAND ロゴ小