bonasseソース公開
bonasse(高速化版ボナンザ)のソースを公開します。このページの左上の「資料館」のところに置きます。
bonasseはボナンザを高速化しただけのもので、クラスター並列ではありません(ボンクラーズとは別物)。
クラスター並列の方はまだいろいろ未完成で人様にお見せできるようなレベルではないです。今回はbonasseの方だけ。
主にコンピュータ将棋開発者向けの参考用途です。Linux onlyだしGUIとかもないので、一般の人が楽しむようなものではありませんのであしからず。中にREADMEがありますのでご参照ください。
大会後にfloodgateで走らせてるbonasse(i7 860 1core)やsenoabs(i7 980 6core)とほぼ同じものです。floodgateの2week Rで1coreが2600、6coreが2700台くらい。速さあまりちゃんと測ってませんが、どうやら本家より1.5倍程度速いようです。
保木さんとは大会中からいろいろお話ししまして、「両方いいとこ合わせてより強いボナンザを公開できるといいですねー」てな話で一致しまして、大会後もメールでやりとりしてたんですが、私のはLinux onlyだったりして本家ボナンザに取り込むのはいろいろ作業があって時間かかりそう、ということで現状のbonasseをまず私から公開しましょう、ということになりました。いずれは主だったfeatureは本家の方にも取り込まれるんじゃないかと思います(いつになるかはわかりませんが)。
« 戦い済んで日が暮れた、と思ったらもう朝だ | トップページ | Windows対応中…だが »
「将棋プロセサ」カテゴリの記事
- ボンクラーズの開発過程について書いた記事が掲載されました(2019.03.07)
- 「浅い評価値を深い評価値に近づける学習法」誕生の背景(2016.10.06)
- 塚田九段の対ボンクラーズ練習棋譜を公開します(2013.09.07)
- Puella α ソース公開(2013.08.28)
- クラスタ並列の解説記事を公開します(2013.08.22)
コメント
トラックバック
この記事へのトラックバック一覧です: bonasseソース公開:
» Bonasse for Windows [かずの心の贅肉]
とりあえず、BonasseをVS2005でコンパイルできるようにしてみました。
nmake -f makefile.vs cl
で通りました(リンクでwarningが出ましたが動作するようです)。
ダウンロード(bonasse_vc.zip;162KB)
このブログはアップできるファイルサイズは512KBまでみたいなので、ソースのみです。
引数のalignment 関係のエラーを取るのにC++にして、参照渡しにするという力技でごまかしていますw
以下の表は実行させて、
limi... [続きを読む]
ダウンロードしました!
Visual Studioでビルドするのはちょっとやっかいそうですね…。
投稿: かず@なのは | 2010年5月12日 (水) 00時35分
bonasse 1.0 の公開ありがとうございます。
探索の高速化は将棋プログラムの基礎となる技術です。これから A リーグさんのコードを読み勉強させて頂きます。
宜しくお願いします。
投稿: hoki | 2010年5月12日 (水) 10時59分
昨夜ダウンロードさせて頂きました
vc++でビルドできるようにしたいですね
というか、このさい、gccに乗り換えます
投稿: mkomiya | 2010年5月12日 (水) 13時32分
bonasseをWindowsに移植してみました。
NPSは50%かそれ以上上がっているようです。
bonanza4.1.3と1手1秒で100局(先後50ずつ)対局した結果は、
bonasse : bonanza = 64勝 : 36勝 でした。
実行プログラムを私のウェブサイトに公開していいでしょうか。
将来、よりいいものが公開されれば、公開は中止します。
ソースコードの変更点は以下の通りです。
中身を理解せずとりあえずコンパイルエラーを消したものです。
コンパイラはVC++2008 x64版です。
(1) Makefile:
SSEOPT = -DUSE_SSE4
OPT = /DNDEBUG /DTLP /DMINIMUM /DCSASHOGI /DNO_LOGGING
CFLAGS = /Ox
リンク時に User32.lib を追加
(2) shogi.h:
49行(_MSC_VER)内に #define ALIGN16(typ,var) __declspec(align(16)) typ var を追加
(32ビットコンパイラではここでエラー発生)
(3) diffeval.c:
5,6行 #define max(a,b) と #define min(a,b) 削除(重複のため)
415行 int pcsufb, pcsufw; をここに移動
(4) thread.c:
6行 #define USE_CPU_AFFINITY を削除
20行- attachCpu関数を削除
(5) hash.c:
12行 #define DBG_NO_ATOMIC64 を復活
(6) evaluate.c:
11行 #define INANIWA_SHIFT を削除
投稿: bonta | 2010年5月12日 (水) 14時23分
(2)はx64ならOKでしたか。
x86でエラーになり、ちょっと厄介そうだな、で止まってました。
投稿: かず@なのは | 2010年5月12日 (水) 17時10分
をぉ、何か人気ありますね。私としてもうれしいです。みなさんごゆっくりお楽しみください。
bontaさん仕事速すぎ^^; (2)(3)(6)は問題ないと思います。(5)は64bitなら#defineしてOK。
(1)は、私MS知らないんですが、USE_SSE[4]はdefineされるんでしょうか?/DUSE_SSEとかしなくていいのかな?公開するならSSE4はやめたほうがいいかも。/OxとかUser32.libとか私わからないです。
(4)は削除でも動きますが、あった方が性能は上がるでしょう。最近(4/30)山下さんがYSS掲示板でこう↓書いてるのでこれでいいのでは。
SetThreadAffinityMask(GetCurrentThread(),(1 << nProcess))
でコアを固定してAyaでやってみました。
公開は、私はかまいませんけど、保木さんいいですか?
投稿: A級 | 2010年5月12日 (水) 17時16分
私もかまいません。
その際に、使用制限・配布条件等は元の Bonanza に準じる旨をどこかに記載して頂けると助かります。
宜しくお願い致します。
投稿: hoki | 2010年5月12日 (水) 18時41分
保木さん、了解です。
bontaさん、↑だそうですのでよろしく。
上の(4)ですが、言うこところころ変わってすみませんがやっぱり公開バイナリならaffinityなしの方がいいですかね。他のジョブあるとまずいし。ほんとはオプションにしてコマンドでon/offできるのがいいんだろうけど。誰かやってくれません?^^; 「読み筋パッチ」の記事にあるパッチと同じような感じで新しいオプション入れるのは簡単だと思うんですけどね。いやまあ時間あれば私がやればいいんですけど。
投稿: A級 | 2010年5月12日 (水) 20時15分
公開のご了解ありがとうございます。
その後少し修正して以下のようにしました。
(1) SSEOPT = /DUSE_SSE と SSEOPT = /DUSE_SSE4 は速度的に同じでしたので?
SSEOPT = /DUSE_SSE としました。(/と-は同じものです)
コンパイルオプション/Oxは既定の最適化でほとんどの場合これが一番速いです。
(異論はあると思いますが)
また、main.c の41行からの引数チェックを削除し、リンク時にUser32.libは不要にしました。
(4) 将棋ソフトではないですが、スレッドをコアに強制的に割り当てて速くなった試しがない
のでシステムにまかせたほうがいいと思います。(異論はあると思いますが)
(5) Warningでしたので、元ソースに戻しました。
(7) プロファイルを使用する最適化(PGO)を行うとさらに10%速くなりました。
以上の変更を行ったものを公開させていただきます。
一局での平均NPSは bonasse / bonanza = 216 / 131 = 1.65倍 となりました。
上と同じ条件で100局対局して、bonasse : bonanze = 57勝 : 43勝 となりました。
投稿: bonta | 2010年5月12日 (水) 21時22分
↑URLを忘れていました
http://www.geocities.jp/shogi_depot/
投稿: bonta | 2010年5月12日 (水) 21時34分
バグ修正版を再度アップしました。
プロファイラをとるためにWIN32_PIPEをOFFにしたら予測読みでフリーズしましたので、
WIN32_PIPEをONに戻しました。(プロファイルをとるためにも不要でした)
投稿: bonta | 2010年5月13日 (木) 09時51分
公開乙です。
(5)の話がどうもかみ合わないと思ったら、ソースにミスがありましたm(__)m shogi.hに↓を入れたつもりだったんですが、入ってませんでした(ボンクラーズには入れてたけど、bonasseに入ってなかった)
// ATOMIC64 is valid only in 32bit mode
#ifdef __x86_64
#define DBG_NO_ATOMIC64
#else
//#define DBG_NO_ATOMIC64
#endif
64bitではhash.cでもevaluate.cでも#defineした方が速いです。動かすだけならなくても問題ないはずですが、もし時間があったら#defineしてみてくださいませ。よろしくお願いします。
投稿: A級 | 2010年5月13日 (木) 11時19分
ご説明ありがとうございます。
ただ、速度に有意な違いが見られないようでしたので、しばらくこのままにしておきます。
(__x86_64は__x86_64__では?)
投稿: bonta | 2010年5月13日 (木) 18時55分
msvcの32bitで動くソースの公開して貰いたいです。
公開済みですか
投稿: ksi | 2010年5月13日 (木) 19時17分
bontaさん:もちろんbontaさんのお考え通りにしてくださってかまいません。ただ、ちょっと私にはbontaさんの環境が解せないですね。うちではコア固定もATOMICも有意に差が出るんですが。LinuxとWinの違いかな?
gcc/icc on linuxでは__x86_64も__x86_64__も両方defineされます。VC 64bでは後者だけでしょうか?でしたらそれに合わせますが。
ksiさん:ただいま鋭意努力中ですのでしばしお待ちを。
投稿: A級 | 2010年5月13日 (木) 20時26分
VC(x64)では_M_X64が定義されます。
とりあえず、32bitで無理やりコンパイルを通すようにしたソースを自分のブログに置きました。
投稿: かず@なのは | 2010年5月14日 (金) 02時16分
ソース見せていただきました。ぜんぶ.cppですかw
しかし32bでだめで64bで通るのは謎ですね。
投稿: A級 | 2010年5月14日 (金) 22時06分
そこは力技ってことでw
64bitだと通るのは最初からスタックが16バイト境界になってるからですかね?
Linuxだと32bitでも小細工なしで通るのでしょうか?
投稿: かず@なのは | 2010年5月14日 (金) 23時30分