プチコンで遊ぼう! (はてなブログ版)

任天堂3DSのプチコンで遊ぼう! [twitter:@eida_s]

はてなダイアリーから移行しました。 はてなダイアリーのURLを開いても自動的にこちらにリダイレクトされますのでご了承ください。

ほしけんさんのプチコン漢字ライブラリの高速化を試みた

ほしけんさんのプチコン漢字ライブラリ(KNJLIB)の高速化を試みてみました。

ほしけんさんのプチコン漢字ライブラリ(http://wiki.hosiken.jp/petc3gou/?Toukou%2F%A5%D7%A5%C1%A5%B3%A5%F3%B4%C1%BB%FA%A5%E9%A5%A4%A5%D6%A5%E9%A5%EA)
はプログラムサイズと高速性のバランスがよく、普通の用途には十分な処理速度が出ます。
特に、New3DSではほとんど問題にならないと言っていいでしょう。
私の場合、特殊用途(リアルタイム進行するクイズゲーム)で使うために速度的な制約が厳しいため、プチコン漢字ライブラリの高速化を試みてみました。

キー: 432XE37D

高速化のために改造した点は以下の3点です。
・文字テーブルの検索を、INSTRの代わりに最初に展開した参照表を使うようにした。
・フォントのビットマップをキャッシュするようにした。
・ビットマップテーブルを探す時の処理を若干書き直した。
これにより、オリジナル版に比べて大体5割ほど高速化されていると思います。キャッシュが効く状況ではさらに改善されます。

また、まとめwikiでスーさんが報告されていた、変数の宣言もれなども修正に入れています。


この改造版(「KNJLIB_MOD1」)では、巨大な配列を使いまくっているので、オリジナル版に比べて最低でも1メガバイト程度メモリを余計に消費します。
メモリの制約が厳しいプログラムの場合には使うのはむずかしいかもしれません。
なお、キャッシュサイズはバイト数ではなく、キャッシュする文字数(初期設定では300文字分)で設定するようになっているため、大きなフォントを使うとより大きくメモリを消費します。

オリジナル版のKNJLIBをそのまま置き換えてもほぼ問題なく動作すると思います。
少なくとも、オリジナル版に同梱されているサンプル3種類については、私が検証できる範囲での問題はみられませんでした。

配布時のファイル名は「KNJLIB_MOD1」となっていますので、名前を「KNJLIB」にしてオリジナル版と差し替えることで動作します。


この改造版を使うメリットとデメリットは以下のとおりです。

メリット
・Old3DSの場合、目に見えて高速化する

デメリット
・メモリを非常に多く使う
・初期化により多く時間がかかる
・プログラムの保守性が悪くなっている
New3DSだともともと速いので違いがわりづらい