AMD CodeAnalystで、将棋ソフトの実行プロファイル取得
以前、何回かやってましたが、再びやってみました。
日記に使い方を書いているので助かりました。
適当にプロジェクト名をつけて、exeファイルとしてshogi.exeを指定して、実行するとまずアプリケーション毎のシェアの割合がでるので、
その中で、shogi.exeをダブルクリックすると、中の関数レベルの実行時間の割合がでる。
前もって、/Ziオプションでデバッグ情報ありでコンパイルしておく必要はあります。(VC2005Expressの場合)
調べた結果は
Symbol | Total% | コメント |
---|---|---|
makeAttackMoves | 21.40 | 静止探索用手生成 |
isMate | 5.55 | 王手されてるか? |
gainMinMax | 2.64 | 静止探索(SEEもどき) |
reseteKiki | 2.08 | 利き消す |
setKiki | 2.03 | 利きつける |
scanA2 | 1.82 | 静止探索手生成内部 |
move | 1.40 | 一手打つ |
makeMoves0 | 1.19 | 手生成 |
makeMoves02 | 1.07 | 手生成 |
eval | 1.02 | 評価関数 |
setJumpKiki | 0.88 | 飛び利き |
fastzero_l | 0.87 | これなに? |
KingDefense | 0.85 | 王の守り |
undoMateFast | 0.72 | 戻す(検査用) |
moveMateFast | 0.71 | 打つ(検査用) |
undo | 0.68 | 戻す |
scan | 0.59 | 手生成スキャン |
getEV | 0.41 | 統計 |
scan2 | 0.33 | 静止探索生成スキャン |
setJumpKikiS | 0.31 | 飛び利き先手 |
negaMaxQui2 | 0.29 | 静止探索 |
setJumpKikiE | 0.28 | 飛び利き後手 |
modifyByThreat | 0.28 | 脅威 |
ReOrder | 0.28 | 手の並び替え |
つうわけで、静止探索用に、取る手を生成している部分の割り合いが突出して多いですね(^^;
この関数は時間をかけてチューニングする価値あり。
isMate
gainMinMax
reseteKiki
setKiki
scanA2
2%前後のこのへんもいじってみる価値ありかなあ。
意外に、差分での利きのセット、リセットは時間を食ってるみたいで。