SSブログ

AperyのPGOビルド [コンピュータ将棋]

今更pgoビルドが出来なかった理由がわかったのでメモ

■要因

・合成済み評価値ファイルが読み込めていないと0メモリの合成を始めようとする
・-jオプションをつけてパフォーマンス測定を行うと参照カウンタがぶっ壊れる


■詳細

・Aperyでリリース版相当の最適化を掛けるにはpgoを行う必要がある
 「make pgo」でやってくれる(はず)

・PGOビルドが何をやっているか
 プロファイルありでビルドする
 benchコマンドを実行する
 PGOビルドを行う

・aperyのベースディレクトリがsrcのため、bench実行時に行われる評価値ファイルが読み込まれない
 binの下で動かす前提になっている

・評価値ファイルが読み込まれない時の処理
 ファイルを開く
 読み込めなかったらメモリを0クリアする
 評価値ファイルを合成する

 これは評価値ファイルがない場合の処理なので、使うだけのときはむしろエラーになってほしい

・一般的にはエラーが起きたらboolでfalseでも返せばいいのだが、
 この部分の処理がUSIOptionのコールバックで戻り値無し(void)になっている
 そのため、評価値ファイルが見つからない場合の処理が入っていない
 (もしかすると学習時にはこれでもよいので気にしていないのかもしれない)
 一般ユーザー的にはゼロメモリの合成処理をしようとしてしまって意味が無い。

・解決方法はsrcの下に評価値ファイルを用意する
 mingw環境ではシンボリックリンクで解決できる

 ln -s ../bin/20151105 20151105

 確か、Apery初配布ぐらいのときは読み込まれなくてちゃんと動いていない人が続出したような記憶があるが、この部分を直そうとすると上記のように結構面倒で諦めた記憶がある

 あと学習時は0メモリににしたいと思われるので、LEARNとかMINIMALあたりで切り替わるようにするのが良さそう。

・無事成功すると配布版と同等の速度(NPS)になる

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

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

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。