やねうら王、速くなったよ?

やねうら王2016MidがMacでビルド出来ないという話を聞きつけ、自分でも試してみました。

確かに出来なかったので、ちょっとヘッダーとかを整理したらビルドが出来るようになりました。というか、私にはMacでg++が使えるようにするほうが時間がかかりました。Xcode?なんすかそれ?MacPort?なんでそんなもん要るの?sudo?須藤って誰?ぐらいの理解でした。せっかくなので手順をまとめておきました。

やねうら王2016MidをMacでビルドする方法

それで、Macでビルドが通るようになったので、Msys2のほうでもちゃんと出来るか確認したのだけど、なんかnps速くなってます。以前はVS2015とg++とではbenchの値が同じぐらいだったのに、いまはg++のほうが10数%増し。あれれ。何がどうなったのだ…。ここ1日のGitHubへのコミットを自分で見返してみるが、わけがわからない。誰かわかる人います?

g++でコンパイルした、やねうら王2016Midもリポジトリに放り込んでおいたので、使いたい人はそちらをどうぞ。(AVX2用です)
https://github.com/yaneurao/YaneuraOu/tree/master/exe

PGOをかけるともう数%速くなる…はずです。(まだやってない) おそらく、元の実行ファイルからすると15%ぐらい速くなる…はずです。そんなに速くなったら、自己対戦ではR40〜50ぐらいに匹敵するので、こりゃもう魔女と同等以上でしょう…。

あとUSE_SSE2のdefineでSSE4.1の命令を使っている箇所があったので修正しときました。SSE2/4.1/4.2の人とか(上のリポジトリに実行ファイルがあるので)、もし動かなければ教えてもらえると助かります。


やねうら王、速くなったよ?” への19件のコメント

  1. commit 9100f4da3d0e754a8cc3d236c06a401d38e17f86
    04:46:37時点のコミットで試しました

    i7 3770K (Ivy Bridge)
    Windows 7 64bit
    ShogiGUIでYaneuraOu-2016-mid-sse42.exeのエンジン登録に失敗します
    YaneuraOu-2016-mid-sse41.exeはいけました

    YaneuraOu-2016-mid_gcc.exe,YaneuraOu-2016-mid.exeも失敗しますがこちらは正常(のはず)

    • SSE4.2、includeするヘッダを変更したのですが、その影響なのか、リビルドがきちんと出来ていなかったのかは判然としないです。とりあえず、リビルドして、再度放り込んでおきました。(2分前のコミット)

  2. CPUターゲットはextra/config.hで直接は指定せず、

    – 構成ソリューション(Debug/Release)を複数作成(Release-avx2等)
    – プリプロセッサの定義(YaneuraOu.vcxprojのPreprocessorDefinitions)やMakefileの分岐内などでUSE_AVX2などを定義
    – 中間ディレクトリ(OBJDIR)をCPUターゲット毎に分離
    – 出力バイナリ名(リンカーの出力ファイルやTARGET)をCPUターゲット毎に変更

    みたいな感じにしてみては如何でしょうか。複数のCPUターゲット向けにビルドし直す作業が煩雑そうですので。

    • Makefileのほうはそうなっているので、-marchを適切に指定しておけば、一括ビルドは可能ではあります。VS2015のほうは、やねうら王nano,nano plus,mini,classic,classic-tce,2016 Mid,…など多数のeditionがあり、CPUターゲットも5種類ぐらいあり、Debug/Releaseの区別もあるのでこれを構成ソリューションで分けるのは筋が悪いかなと思っております。

  3. ひょっとしてターボブーストテクノロジーみたいなCPU温度で自動オーバークロックするやつで、起動後しばらくリミッター解除で動くやつに振り回されてるとか

    PGオプションは速くするオプションではありません。関数Aが1万回呼ばれたとか、そういう類の分析を行うツールです。gprofでググるのが吉です。

    • その可能性はなくはないです。> Turbo Boost
      しかも普段の開発環境がHyper-V環境下なので、なかなかきちんと計測も出来ず…。

      それにしても魔女のベンチ値よりは1割ぐらい負けているなーという印象でした。

  4. ちなみに配布されている魔女の.exeファイルはPGOビルドされていません。

    • 情報ありがとうございます。gccのPGO、1,2%しか速くならないようでそのへんは誤差であるようです。VS2015とgccとの差が大きいですね。(10%ぐらい違うようなので)

  5. お疲れ様です。少しずつやねうら王のコードを読ませて頂いているものです。今回また一つ質問がありましてコメントさせて頂きます。

    position.cppのset関数中で、
    #ifndef EVAL_NO_USE
    が何カ所か使われていますが、
    クラス先頭のinculude文には、この疑似命令の条件を満たすような定義を書いている部分がありませんのでつねにこの疑似命令は満たされているようです。

    実際に、EVAL_NO_USEがdefineされている部分は、サーチエンジンのクラスのようですので少し混乱しております。これは、これで良いということなのでしょうか

  6. すいません。EVAL_NO_USEがdefineされるのはconfig.hでした。お詫びして訂正いたします

    • はい。config.hの release configurationsのところにあるように、自分のプロジェクトを定義して、それに対して好きなようにカスタマイズしてビルド出来るという作りになっています。

      • お忙しいところ早速のお答えありがとうございました。
        position.hにも、position.cppにもconfig.hがインクルードされていませんでしたので、config.hの内容が反映されていないのではないかと思い、質問させて頂きましたがこれはわざということで理解いたしました。ありがとうございました。

        • 本当に的外れなことばかり申し上げて申し訳ありません。config.hはshogi.hでインクルードされていることを確認しました。

          本当にいろいろご迷惑ばかり掛けて申し訳ありません

  7. 以前、古いCPUに対応したやねうら王を要望した者です。
    その後なんとか自分でビルドできるようになりました。

    当方のPC環境です。
    Windows 7 64bit Sandy Bridge (sse4.2)
    Visual C++ 2015 Update2

    報告ですが、現行のV3.24は2016Mid以外エラーでビルドできません。
    試しに評価関数をKPPからKPPTに変更したらすべてビルドできました。
    ちなみにV3.23はすべてKPPのまま問題なくビルドできました。(KPPTは試してないです)
    ただしnanoとnano-plusはV3.23、V3.24ともに対局中エラーで落ちます。
    少し古いですがV2.89では問題ないです。

    いわゆる俺環や私のミスの可能性もありますので確認して頂ければと思います。

    あと質問ですが、2016MidとClassic-tce以外は1秒で対局させても2秒使います。
    将棋所でもShogiGUIでもです。これは仕様でしょうか?

    • ご報告ありがとうございます。

      > 現行のV3.24は2016Mid以外エラーでビルドできません。

      VALUE_NOT_EVALUATE → VALUE_NOT_EVALUATEDに変更したのですけど、変更忘れが一箇所あったようです。修正しておきました。

      > ただしnanoとnano-plusはV3.23、V3.24ともに対局中エラーで落ちます。

      コード、リファクタリングしたときに潰していたようなので修正しておきました(`・ω・´)ゞ

      > あと質問ですが、2016MidとClassic-tce以外は1秒で対局させても2秒使います。

      去年までのWCSCのルール(CSAルール)では2秒使用までは計測1秒となるので0.1秒で思考が完了したときでも2秒ぎりぎりまで使うのが有効だったためです。まあ、(作られた当時の)仕様を反映しているとご理解ください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です