UrJTAGをプロファイルしてみた.
そんなこんなでプロファイル開始.改めてソースコードを読み返してみる.辞書検索がことごとくリニアサーチであることに気がついて目眩がする.
律儀に malloc/free/realloc を繰り返す構造に頭痛がしてくる.
とりあえず,cx_cmd_t の確保でメモリプールを作ってみたら,プロファイラ上では一気に数値が改善された.やっほー.ちょっとした修正でみるみる改善されるので,リファクタリングのし甲斐がある.
でも,ボトルネックの大半はどうやらアプリよりも下の層.
どうやら実行時のリソースの状態に依存して,実行時間が大きくブレるらしい.先日の計測では 10240バイト書込み時に 15.5秒(σ=0.388)だったものが,今日は同じバイナリを使って 17.7秒(σ=1.017).
この程度の書込み量で2秒も違うとは….
リファクタリングはする甲斐があるけれども,スピードアップに繋がらないのであれば,本家に採り込んでもらえる可能性は低いかもしれないなぁ….
改善方針
うーむ.困った.
ファームは送り込みたくない.環境毎にファームが要るというのが,VDSP++やICEbearの欠点だと思っているので.
しかし,この速度差は堪え難い.堪え難い.
読み込みだけEMUIR/EMUDATを使うというのは思いつく.でも,連続した領域の読み書きでなければ,EMUIR/EMUDATのメリットは薄くなる.書き換えても現状と変わらないか,下手すると遅くなるかも.…それでも,一応は検討してみるか……僅かな希望だけれども.