やねうら王2016Mid、g++でコンパイル出来るようになりました。
魔女のMakefileを参考に、Makefile書いておきました。
> make avx2
とかやるとavx2用の実行ファイルが得られるはずです。
(やねうら王のshogi.hでやねうら王2016Midを選択して、extra/config.hでSSE,AVX2有りを選択しておく必要があります。)
まだ開発中で、長い持ち時間においては魔女にやや負け越すようです。
1手1秒とかなら勝ち越すのですが…。
パラメーター絡みのチューニングというよりはnpsの差が原因である可能性があって、やねうら王のほう、何故かnpsが魔女より1,2割出ないので、その原因をいま調べているところです。
何かお気づきの点がありましたら、コメント欄などでお願いします。
g++ -pg したプロファイラの結果とか無いですか?
私、g++のPGOの仕組み、まだ理解してないのでしばし(2,3日?)お待ちを…。(T_T)
あら・・g++のPGOの話をネットで検索してたら「マルチスレッド対応も弱い」とかいう記述があるぞ。wikipediaの「性能解析」見るといろいろな種類のプロファイラがあるみたいです。g++のPGOなんかよりも良いやつがあるかもしれないです
g++対応嬉しいです(
・◡・´)
が、#includeのほうでfolder separatorが修正切れてないところが2つあります
1. source/move_picker.h:13の #include "extra\move_picker_2015.h"
2. source/evaluate.h:8 の #include "eval\kppt_evalsum.h"
です。
あと、以下のファイルだけ文字コードがcp932になってます(´・_・)
source/extra/entering_king_win.cpp
source/eval/evaluate_bona_piece.cpp
source/eval/kppt_evalsum.h
docs/ToDoのリスト.txt
docs/あとで使うかも知れないコード.txt
ありがとうございます。GitHubのほうに反映させておきました。(`・ω・´)ゞ
linux対応とのことでlinuxでmakeしてみましたが、一部includeが足りないようでした。
INT_MAXにはが、offsetofを使うにはが必要です。
diff –git a/source/position.cpp b/source/position.cpp
index c2ffd53..08bfd4f 100644
— a/source/position.cpp
+++ b/source/position.cpp
@@ -1,5 +1,6 @@
#include
#include
+#include
#include “position.h”
#include “misc.h”
diff –git a/source/shogi.h b/source/shogi.h
index faba279..60116f0 100644
— a/source/shogi.h
+++ b/source/shogi.h
@@ -1,5 +1,6 @@
#ifndef _SHOGI_H_
#define _SHOGI_H_
+#include
//
// やねうら王mini
includeのカッコが消えてしまいましたが……INT_MAXにはclimits、offsetofにはcstddefが必要です
修正しておきました(`・ω・´)ゞ
Ubuntu16.04でmake avx2が出来て、実行ファイルが実行できることまでは確認しました。
って…もしかしてこれで晴れてLinux + AWSのスポットインスタンスが利用できる…!?も、、もう、Xeon 40コアPC発注しちゃったよ!!ヽ(`Д´)ノ
LLVM Clangが試してほしそうにこちらを見ています
ライセンスが少し難しいintel c compilerさんも
ClangはAVX2とか使うときに読み込むヘッダーがよくわかりません…。(そもそもClangのその手のヘッダーが読み込めるようにセットアップするところまでがよくわかりません…) まあ、最適化においてg++とそんなに変わらないのであれば、まあいいかな…と思ったり。Intel C++ Compilerは、ほんの少しの修正ぐらいでコンパイルが通るはずなんですけどコンパイル環境を用意するの面倒くさくて…。
やねうら王miniやランダムプレーヤもubuntuでコンパイル出来ますか?
Makefile、そこまで書いてないですが、Makefileを少し変更すれば出来るはずです。
ビルドするエンジンの種類を選べるようにしました。
$ make avx2 YANEURAOU_EDITION=RANDOM_PLAYER_ENGINE
とすればランダムプレイヤーをUbuntuでもビルド出来るかと思います。
nosseがコンパイルできなかったのですが、mm_malloc.hをインクルードしたらコンパイルできました。
gccでは_mm_mallocと_mm_freeの宣言 (インライン定義) はそこに入っているのですが、イントリンシックのヘッダをインクルードすると一緒にインクルードされるようでした。
おお、そうなんですね。なるほどです。修正しておきました。(`・ω・´)ゞ
最近のバージョンは_stricmpがなくてLinux環境でコンパイルできませんでした。usi.cppにこんなものを追加してください:
#ifndef _MSC_VER
#define _stricmp strcasecmp
#endif
ご報告ありがとうございます。修正しておきました。(`・ω・´)ゞ