GPSfishをCygwinでビルドする方法(2013/04/29版)

1. 環境

  1. Cygwin : 1.7.18-1 (32bit)
  2. gcc : 4.5.3-3 (4.7.2-2はリンク時エラー)
  3. GPSfish : 0.2.1+r2821

2. ソースコードのダウンロード

  1. GPS将棋のサイト からosl,gpsshogi,gpsfishのソースコードをダウンロードし、 それぞれosl,gpsshogi,gpsfish_devフォルダに解凍します。
  2. 環境変数OSL_HOMEをgpsshogiフォルダに設定します。

3. 準備作業

  1. Cygwinのsetup.exeを起動しDevelセクションのgcc4とmakeをインストールします。

4. oslのコンパイル

ソースコードを以下のように修正します。
(1) osl/lib/misc/iconvConvert.ccの76行目

#if (defined __linux__ || defined __APPLE__ || defined __CYGWIN__)
(2) osl/lib/misc/ncores.ccの7行目と24行目
#if defined(__linux) || defined(__CYGWIN__)

Cygwinウィンドウを起動し以下のコマンドを実行します。

> cd osl
> ln -s ../gpsshogi/data .
> cd release
> make -j $4		(数字はコア数)
エラーが発生しますのでCygwinのsetup.exeを起動しLibsセクションのlibboost-develをインストールします。
再度makeを行うとエラーが発生しますのでCygwinのsetup.exeを起動しLibsセクションのlibiconvをインストールします。
再度makeを行いosl/releaseフォルダにlibosl_board.aとlibosl_search.aの二つのファイルができれば正常終了です。
所要時間は数分です。メモリーが少ない場合(8GB以下)は余分に時間がかかります。

(注1)tcmallocは実行時にエラーが発生しますのでコンパイルは不要です。以下の方法で回避できます。
(注2)osl/makefile.confの20行目を "CPUOPTION ?= -march=native" から "CPUOPTION ?= -mtune=generic" に変えると異なる環境でも動く実行プログラムができますが現状ではコンパイルエラーになります。

5. gpsfishのコンパイル

ソースコードを以下のように修正します。
(1) gpsfish_dev/src/ucioption.cppの127行目 (ハッシュメモリを2GBとると動かない環境がありますので1GBに減らします)

memory = std::min((size_t)1024, std::max(memory, value/1024/4));
(2) gpsfish_dev/src/ucioption.cppの148行目 (残り時間が少ないときも最低1秒考えるようにします)
o["Minimum Thinking Time"] = UCIOption(1500, 0, 50000);
(3) gpsfish_dev/src/search.cppの668行目 (bestmoveに続いてponderを送信すると将棋所でフリーズするため)
{}//cout << " ponder " << move_to_uci(ponderMove);

Cygwinウィンドウを起動し以下のコマンドを実行します。

> cd gpsfish_dev/data
> make
> cd ../src
> make -j $4
エラーが発生しますのでgpsfish_dev/src/Makefileのgpsfish:セクションを以下のように変更します。
gpsfish: $(OBJS)
	$(CXX) -o $@ $(CXXFLAGS) $(PROFILE_USE) $(LDFLAGS) $(OBJS) \
../../osl/release/libosl_search.a ../../osl/release/libosl_board.a \
-lboost_filesystem-mt.dll -lboost_serialization-mt.dll -lboost_iostreams-mt.dll \
-lboost_date_time-mt.dll -lboost_system-mt.dll -lboost_thread-mt.dll -lboost_program_options-mt.dll \
-lpthread -lbz2 -liconv
再度makeを行うとエラーが発生しますのでCygwinのsetup.exeを起動しLibsセクションのlibbz2-develをインストールします。
再度makeを行いgpsfish_dev/srcフォルダにgpsfish.exeができれば正常終了です。
所要時間は1分以内です。

gpsfishの簡単な動作確認は以下のように行います。

> cd gpsfish_dev/src
> ./gpsfish.exe
ここでusiと入力し、メッセージの後にusiokが出力されればOKです。 quitを入力して終了させて下さい。

6. gpsfishのインストール

gpsfishをGUIから使用するには以下の設定が必要です。

  1. gpsfish_devにbinフォルダを作成します。
  2. 上で作ったgpsfish.exeをbinフォルダにコピーします。
  3. cygwin/binフォルダにある以下のファイルをbinフォルダにコピーします。
    cygboost_date_time-mt-1_50.dll
    cygboost_filesystem-mt-1_50.dll
    cygboost_iostreams-mt-1_50.dll
    cygboost_program_options-mt-1_50.dll
    cygboost_serialization-mt-1_50.dll
    cygboost_system-mt-1_50.dll
    cygboost_thread-mt-1_50.dll
    cygbz2-1.dll
    cyggcc_s-1.dll
    cygstdc++-6.dll
    cygwin1.dll
    cygz.dll
    
    ファイル名の末尾はバージョン番号ですので変わる場合があります。

7. USI将棋での設定法

USI将棋のバージョン1.1.1以上を使用して下さい。
[ツール]→[エンジン管理]メニューの[追加]をクリックし6.でコピーしたgpsfish.exeを選択し、 下の[エンジン応答]を確認して下さい。
対局開始ウィンドウの設定が以下の通りです。

  1. 持ち時間:持ち時間を使用するときは秒読みを0にして下さい。
  2. 秒読み:秒読みを使用するときは持ち時間を0にして下さい。
すなわち、持ち時間と秒読みのどちらか一方が有効です。(この仕様は将来変わる可能性があります)
[設定]ウィンドウでの注意事項は以下の通りです。
  1. Threads : 実コア数を指定して下さい。HyperThreadingは効果ありません。
  2. Hash : gpsfish.exeは32ビットですので上限(2000MB?)があります。
  3. Ponder : 現在の仕様では予測読みは設定に関係なく無効です。

8. プチ将棋での設定法

プチ将棋のバージョン3.5.1以上を使用して下さい。
[ツール]→[エンジン管理]メニューの設定方法は以下の通りです。

  1. エンジン名:gpsfish (何でも構いません)
  2. 実行プログラム:6.でコピーしたgpsfish.exeを選択して下さい。
  3. プロトコル:USIを選択して下さい。
対局開始ウィンドウでの設定法は以下の通りです。
  1. 引数:不要
  2. 持ち時間:持ち時間を使用するときは秒読みを0にして下さい。
  3. 秒読み:秒読みを使用するときは持ち時間を0にして下さい。
  4. 予測読み:現在の仕様では設定に関係なく無効です。
  5. スレッド数:実コア数を指定して下さい。HyperThreadingは効果ありません。
  6. ハッシュ:gpsfish.exeは32ビットですので上限(2000MB?)があります。
  7. 投了値:無効
  8. 定跡最長:無効
すなわち、持ち時間と秒読みのどちらか一方が有効です。(この仕様は将来変わる可能性があります)

9. 将棋所での設定法

gpsfishは将棋所の設定を使用せず、既定値で動きます。

  1. ハッシュメモリ:既定値(1024MB)
  2. スレッド数:CPUの全スレッド(HyperThreadingが有効であるとその分弱くなります)
  3. 持ち時間:持ち時間を使用するときは秒読みを0にして下さい。
  4. 秒読み:秒読みを使用するときは持ち時間を0にして下さい。
  5. 先読み:現在の仕様では設定に関係なく無効です。
すなわち、持ち時間と秒読みのどちらか一方が有効です。(この仕様は将来変わる可能性があります)

トップページへ