マンデルブロ集合の表示プログラム

OSI 8K BASICの処理速度を確認するため、\ref{sec:benchmark-1}節と同様に、マンデルブロ集合の表示プログラムでベンチマークテストを行ってみました。

6502-COREに移植したOSI-BASICには、実行時間の計測機能が追加されています。

  • UPTIME()はボードがコールドスタートしてからの経過時間を秒で返します。引数は意味を持ちません。

ここでは、「計時機能を追加したマンデルブロ集合の表示プログラム」に示すようにプログラムの最初と最後の部分に、計時用のコードを追加して実行時間を計測してみましょう。

計時機能を追加したマンデルブロ集合の表示プログラム

実行結果は「マンデルブロ集合の表示プログラム:2MHzでの実行結果」のようになり、実行時間は3分30秒(2MHz)となりました。

マンデルブロ集合の表示プログラム:2MHzでの実行結果

OSI BASIC の有効桁数6桁版と9桁版はそれぞれ、問題なくマンデルブロ集合の表示プログラムを実行することができました。プログラムの読み込みや実行法は、APPLE II BASICと同様ですのでここでは割愛して、処理時間のみを記載します。

  • OSI BASIC の有効桁数6桁版では、クロックが2MHzの設定で、3分30秒で実行できました。
    • また、動作保証はしていませんが、クロックが4MHzの設定で、1分44秒で実行できました。
  • OSI BASIC の有効桁数9桁版では、クロックが2MHzの設定で、4分02秒で実行できました。
    • また、動作保証はしていませんが、クロックが4MHzの設定で、2分01秒で実行できました。

「はりせん」さんの以下のWEBページの表を見ると、Grant氏の6桁版とW65C02の2MHzの組み合わせで3分24秒という結果です。

6502-COREでの実行が少し遅いようですが、計時用のNMIタイマ割り込みの処理がオーバーヘッドになっているものと考えられます。

有効桁数9桁版の実行時間は、APPLE II BASICと同じですね。

実は、APPLE II BASICも\ref{sec:osi-basic-src}節に示したソースプログラムからOSI BASICと同様に作成できる(実際に作成しようとするとは機種依存部分の切り出しなどをしないといけないので、結構大変です。)ので、計算時間がほぼ等しいというのは妥当なところでしょう。

有効桁数9桁版は、有効桁数6桁版に比べると84%程度の処理速度ですが、この程度の速度の違いであれば、有効桁数9桁版はとても魅力的ですね。