SSブログ
English Version

ポケコン(PC-G850V)でGAME言語(その4)GAME高速化 [ポケコン]

 前回記事の「ポケコン(PC-G850V)でGAME言語(その3)GAMEコンパイラ」の最後の方に書いたように、ベンチマーク測定の結果、GAMEコンパイラはそれなりの速度ですがインタプリタはかなり遅い結果でした。

 気になったので原因を調査しました。結果、やはりキーセンス処理で時間が掛かっていたようです。

 今回のキーセンスセンス処理ではG850のIOCS(BIOS)処理であるリアルタイムキー入力(0BE53H)を使用しています。
 ネット情報ではIOCSのコールの中ではキーマトリックス回路にセンスビットを出力する度に0.2msのソフトタイマを実行しているようです。

 また、キー入力があった(Cy:1)場合に、Aレジスタで帰ってくるキーマトリックスデータを自前の処理でデコードし有効なキーが押されているか確認しています。この処理も通常のキー入力バッファ内のキャラクタ数を確認するような処理よりは重くなります(でもこの処理はキーが押されている間だけなので影響は少ない)。

 一方、GAMEインタプリタではキーセンス処理をコールするところが次の2ヶ所ありました。
  1. ソースのステートメント解析部
    予期せぬループ状態になった場合にBREAKできるように、ステートメントを解析する度にキーセンス処理をコールしている。
  2. 文字列出力部
    文字列出力後にキーセンス処理をコールしている。

 後者はあまり影響ないのですが、前者のコールは頻繁に発生するので前述のような今回の実装では実行速度に大きな影響が出ていました。
(因みにGAMEコンパイラは高速化のために後者だけコールしています)

 対策として上記 i のケースでのキーセンス処理を間引いてコールすることにしました。
 間引き数と実行時間の関係は下記の通りです。

No.コール比率ベンチマーク実行時間[sec]
1/1553(9m13s)
1/16113(1m53s)
1/3298(1m38s)
1/6491(1m31s)
1/12887(1m27s)
1/25685(1m25s)


 この結果から間引き率は1/64としました。

★2010/01/17 追記 {
 上表に1/128と1/256を追記。256ではブレークキー('TAB')の感度低下が感じられた。
 Ver0.02dで1/128に変更しました。
}

 今回高速化したGAME言語のインタプリタは「ポケコン(PC-G850V)でGAME言語」のページからダウンロードできます。

 今回の変更でバージョンを 0.02c としました。

 また、ベンチマーク結果は「MSX-DOS上でのGAME言語のベンチマーク」の記事にまとめています。

GAME言語起動画面


[TOP] [ 前へ ] 連載記事 [ 次へ ]

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。