やねうら王のKPPT/KPP_KKPT型の評価関数には、EvalShareという、複数プロセス間で評価関数の読み込まれたメモリを共有するオプションがあります。(Windows版限定の機能)
EvalShareオプションを実装した直後、デフォルトではこのオプションをオンにしていたのですが、やねうら王は、EvalDirが同じだと同じ評価関数であると見做すため、EvalDirをデフォルトのまま”eval”のような感じで運用している人は、2つの評価関数を使って自己対局させているつもりが、同じ評価関数を使っていたというようなトラブルがあり、このオプションはデフォルトでオフにしたという経緯があります。
思考エンジンの配置フォルダの上位フォルダに”eval”というようなフォルダを作成して、EvalDirオプションには、”../eval/tanuki-2019″のようにそれぞれのエンジンがそれぞれの評価関数を参照しながら使うような運用をしていることを想定していたのですが、皆さん、どうもそうはしてらっしゃらないようで…(´ω`)
それで、C++の話になってしまうんですけど、Windows環境の場合、main関数の引数として”c:\engine\YaneuraOu.exe”のように起動フォルダ名つきで実行されたファイル名が入っているはずなので、これからEvlDirで指定されているフォルダのフルパス名を生成して、それをMMF(Memory Mapped File)の名前とすることで、評価関数ファイルを配置しているフォルダが一致した時のみ評価関数のメモリ共有が有効になるように変更しました。
これならもう事故らない…はず。
なので、次バージョン(V4.90)からEvalShareオプションはデフォルトでオンに変更します。