速くしたい

I. プログラムの実行を速くする

 1. 数値の選び方

 たいていの場合,十進モードより2進モードのほうが高速です。2進モードが十進モードよりどれだけ速いかはCPUに依存します。十進演算は主としてCPUの整数演算を利用するのに対し,2進演算はCPUの浮動小数点演算を用います。
 複素数の計算は,実部,虚部を分けて2進モードで行うより,複素数モードを利用したほうが高速です。

 2. PRINT文

 (仮称)十進BASICのWindows版はPRINT文の実行結果の表示にWindowsのRichEditコントロールを利用します。
プログラムによっては,実行時間の大部分が画面表示のために取られていることがあります。
PRINT文の実行結果(出力量)が多い場合は,ファイルに出力したほうが効率的です。

例 エラトステネスの篩 (Windows XP上で実行)

画面に表示ファイルに出力
120 DIM s(100000)
125 LET t0=TIME
130 MAT s=ZER
140 FOR i=2 TO 100000
150    IF s(i)=0 THEN
160       PRINT i
170       FOR  j=i^2 TO 100000 STEP i
180          LET s(j)=1
190       NEXT j 
200    END IF
210 NEXT i
215 PRINT TIME-t0
220 END
120 DIM s(100000)
125 LET t0=TIME
130 MAT s=ZER
135 OPEN #1:NAME "eratos.txt"
136 ERASE #1
140 FOR i=2 TO 100000
150    IF s(i)=0 THEN
160       PRINT #1:i
170       FOR  j=i^2 TO 100000 STEP i
180          LET s(j)=1
190       NEXT j 
200    END IF
210 NEXT i
214 CLOSE #1
215 PRINT TIME-t0
220 END
34.4秒0.84秒


ファイルに書き出すほうがおよそ40倍速い。


 3. DATA文

 DATA文に書かれたデータを翻訳するとき,WindowsのRichEditコントロールから行データを読み出すのに時間がかかります。大量のデータがある場合には,DATA文に書かないで,ファイルから入力するようにしてください。


 4. 配列引数

 Full BASICでの配列引数は,副プログラムと絵定義の場合は参照渡し,関数定義の場合は値渡しになります。
 十進BASICの十進モード,十進1000桁モード,有理数モードは配列複写に時間がかかるので,これらのモードでは,関数定義を副プログラムに変更すると高速化できます。
 また,文字列配列は,数値のモードに関係なく,配列複写に時間がかかるので,文字列配列を引数にする場合は,副プログラム化すると高速化します。
 ただし,関数定義を副プログラムに変える場合は,引数の配列を副プログラム内で変更すると,その変更が元の配列に及ぶことに注意してください。関数定義内で引数配列の値を変更している場合は,副プログラムに書き換えることはできません。

5. 文字列処理

 日本語の文字列処理は時間がかかります。バイト文字のみ扱えればよい場合は,各プログラム単位に
OPTION CHARACTER BYTE
を書くと速くなります。

II. 翻訳を速くする

 オプション−自動修正(翻訳時)で自動インデントをしない設定にすると翻訳が早く済みます。

III. BASIC Accelerator

BASIC Acceleratorは,Full BASICのプログラムをObject Pascalのプログラムに翻訳して実行します。
2進モードおよび複素数モードで実行可能なプログラムの多くはBASIC Acceleratorで高速化が可能です。


戻る