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)になる
■要因
・合成済み評価値ファイルが読み込めていないと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)になる
コメント 0