しごとメモ
必死にマクロ化とループ展開で20%程度高速化してみたものの納得のいく速度にはならず。
うんうんうなってみたが他社のソースだけにこれ以上いじりようもなく。
仕方ないからメモリ食うのは承知で簡単なフォントキャッシュを作ってみたらあっさり3?10倍はやくなった。。
ここまで効くなら最初からやってりゃよかった。。orz
じぶんようめも。
・ラスタライザに渡すバッファを固定領域からリスト管理された領域に変更。
・つなぎ換えや最後尾検索がしやすいように双方向リストを採用する。
・バッファには呼び出し文字code,fontsize,文字種を添えてハッシュリストにつないでおく。
・ハッシュ関数は単純に(文字code)%(素数)で。実測してみたが意外とバラける。
・再度呼び出されたときにハッシュから辿ってHitしたらビットマップ入りのbufferを渡して先頭につなぎなおす。
・Hitしなかったら新たにbufferを作成して先頭につなぐ。
・この際、規定値(キャッシュ最大数)を超えたら当該ハッシュリストの最後尾のキャッシュを破棄する。
・当該ハッシュリストが空の場合は次のハッシュリストの最後尾を破棄する。
・thread safeな作りではないけど実質シングルタスクなので問題なさげ。たぶんリストのつなぎ換え中にタスクスイッチ入ったりすると悲しいことになりそうなので移植時に注意。
うんうんうなってみたが他社のソースだけにこれ以上いじりようもなく。
仕方ないからメモリ食うのは承知で簡単なフォントキャッシュを作ってみたらあっさり3?10倍はやくなった。。
ここまで効くなら最初からやってりゃよかった。。orz
じぶんようめも。
・ラスタライザに渡すバッファを固定領域からリスト管理された領域に変更。
・つなぎ換えや最後尾検索がしやすいように双方向リストを採用する。
・バッファには呼び出し文字code,fontsize,文字種を添えてハッシュリストにつないでおく。
・ハッシュ関数は単純に(文字code)%(素数)で。実測してみたが意外とバラける。
・再度呼び出されたときにハッシュから辿ってHitしたらビットマップ入りのbufferを渡して先頭につなぎなおす。
・Hitしなかったら新たにbufferを作成して先頭につなぐ。
・この際、規定値(キャッシュ最大数)を超えたら当該ハッシュリストの最後尾のキャッシュを破棄する。
・当該ハッシュリストが空の場合は次のハッシュリストの最後尾を破棄する。
・thread safeな作りではないけど実質シングルタスクなので問題なさげ。たぶんリストのつなぎ換え中にタスクスイッチ入ったりすると悲しいことになりそうなので移植時に注意。
コメント
コメントを投稿