2024年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

tweet

  • tweets

« 戦い済んで日が暮れた、と思ったらもう朝だ | トップページ | Windows対応中…だが »

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対応中…だが »

将棋プロセサ」カテゴリの記事

コメント

ダウンロードしました!
Visual Studioでビルドするのはちょっとやっかいそうですね…。

bonasse 1.0 の公開ありがとうございます。

探索の高速化は将棋プログラムの基礎となる技術です。これから A リーグさんのコードを読み勉強させて頂きます。

宜しくお願いします。

昨夜ダウンロードさせて頂きました
vc++でビルドできるようにしたいですね
というか、このさい、gccに乗り換えます

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 を削除

(2)はx64ならOKでしたか。
x86でエラーになり、ちょっと厄介そうだな、で止まってました。

をぉ、何か人気ありますね。私としてもうれしいです。みなさんごゆっくりお楽しみください。

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でやってみました。

公開は、私はかまいませんけど、保木さんいいですか?

私もかまいません。

その際に、使用制限・配布条件等は元の Bonanza に準じる旨をどこかに記載して頂けると助かります。

宜しくお願い致します。

保木さん、了解です。
bontaさん、↑だそうですのでよろしく。

上の(4)ですが、言うこところころ変わってすみませんがやっぱり公開バイナリならaffinityなしの方がいいですかね。他のジョブあるとまずいし。ほんとはオプションにしてコマンドでon/offできるのがいいんだろうけど。誰かやってくれません?^^; 「読み筋パッチ」の記事にあるパッチと同じような感じで新しいオプション入れるのは簡単だと思うんですけどね。いやまあ時間あれば私がやればいいんですけど。

公開のご了解ありがとうございます。
その後少し修正して以下のようにしました。

(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勝 となりました。

↑URLを忘れていました
http://www.geocities.jp/shogi_depot/

バグ修正版を再度アップしました。
プロファイラをとるためにWIN32_PIPEをOFFにしたら予測読みでフリーズしましたので、
WIN32_PIPEをONに戻しました。(プロファイルをとるためにも不要でした)

公開乙です。

(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してみてくださいませ。よろしくお願いします。

ご説明ありがとうございます。
ただ、速度に有意な違いが見られないようでしたので、しばらくこのままにしておきます。
(__x86_64は__x86_64__では?)

msvcの32bitで動くソースの公開して貰いたいです。
公開済みですか

bontaさん:もちろんbontaさんのお考え通りにしてくださってかまいません。ただ、ちょっと私にはbontaさんの環境が解せないですね。うちではコア固定もATOMICも有意に差が出るんですが。LinuxとWinの違いかな?

gcc/icc on linuxでは__x86_64も__x86_64__も両方defineされます。VC 64bでは後者だけでしょうか?でしたらそれに合わせますが。

ksiさん:ただいま鋭意努力中ですのでしばしお待ちを。

VC(x64)では_M_X64が定義されます。
とりあえず、32bitで無理やりコンパイルを通すようにしたソースを自分のブログに置きました。

ソース見せていただきました。ぜんぶ.cppですかw
しかし32bでだめで64bで通るのは謎ですね。

そこは力技ってことでw
64bitだと通るのは最初からスタックが16バイト境界になってるからですかね?
Linuxだと32bitでも小細工なしで通るのでしょうか?

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: bonasseソース公開:

» Bonasse for Windows [かずの心の贅肉]
とりあえず、BonasseをVS2005でコンパイルできるようにしてみました。 nmake -f makefile.vs cl で通りました(リンクでwarningが出ましたが動作するようです)。 ダウンロード(bonasse_vc.zip;162KB) このブログはアップできるファイルサイズは512KBまでみたいなので、ソースのみです。 引数のalignment 関係のエラーを取るのにC++にして、参照渡しにするという力技でごまかしていますw 以下の表は実行させて、 limi... [続きを読む]

« 戦い済んで日が暮れた、と思ったらもう朝だ | トップページ | Windows対応中…だが »