|
(GPS将棋開発参加記録)
|
優勝はYSSでした。山下さんおめでとうございます。
GPS将棋はというと二次予選敗退でした。今までのコードでは限界が近づいていたので、ちょうど古いものを捨てて新しくする時期だったのですが、mtd(f)をpvsにしつつまともに並列化をするところまでが精一杯で当日を迎えてしまいました。
勝手な憶測ですが、今年の決勝で(そこそこ)勝つには、まともな評価関数/まともな実現確率またはmove ordering/秒間200万節点以上の速度/PVの深さが20以上くらい必要だったでしょうか。来年に向けてそれ以上を実現できるように頑張りたいところです。
他、現在のGPSは、メモリはいつか湯水のように使える日が来るという前提で設計されたと思しきプログラムになっているのですが、高速なcpuを8つも使うと、メモリの方が足りない感じです。不便な独自性を持っていてもしょうがないので普通に省メモリにしたいなと。
ゼミで発表のキャンセルがあった回に、craftyのソースを皆で読みました。2回目なので、今回は並列化部分に的を絞って。
基本的な構造は山下さんがcrafty解析メモに書かれている通りで、treeが探索の状態丸ごと、sharedがglobal変数だと押さえておけばすんなり読めます。一点疑問があって、splitした親が探索を終了して他のsiblingの終了を待っている状態になると他の仕事を助けに行くのですが、その時に自分の子孫に限定していないのが不思議でした。beta cutがほとんど起きなければ、特に性能に影響しないということかな。gpsではthread idを使って限定してみていますが、その前にmove orderingを改善しないと効果のほどは何とも言えません。