将棋ソフトってどんな高速化の工夫がされているの?
近年の将棋ソフトは高速化のための命令がたくさんあって、選ぶのが面倒ですね。説明しておかなければ混乱する人も多いでしょうから、説明しておきます。
高速化とはなんだ
高速化とは、将棋ソフトの世界では基本的に、探索の速度の高速化のことをいいます。
探索とはなんです?
将棋ソフトはまず、その局面で可能となる指し手を生成します。そして、その局面を評価関数に当てはめて
(評価関数は名前の通り、関数です。だから変数として現在の局面の情報を取り込んで、返り値が評価値となるわけです。)
評価値をその局面につけます。
その局面についた評価値をもとに評価を出します。
でも、検討とかを長い時間続けると、評価値が変わっていくよ?
そうです。それは何故かと言うと、実際に返しているのはその局面の評価値ではないからです。
将棋所とかで出る評価値は何なのか
先程、探索すると言いました。探索する時、生成した合法手(指し手)を羅列していきます。
そして、羅列が終わると、その局面を評価関数に投げて、値が帰ってくるとそれを保管します。
つまり、たくさん生成した指し手があって、探索してそれが増えていくと、その先の指し手を探索するようになっていくのです。
先の指し手をどんどん生成して、未来の局面の評価値を返しているから、評価値がどんどん変わるんだ。
じゃあ、高速化ってなんなの?
それが今日の本題だ。ここまでの話を聞けばこれからの話がスムーズに進められるようになっているはずだから、よく聞いてくれ。
用語の解説をするよ
わからなかったらググってください
OS
オペレーションシステム
Windows、Mac,Linuxとかのこと。パソコンを動かす基本のソフトだ。それ自体がGUIだね。コンピュータの動作は内部では2進数しか使っていないけれど、それを変換して見えるようにしてくれている。デスクトップとかを表示したり、ファイルをドラックで移動したりするのもこれのお陰でできることなんだ。
x86,x64
32bit,64bitのことだ。詳しくは面倒だから言わないけど、そのパソコンに入っているOSのよって、32bitだったり64bitだったりする。それによって動かないものもある。詳しくはぐぐってくれ。x86と書いてあったら32bit用、x64と書いてあったら64bit用だ。
AVX,SSE
これだよ今回話したかったのは。これに混乱する人が多かったんじゃないかと思ってこれを作ったわけです。
どちらも、高速化のためにプログラマの方が使うCPU拡張命令です。え?日本語を使えって?ググってくれれば日本語だってよく分かるはずですよ。
AVXはインテル社の4世代以降のCPUに与えられた拡張命令です。開発コードhaswell以降です。え?わからない?
貴方のパソコンのCPUを調べて下さい。とりあえず2013年くらいに買ったものは怪しいから。対応してないかもだから。調べて。
SSEは多くのCPUが対応しているから、そう書いてあるのだったら大体大丈夫だよ。AVXより古い命令だから。一応、
AVX-SSE4.2-SSE4-SSE2
みたいな順番に、左から新しいよ。
AMDのCPU?対応しているのもあるから調べて。
調べるのが面倒な人は古いのを選んでおけば大体動くから安心して。人間がソフトと将棋を指して気がつく程には差がないから。
高速化のためにプログラマは拡張命令を使います。でも、CPUによっては、古いとその命令が使えないので動かない場合があるのです。
注意
スマホだとCPU(演算装置)がべつものだから動かないよ。SSEなしのやつを選べばいいんだよ。