ChainerのMNISTサンプルをUbuntuで動かすとWindowsよりも早いことがわかったので、dlshogiの自己対局をUbuntuで行えるようにした。
AperyのMakefileを参考に、g++でビルドできるようにした。
Windowsで32スレッドで1手800シミュレーションで自己対局を行うと、2.68局面/秒で生成できる。
Ubuntuで同じ条件で実行すると、期待に反して1.03局面/秒でしか生成できなかった。
コンパイルオプションはAperyにbmi2をターゲットにしたときに合わせているがなぜか遅い。
スレッド数を減らして、16スレッドで実行すると、2.08局面/秒になった。
Windowsで16スレッドで実行すると、1.31局面/秒になる。Windowsではスレッド数が多い方が効率がよい。
CPU側のマルチスレッドの効率に問題がありそうだ。
なお、UbuntuのCPUはCore i9 10コアで、WindowsはCore i7 4コアなのでUbuntuの方がCPU性能がよい。
Ubuntuを入れているPCをWindowsで起動して実行すると、同じ条件で、3.16局面/秒で生成できた。
スレッドを120まで増やすと、7.63面/秒になった。
Windowsの場合はCPUのコア数が多い方が早くなる。
対局用の実行ファイルで開始局面を探索させてときのプレイアウト数/秒は、
Ubuntu | 553 |
Windows | 4438 |
と、こちらもUbuntuが非常に遅い結果になった。
原因を調べるのに時間がかかりそう・・・
Makefile
CC = g++ CFLAGS = -std=c++11 -Wextra -Ofast -MMD -MP -fopenmp -DNDEBUG -DHAVE_SSE4 -DHAVE_SSE42 -DHAVE_BMI2 -msse4.2 -mbmi2 -DHAVE_AVX2 -mavx2 LDFLAGS = -lpthread -lboost_python3 -lboost_numpy3 -lpython3.6m -flto INCLUDE = -I../usi -I../cppshogi -I$(PYENV_ROOT)/versions/anaconda3-5.0.1/include/python3.6m LIB = -L$(PYENV_ROOT)/versions/anaconda3-5.0.1/lib target = bin/make_hcpe_by_self_play sources = self_play.cpp usi_sources = mate.cpp ZobristHash.cpp cppshogi_sources = bitboard.cpp book.cpp common.cpp cppshogi.cpp evalList.cpp evaluate.cpp generateMoves.cpp hand.cpp init.cpp move.cpp movePicker.cpp mt64bit.cpp pieceScore.cpp position.cpp search.cpp square.cpp thread.cpp timeManager.cpp tt.cpp usi.cpp objects = $(addprefix obj/, $(sources:.cpp=.o)) usi_objects = $(addprefix obj/, $(usi_sources:.cpp=.o)) cppshogi_objects = $(addprefix obj/, $(cppshogi_sources:.cpp=.o)) $(target): $(objects) $(usi_objects) $(cppshogi_objects) @[ -d bin ] || mkdir -p bin $(CC) -o $@ $^ $(LIB) $(LDFLAGS) $(CFLAGS) obj/%.o: %.cpp @[ -d obj ] || mkdir -p obj $(CC) $(CFLAGS) $(INCLUDE) -o $@ -c $< obj/%.o: ../usi/%.cpp @[ -d obj ] || mkdir -p obj $(CC) $(CFLAGS) $(INCLUDE) -o $@ -c $< obj/%.o: ../cppshogi/%.cpp @[ -d obj ] || mkdir -p obj $(CC) $(CFLAGS) $(INCLUDE) -o $@ -c $< all: $(target) clean: rm -f $(objects) $(usi_objects) $(cppshogi_objects) $(target)