ひよこカルロ将棋neoで相手番でもCPU負荷がかかる問題について

どうやら、昨日書いた相手番でponderしているらしい問題は、相手番でCPU負荷がかかっていることを言われていたようです。

これは探索を並列化したときに、スレッドの起動時間が惜しいので(0.1秒程度かかりかねない)その時間を節約するために常にスレッドをぶん回しているためです。常にと言いましてもSleep(0)でスリープさせているので実質的にはほぼCPU負荷はかかっていないのですが、タスクマネージャーで見るとわずかにCPU負荷がかかっているように見えるかも知れません。

どうするのがベストなのかは私もよくわかりません。ちなみにBonanzaでは、iterate(探索の開始)でスレッドを生成(tlp_start)しており、思考終了時にスレッドを毎回スレッドを終了(TlpEnd)させてあるようです。

私はやはりスレッドの起動時間が惜しいので相手番ならSleep(1)になるように次のバージョンで修正しようと思います。これならば自分の手番に移ったときに、1ms(0.001秒)でスレッドが待機状態から戻れる(ことが多い)からです。

ひよこカルロ将棋neoの並列化は、かなりアグレッシブで、探索ルート(探索開始ノード)でもsplit(探索を並列化)させています。

YSSの掲示板で書いてあったと思いますが、探索ルートでのsplitは途中で停止させたときに探索結果が不安定になったり、技術的な理由でいろいろ面倒なことがあるので、探索ルートでのsplitはなかなか困難です。Bonanzaでは探索ルートでのsplitはやっていません。(通常の探索用のsearch関数とは別に、探索ルート用としてsearchrという関数が用意されています。)

Bonanzaのように探索を開始してからスレッドを起動させ、しかも探索ルートではsplitしませんから0.1秒程度の間は並列化されていない状態で探索されることになり、1秒将棋などでは結構な損になると私は考えています。

非常にセコい話で大変恐縮ですが、0.1秒すら惜しむのがひよこカルロ将棋neoだとご理解ください。

なんにせよ次のバージョンでCPU負荷がほぼかからないように修正しますのでいましばらくお待ちください。バグ報告ありがとうございました。