将棋ソフトのベンチマーク
異なるスペックのPC上の将棋ソフトがCPUによりどのように棋力が違うかは将棋ソフトに特化したベンチマークによりかなり詳しく知ることができます。このサイトでは2台のPC(CPU1: Intel Xeon E3-1245 3.3GHz, CPU2: Intel Core i7 6700 , 3.4GHz, 共に4コア 8スレッド RAM: 16GB)でレーティングを測っていますが、双方1手5秒で測っているもののNPSである程度の差があるというのは経験的に知っていて対局条件にどれくらい影響を与えるのか気になっていました。また、このサイトで行っている1手5秒の対局とこのページを読まれている皆さんのPCが1手何秒に対応するのか、また、私のテストPCと皆さんのPCとではどの程度NPS(=ソフトの強さ)が違うのかということは、ベンチマークを走らせればある程度評価できます。
ベンチマークが行える将棋ソフトとして私が確認できたのは(1) YSS (2) GPSfish (GPSshogi) (3) Usapyon2 (4) YaneuraOuファミリーです。Aperyと技巧は私の技量ではベンチマークのコマンドがどうなっているのかすぐにはわかりませんでした。(1)についてはYSSのサイトにベンチマークソフトが公開されていますのでコマンドプロンプト上で動かしテストを何秒で終わらせることができるかで強さを判断します。(2,3,4)についてはベンチマーク専用のソフトはありませんが、それぞれのソフトをオプションをつけてコマンドプロンプトで起動することにより一秒あたりに読む手数(node/second)が表示されます。
私の所有しているWindows PCは三台あり、そのうち2台はこのサイトで使っているテストPC (A) intel core i7-6700 (4コア8スレ) 3.4GHz (B) intel Xeon E31245 3.3GHz (4コア8スレ)です。三台目は外出時に用いているノートPC (C) intel Core i5-4200U 1.6GHz (2コア4スレ)です。これらを今持っているデータで比較することにいたします。追記 (8/13) : テスト機(A)のCPUは第四回電王戦トーナメントと同一のものです。私のとったデータはお役に立つかもしれません。
(1) YSS
2000年位から使われている最も古くからあるもので、チェスのベンチマーク(Crafty)と同じくCPUベンチマークに近いものだと思います。YSS開発者の山下さんがメンテされていてかなり最近のCPUまでデータが集められています。私のPCのスコアは深さ8のテストで(コマンドはyss_ux.exe -8)
(A) 4.2秒 (B) 5.8秒 (C) 6.2秒
となりました。思ったより(A)と(B)の差が開き、ノートパソコンの(C)が(B)に近い値となりました。YSSのサイトにあるデータと比べると(A)はオーバークロックがないものとしてはかなり優秀、(B,C)はかなり前のCPU相当で身分相応?でした。YSSによるベンチマークはCPUコア一つの性能評価に特化しているので、おそれ多いのですがマルチスレッドが標準化した最近のソフトの性能調査のためには少し物足りないと思います。
その他のソフトのベンチマークは一秒間に読む手数(node per second)で表示されます。基本的には適当な数の盤面を与えて、そこから与えられた深さまで手を読む時間でCPUを測っています。このブログでも何度か触れてきましたがnode数の違いがx倍だったとすると、レーティングの違いは500*Log(x)のように大まかに評価できますので以下でレーティング差を述べているところではこの式を用いて概算しています。
(2) GPSFish
GPS将棋は伝統的にbenchマーク計測ができるようですが、ここではとりあえず一番新しいGPSFish_minimalで調べた値を書きます。調べる方法はコマンドプロンプトを立ち上げたうえで、GPSFish.exeが入っているフォルダまで移動し、オプション付きでGPSFishをコマンドで立ち上げます(将棋所やShogiiguiでないのがちょっと使いにくいところ)。例えば
gpsfish.exe bench 512 4 12 default depth
ここで512はHashメモリ(MB単位)、4はスレッド数、12は思考深度を表します。1,2,4スレなど調べたければ4の部分の数字を変えます。GPSFish_minimalでは17面の盤面を評価しています。調べるのに要する時間は約1分で結果は
(A) 1スレ:247 (1.1) 2スレ: 401 (2.4) 4スレ:570 (11.7)
(B) 1スレ:145 (0.4) 2スレ:230 (3.9) 4スレ:292 (6.1)
(C) 1スレ:149 (5.5) 2スレ: 229 (7.2)
(単位はkNode/second, カッコ内は5回測った時の標準誤差)となりました。GPSFishはhyperthreadを活用するようにできてないので(A, B)の8スレ、(C)の4スレはデータを出していません。このデータいろいろ思うところがあって、デスクトップの(B)がノートの(C)とほぼ同じ値であるのがかなりおかしい(CPU周波数はだいぶ違うので) しかしYSSのベンチマークとは一致した結果ともいえる。(A)と(B)の差が思ったより大きいのはショックでした。GPSFishはずっと前からあるソフトなので比較的古いCPUでも大丈夫だと考え主に(B)で調査をしていましたが、新しいCPUの方が力を発揮する傾向があるというのはベンチマークをして初めて知りました。
(3) Usapyon2
以前開発者の池さんよりコマンドの存在を教えていただきました。(追記8/4)このコマンドはなのはfamily (nanoha mini, nano, Saya-chan, Usapyon2)に共通するコマンドということです。ここではUsapyon2を調べます。lazy smpに関する以前のブログ記事で池氏が書かれていたように、GPSfishと同様にコマンドプロンプトでソフトの入っているフォルダまで移動した後でオプション付きでソフトを立ち上げます。例えば
usapyon2.exe bench 256 1 9
このベンチマークコマンドはNanohaファミリ(Nanoha mini, nano, Saya-chan)で共通に
GPSfishと似ていますが256がHashメモリ、1がスレッド数、9が思考深度で、池氏によると深度は9位が丁度良いということです。テストする盤面数は16面です。usapyon2のWCSC26版はAVX対応版(usapyon2avx)と汎用版(usapyon2)の2種類が用意されています。調べる時間は約30秒くらいです。以下各CPUでの計測値を並べると
(A)
(B)
(C)
ここでU2は汎用版、U2AはAVX2対応版を表しています。また、そのあとに書いてある数字はスレッド数、数値の1行目はkNPS, 2行目は標準偏差です。今度はノートパソコン(C)とデスクトップとの差が明らかでノートの2スレがデスクトップの1スレとほぼ同じとみなしてよいレベルです。YSSとGPSFishのベンチマークでは違いが見えませんでしたが、最近のソフトで動かしたときのDesktopと省エネ型のLaptopの違いははっきり出ています。デスクトップPC(B)はAVX2非対応なのですがなぜかAVX2版も動きます。しかし汎用版との差はほとんど見られませんでした。またAVX2対応のCPU(A,C)でも数%程度の違いになっています。これは、ソフトの設計の上でAVX2に固有のCPU命令をあまり使われていないのではないかと推察いたします。その意味では少し古いCPUで使っても強さがあまり変わらないソフトだと思われます。その一方で、デスクトップの(A)(B)を比べるとスレッド数の増加とともに新しいCPU(A)の優位性が現れてきます。CPUの周波数はあまり変わらないのですが、4スレで比べるとnode数で1.5倍というのは大きいです。結局なにがいいたいのかというと、Usapyon2は古いCPUから新しいCPUまで平等に見てくれるベンチマークになっているということでしょうか。
(追記2017/03/03) Ryzenが現れたというインパクトでとりあえずUsapyon2dashのベンチを取る。CPU i7-6700 (3.4GHz) Hash 256MB, depth 9で
1スレ 430K,
4スレ 1800K,
8スレ 2900K
(4) YaneuraOu
YaneuraOuファミリ (2016mid, classic-tce, classic, mini, nano-plus, nano)は基本的にベンチマークオプションを持っているようです。ここでは一番強い2016midでの計測値を述べます。オプション付きのコマンドは YaneuraOu-2016-mid.exe bench 512 4 12 default depth
で512がHashメモリ(MB), 4がスレッド数、12がdepthです。計測時間を40秒程度に収めたいときにはdepth 12くらい(デフォールトは15)がちょうどよいように思えます。調べる盤面数は3面とGPSFishやUsapyon2に比べると少ないです。その一方で、YaneuraOu、特に2016mid版はかなり細かくCPUの仕様に依存するバイナリーが用意されています。各CPUでの計測は汎用版に近いSSE2版(YS2)と各CPUに特化されたもの(AVX2版=YA, SSE4.2版=YS42)で行いました。Usapyon2と同じく赤い部分の最初がソフト、次がスレッド数、数値の一行目がkNPS, 2行目が標準偏差です。
(A) intel core i7-6700 3.4GHz (4コア8スレ)
(B) intel Xeon E3-1245 3.3GHz (4コア8スレ)
(C) intel Core i5-4200U 1.6GHz (2コア4スレ)
Usapyon2と同様な傾向としてノートPCの2スレがほぼデスクトップの1スレと等しいことが見て取れます。一方YaneuraOuの特徴はAVX2に対応するバージョンでNPSが持ち上がっており(3割くらい=R60程度)、AVX2などのCPUの新しい動きによる違いが鮮明に見えるのがYaneuraOu benchの特徴だと思います。
GPSFish, Usapyon2, YaneuraOuは現在(2016年夏)における将棋ソフトのベンチマークとして、どれもとても有効だと思います。各CPUに対するNPSを計測すればおおよそのレーティング差が見えますし、また、ここで行っているようなベンチマークの対局(一手5秒)が、それぞれのPCでどの程度の対局時間に対応するのかも見て取れます。例えば40コアなどといったモンスターマシンであれば、同等なレベルの調査を一手一秒以下で行える、などといったことが調べられると思います。
一方でUsapyon2とYaneuraOuではデスクトップPCがノートPCに比べてスレッド数=CPUコア数の設定で約4倍の性能を出すことで一致していたのに対し、GPSFishのベンチはだいぶ異なる結果を出してしまいました。したがってベンチマークと一言でいってもどのソフトを選択するかでだいぶ値は変化するということも理解できました。
あと、今のところ、ベンチマーク機能は各ソフトの「隠し機能」的なものであまり一般向けではありません。YSSのようなベンチマーク専用のインターフェースがあるとよりCPUベンチマークが普及して各ソフトの個性が分かりやすくなりよいのではないかと愚考いたします。