Mac
GCC
将棋

Macでelmo/やねうら王を使う

More than 1 year has passed since last update.

最近AbemaTVで将棋を見ることが多くなってきた.
第30期竜王戦 渡辺竜王-羽生棋聖戦をponanzaに勝ったelmoの解説付きで観戦したくなったのでインストールしてみる.

ほとんどMacでelmoを使ってみたと同じだが
古いMBAのため,やねうら王のinstallでハマりかけたので書いてみた.

環境

  • Mac OSX Yosemite 10.10.5

  • Macbook Air mid 2011

やねうら王ダウンロード

やねうら王githubからおとしてくる.

% git clone https://github.com/yaneurao/YaneuraOu.git

ビルド準備

source/Makefileをみると自分のCPUがどのx86のSIMD拡張命令をサポートしているか知る必要があるようだ.

intelはSandy-brigeでAVX(SIMD幅128bit),HaswellでAVX2(SIMD幅256bit),skylakeでAVX-512をサポート.

MBA mid 2011はIvy bridgeなのでAVXをサポートしているはずだがSSEとの後方互換性とかよくわからなかったので調べてみた.

wikipedia MBA mid 2011 をみるとCore i5 2467Mがのっている.

Core i5 2467Mでググるとサポートしている命令(アセンプリ)は次の通り.

Instruction set extensions

MMX
AES
SSE
SSE2
SSE4.1
SSE3
Supplemental SSE3
SSE4.2
AVX

AVXやSSE4.2が使用できるらしい.
下記でも確認できた.

[s006@source]0% sysctl -a | less
[s006@source]0% sysctl -a | grep machdep.cpu.features                       [~/code/shogi/YaneuraOu/source]
machdep.cpu.features: FPU VME DE PSE TSC MSR PAE MCE CX8 APIC SEP MTRR PGE MCA CMOV PAT PSE36 CLFSH DS ACPI MMX FXSR SSE SSE2 SS HTT TM PBE SSE3 PCLMULQDQ DTES64 MON DSCPL VMX SMX EST TM2 SSSE3 CX16 TPR PDCM SSE4.1 SSE4.2 x2APIC POPCNT AES PCID XSAVE OSXSAVE TSCTMR AVX1.0

やねうら王コンパイル

Macのclangやgccは何を使うか悩ましい.
典型的には

  • Xcodeのcommand line toolのclang (/usr/bin/clang)
  • Homebrewのgcc (/usr/local/bin/gcc)
  • macportsのgcc (/opt/local/bin/gcc)

を使うのだと思う.
自分の環境はこんな感じ.

[s006@source]0% where clang
/usr/bin/clang
[s006@source]0% where gcc
/usr/bin/gcc
/opt/local/bin/gcc

macの場合下のpathも通してもいいのかも

/Library/Developer/CommandLineTools/usr/bin
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

コンパイラの決定

Makefileを編集してg++4.9以上でコンパイルできることを確認.

clangでコンパイルしてみるとがないといわれるので
/Library/Developer/CommandLineTools/usr/include/c++/v1
などをinclude指定するとよい.
しかしldでエラー.なにが悪いかわかっていないがmacのtoolchainはよくわからないのでこれ以上立ち入らないこととする.
うまくできた人は教えて欲しい.

pushd source
vim Makefile
make sse42-mod # cpuに応じて指定

基本はCOMPILERをg++にかえるだけ.
下のMakefile編集例ではmacportsのgcc6を指定.
それに加え,自分のCPUに合わせた命令セットが吐かれるよう,sse42を参考に
+sse42-mod:
をつくった.

[s006@source]0% git diff
diff --git a/source/Makefile b/source/Makefile
index 34b4b3c..f9cbe8e 100644
--- a/source/Makefile
+++ b/source/Makefile
@@ -6,15 +6,31 @@ YANEURAOU_EDITION = YANEURAOU_2017_EARLY_ENGINE


 # clangでコンパイルしたほうがgccより数%速いっぽい。
-# COMPILER = g++
 COMPILER = clang++
+#COMPILER = /usr/bin/g++
+#COMPILER = /opt/local/bin/g++
+#COMPILER = /opt/local/bin/g++-mp-4.8 # cannot use gcc48
+#COMPILER = /opt/local/bin/g++-mp-4.9
+#COMPILER = /opt/local/bin/g++-mp-5
+COMPILER = /opt/local/bin/g++-mp-6
 # 標準的なコンパイルオプション
+# orig
 CFLAGS   = -std=c++14 -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fpermissive
+# gcc4.8-4.9
+# CFLAGS   = -std=c++1y -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fpermissive
+# gcc5-
+# CFLAGS   = -std=c++14 -fno-exceptions -fno-rtti -Wextra -fast -MMD -MP -fpermissive
+# clang3.2-3.4
+# CFLAGS   = -std=c++1y -fno-exceptions -fno-rtti -Wextra -Ofast -MMD -MP -fpermissive
+# clang3.5-
+# CFLAGS   = -std=c++14 -fno-exceptions -fno-rtti -Wextra -fast -MMD -MP -fpermissive
 WCFLAGS  =
 LDFLAGS  =
 LIBS     =
-INCLUDE  = # -I../include
+#LDFLAGS  =  -lm
+#INCLUDE  = # -I../include
+INCLUDE  =

 # clang用にCFLAGSなどを変更
 ifeq ($(findstring clang++,$(COMPILER)),clang++)
@@ -34,6 +51,10 @@ ifeq ($(findstring clang++,$(COMPILER)),clang++)

   # msys2用のclangでは、OpenMP使えない?インスコ仕方がわからん。

+  # for mac /usr/bin/clang++
+  #INCLUDE += -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1
+  INCLUDE += -I/Library/Developer/CommandLineTools/usr/include/c++/v1
 endif

 ifeq ($(OS),Windows_NT)
 @@ -47,7 +68,7 @@ endif

 # リンク時最適化。これをつけるとmsys2環境だとセグフォで落ちる。
 # 落ちない環境なら有効にしたほうが速い実行ファイルが生成されるはず。
-# CFLAGS += -flto
+#CFLAGS += -flto

 @@ -176,6 +196,9 @@ sse41:

+sse42-mod:
+       $(MAKE) CFLAGS='$(CFLAGS) -DNDEBUG -DUSE_MAKEFILE -D$(YANEURAOU_EDITION) -DUSE_SSE42 -msse4.2 ' LDFL
AGS='$(LDFLAGS) $(LTOFLAGS)' $(TARGET)
+ 

やねうら王動作確認

下記コマンドを実行したあと,何も端末に表示されずハングしているように見えるので注意(ハマった).
usi enterとタイプするとusiokまで表示される.

[s006@source]0% ./YaneuraOu-by-gcc
usi
...
usiok
^C
[s006@source]130%

elmo

elmoの評価関数と定跡ファイルをダウンロード.解凍.

pushd [elmo.shogi]
mv book/yaneura_format/standard_book.db book/.
cp -p [YaneuraOu]/source/YaneuraOu-by-gcc

elmo動作確認

usi enterとタイプするとusiokまで表示.
isready enterとタイプするとreadyokまで表示.

[s006@source]0% ./YaneuraOu-by-gcc
usi
...
usiok
isready
info string Eval Check Sum = c9e81cef72b , Eval File = elmo(WCSC27)
readyok
^C
[s006@elmo.shogi]130%

将棋ブラウザQ

with java8をインストールしてみた.
エンジンは動いたが詳細パラメータの設定ができない,
2threadで2GBで動くので4GBのMBAで動画を見ながら解析するのは若干ツラい.

下記によればShogiGUIや将棋所よりは将棋ブラウザQのほうがうごきそうだがどうなんだろうか?
http://www.uuunuuun.com/mac-linux

ref

http://yaneuraou.yaneu.com/yaneuraou_mini/
https://mk-takizawa.github.io/elmo/howtouse_elmo.html
https://qiita.com/MATSUMOTO-Takashi/items/4963b1ca00af41066903