Windowsのプロセッサーグループの件

以前、Windowsだと1つのソフトから最大で論理64コアまでしか使えないので、いまどきの44コア88スレッドのようなPCだと全コア使い切れなくてどうすんねんみたいな話を書いたが、Stockfishの最新版で、全コアを使い切れるようなcommitがあった。参考のためURLを貼り付けておく。

続きを読む

Stockfish DD – benchmark ベンチマーク

今回はベンチマーク部です。

UCIプロトコルの拡張コマンドで、”bench”とタイプすると事前に用意してあった局面から探索を開始して、探索終了するまでの時間を計測し、nps(nodes per second=1秒あたりの探索ノード数)などを表示します。

続きを読む

Stockfish DD – SEE (Static Exchange Evaluation) 静的駒交換値

前回、positionクラスについて解説しましたが、position.cppのほうにSEE(Static Exchange Evaluation)の実装があります。

SEEは、局面を評価するときに、駒の取り合いが終わっている静かな局面で評価するために考えられた手法で、ある地点での駒の取り合いを指し手生成などをせずに調べます。

続きを読む

Stockfish DD – position 盤面構造体

今回は盤面構造体であるpositionクラスについて解説します。このpositionクラス、本当によく出来ていて、将棋ソフトに応用する場合でも、よくよく考えていくとこれと同じ構造に辿り着くと思います。

そういう意味では、将棋ソフトを作る場合でも独自に実装するより先に、このpositionクラスのソースコードを読んだほうがいいと思います。

続きを読む

Stockfish DD – thread スレッド

今回はスレッド周りです。

探索を並列化するために並列数だけスレッドの生成が必要です。あと思考時間を監視して、時間になったときに思考を打ち切る判定をするためのスレッドも必要です。

GitHubのC++11用のコードだとスレッド生成はstd::threadを使って実装されています。なお、ここで紹介しているのはC++11用のブランチです。

続きを読む

Stockfish DD – movepick 指し手オーダリング

今回はmove pickerと言って、指し手を段階的に生成して、生成した指し手のなかから1つ一番よさげな指し手を取り出す部分(いわゆる指し手オーダリング)について見ていきます。

killerが2本あったり、なるべくソートが要らないように工夫してあったり、なかなか興味深いです。

続きを読む