やねうら王でも、評価関数の計算時間は馬鹿にならなくて、NNUE型の評価関数でもCPU時間の40%~50%は評価関数の計算に費やされている。評価関数は前局面からの差分計算しているものの、それでもわりと重たい処理だ。(他の部分がさまざまな最適化によって、ほとんど時間を費やさなくなっているとも言える。)
そこで一度計算した評価値を記憶しておいて(cacheしておいて)、再利用すればこの計算を端折れる。
評価値をcacheするためのテーブルとして、Evaluate Hash Table(EvalHash、eHashなどと略される)の仕組みがある。
やねうら王では、デフォルトで128MBを確保している。これは、『Apery』のデフォルト値がそうなっていたためで、また、大きくするとメモリが足りなくて起動しないパソコンがあったりして、それについて問い合わせが来ても面倒なので、とりあえず起動はするようにしておかなければならないという考えのもとにそのようにしていた。
ところが、128MBだと少し小さいのではないかというのが実験的にわかっている。128MBよりは1024MB(1GB)ほど確保したほうが5%ぐらいnpsが高そうである。(レーティングで言うとR10ぐらいの差)
※ 『Silent Majority』は、AVX2用の実行ファイルは1024MB(1GB)がデフォルトになっているのだが、そのせいで動かないPCがあったりしたが、数年前の時点でこれを1024MBにしているのはさすがのチューニングと言わざるを得ない。
1024MB以上確保するとベンチマーク上は(nps的には)スローダウンするようであるものの、実戦だとponder(相手番で思考すること)などで思考したときの局面を再度探索することは多々あるので、EvalHashはもう少し大きいほうが良いのではないかという気もしている。(計測するのにメモリが大量に必要なので、そのように大量に確保して並列対局させる環境を私は持ち合わせていないため、計測はできてない。)
とりあえず、やねうら王V4.87で、EvalHashというエンジンオプションを追加して、この値をエンジン設定から変更できるようにした。デフォルトは128[MB]である。
好きな値に変更できるので、1024[MB]などを試してみて欲しい。
EvalHash「速くなったやろ?(ドヤァ」
_人人人人人人人人人_
> 威張るハッシュ <
 ̄ Y^Y^Y^Y^Y^Y^Y^Y ̄
それ考えるのに何時間要したのだ…。(´ω`)
ちょっと面白いのが憎らしいのだが。
>1024MB以上確保するとベンチマーク上は(nps的には)スローダウンする
npsの伸び率が鈍化するという意味ですよね
npsがダウンとも読みとれたので念のため
いえ、npsがダウンです…。L3などのメモリcacheの関係かと…。
返信ありがとうございます。
環境によってベストな値がかわりそうなので色々試してみます