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


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

ほとんど[Macでelmoを使ってみた](http://yaneuraou.yaneu.com/yaneuraou_mini/)と同じだが
古いMBAのため，やねうら王のinstallでハマりかけたので書いてみた．



## 環境
- Mac OSX Yosemite 10.10.5

- Macbook Air mid 2011


## やねうら王ダウンロード
[やねうら王](http://yaneuraou.yaneu.com/yaneuraou_mini/)を [github](https://github.com/yaneurao/YaneuraOu)からおとしてくる．

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

### ビルド準備
source/Makefileをみると自分のCPUがどのx86の[SIMD](https://ja.wikipedia.org/wiki/SIMD)拡張命令をサポートしているか知る必要があるようだ．

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

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

[wikipedia](https://ja.wikipedia.org/wiki/MacBook_Air) MBA mid 2011 をみるとCore i5 2467Mがのっている．

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

[Instruction set extensions] (http://cpuboss.com/cpu/Intel-Core-i5-2467M)

    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でコンパイルしてみると<cstdint>がないといわれるので
/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:
をつくった．

``` Makefile
[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の評価関数と定跡ファイル](https://drive.google.com/file/d/0B0XpI3oPiCmFalVGclpIZjBmdGs)をダウンロード．解凍．

```
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