2017年11月
      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    

tweet

  • tweets

« 2010年3月 | トップページ | 2010年5月 »

2010年4月

もはやこれまでか…

ぅぐ、アリス観たい…でも大会の後だなぁ…

大会直前最後の追い込み中。jushiroがうちなんですけど、だいぶ健闘してますが、うーん、わずかに激指に届かん…まあ指運に期待できる範囲ではあるようなので、あとは祈るだけですか。調布ってぇとどこだ、布多天神かな。あ、このクラインシンケン行きたいかも!でも遠いぞ。

ちなみにsenoabsもうちです。O, draconian devil! abnormalの件はまだ調査しきれてないですが、ぱっと見たところどうも以前作った読み筋パッチが悪さしてるような。PVがすごく長くなったときに、ボナのsckt_out()でバッファ長256越えてるような。そしたらたぶん改行なし尻切れ文字列を送って…まあはっきりわかりませんが。ログには"WARNING: send() failed"とか"recv() failed"とか出てます。今は読み筋止めてて、その後出なくなってるようではあるんですが。

4/30 追記:あれ?vsnprintfのman pageみると、sckt_out()のチェックでつかまりそうだな。まあコンパイラのバグってこともあるけど…

ボナンザ hash/ehashの問題点

前々回の記事はちょっと記述はしょりすぎでしたね。オープン戦の片手間に書いてたのがまずかったか…もうちょいちゃんと説明します。

>Pentium 以降の ia32 は 64bit アラインされた quadword が atomic のようです。

それはたしかにそうなんですけれども、C言語でたとえば

uint64_t a,b;
  :
a = b;

のような代入文があったとして、これを普通に32bitでコンパイルするとマシン語レベルでは32bit load 命令2つになります。ia32の一般命令には64bit loadの命令が存在しないですから。Intel マニュアルの記述はマシン語レベルの話なので、2マシン命令になれば当然ながらatomicityは保証されません(間に別のストアが入り得る)。

ia32でatomicにするには、SSEなりMMXなりの64 bit loadを指定する必要がありますが、これにはソースをいじる必要があります。64bit modeならば普通のコンパイルで64 bit loadになりますので問題ありません。

この原因によりハッシュが壊れるのは、確率的には非常に小さいでしょう。本家ボナンザでは影響は微々たるものなんだと思います。実際、以前に並列ボナのRを測ったときも32bitでやりましたが、劣化には気づきませんでした。ただ、影響が確率的に小さいというだけで、バグとしては確実に存在するはずです。

hashの方はword1,word2どちらかでも壊れるとSignKeyのためhitしないかもしれませんね。だからアサートにひっかからないのかもしれません。その意味では、hashの方はバグではないとも言えるかも。ですがehashの方は時々壊れた値を使ってると思います。ただαβ探索では1ノードで評価値間違っても全体の結果に影響与えることはまずないので、なかなか顕在化しないのでしょう。

bonasseではevaluateを差分計算しています。1コアではこの効果はかなりあったのですが、これを32bitで並列にするとぼろぼろに弱くなりました。1コアよりも弱いくらいに。この原因はと考えるにおそらく、ehashである局面で破壊が起きると、差分のためそれより下の局面全部で間違うので、本家ボナよりはるかに大きく影響が出たのではないかと推測しています。実際、まったく同じソースで64bitにするとちゃんと強くなったので、この仮説は正しいのだろうと思っています。

クラスタ環境探してます

書くの遅いですが、4/4のオープン戦はお蔭様で優勝できました。関係各位ならびに観戦者の皆様、ありがとうございました。まあ八割方はボナンザのおかげなんですけれども。

無知なもので、今泉さんのこと存じあげなかったんですよ。妙にみんな騒いでる感じだったので後でググってみたら、物凄い人とわかってビックリ^^;;; どうもお手合わせありがとうございました。またよろしくお願い致します。(>今泉さん …って読んでないか)

オープン戦は何かと注目を集めたようで、詰将棋メモに紹介されてた記事等読ませていただきました。いやー何か注目されると緊張しますね^^; 去年まで弱小チームだったんで、コンピュータ将棋関係者以外からはほとんど注目なんてされてなかったもので。

このブログは主にコンピュータ将棋関係者に向けて書いてるもので、専門用語とかやたら飛び交い、一般の方には意味不明なものになってるかもしれません。いやー申し訳ない。まあ今後も方向は変わらないかもしれませんが、コンピュータ将棋にそう詳しくない方ももちろん歓迎ですんで、お気軽にコメントなり残していってくださいませ。

さて、オープン戦を含め今までは4コアCPU x 2台の構成で動かしてきました。このレベルでは(課題はいろいろありはしますが)まあまあうまく動くようになってきたので、次のステップとしては32コアとか64コアといった規模のクラスタでもちゃんと動くのか試してみたいなーと思っております。ですが何ぶん個人でやってるもので、32コアの調達はちょっと無理。お金の問題もありますし、場所的にもPC何台もウサギ小屋に置けないですし。仮に置いたとしても電力面で、全部動かすとブレーカーが飛びます。床が抜け…まではしないか。Amazon EC2ってのもちょっと試してみたんですが、やはり仮想マシンのためか通信やプロセススイッチが遅く、私のプログラムではちょっと使いものになりませんでした。

これ、どうしたもんでしょうね?私も答え持ってないんですが、やっぱどっか大学の研究生か何かにさせてもらって、PCクラスタ使わせてもらうとかになるんでしょうか。もしかしてこのブログ読んでる方で、「うちの会社(or 大学 etc)のPCクラスタ、時々なら使ってもいいよ」とかいう太っ腹な方いらっしゃらないですかねぇ?^^;;; いやほんとマジ、クラスタ環境探してますんで、何か情報なりアイデアなりありましたらぜひお知らせくださいませ。よろしくお願い致しますm(__)m

がーん 衝撃の事実

のっぴきならない事情って何よ?の話。

bonasse 1コアが順調にいったので調子にのって4コアもやってみたのですが、なぜかあれれ~~な結果に。まあ並列まわりがおかしいだろうなのでいろいろ考えていたんですが、

またhash_storeですが、こんなふうになってますけど
  hash_word1 = ptrans_table[index].prefer.word1;
  hash_word2 = ptrans_table[index].prefer.word2;
  SignKey( hash_word2, hash_word1 );

SignKeyは知ってる人はよくご存知の例のロックレスハッシュ。「ああ、ロック不要なんだな」と思って今まで何度かコード見ましたけどまったく疑ってませんでした。でも疑いの目でもう一度考えなおすと、hash_word1/2はuint64_tなので、32bitだとロード2回になってだめです。同じ理由でehashもだめです。

対策としては1)ロックする 2)4 doublewordに対するsignkey相当を行う 3)SSEで64bit ld/stにする、等考えられますが、とりあえず64bit OSなら無変更でOKそうなので、急遽64bit OSを入れて環境を作ってトライしてみた、という次第です。保木さんもたぶん64bitでしか使ってないんでしょうね。

floodgateのbonassenはi7 860 4 core (no HT) 64bitのボナッセ。複数コアなので、語尾が-enと複数形に変化してます(何語だよ … 蘭語?)。ちなみにまたくどいようですが、ボナッセはボナンザの単なる改良版です。クラスタ並列ではなく、ボンクラーズとは別物です。ほとんど高速化のみで、アルゴリズムとかは変えてません。まあ強くなった…んじゃないかな。1コアbonasseはやはりできすぎだったんでしょう。

Ubuntu 64bit メモ

のっぴきならない事情で32bit環境から64bit環境に移行中です。また自分用やり方メモです。

isoはUbuntuのサイトから9.10をダウンロード。ふだんはだいたいムック付属CDを使ってるため32bitになるんですが、64bitのためこうなりました。実はisoからやるのははじめてだったり。UbuntuサイトのガイドどおりにCDに焼きます。

インストール自体は無事終了。前回みたいなマジックはありませんで、すんなり行きました。ただインストール後の環境設定がいくつか気をつける点があります。基本は以前の記事と同じなので、差分のみ書きます。

・iccインストール

apt-get installするもの:
g++   <- なんでこれがないんだよ orz
ia32-libs

libstdc++5もいるんですが、これはapt-getではできませんので工夫が必要です。参照したのはこちら。
http://software.intel.com/en-us/articles/using-intel-compilers-for-linux-with-ubuntu/
64bit版と32bit版両方必要です。64bit版の方は.debをとってきてextractして、手で/usr/libにコピーしました。apt-getに慣れてるとものすごく面倒に思えます^^; 32bit版の方は、今回の場合9.04 32bitが裏ディスクに入っていたので、そちらへのリンクでお茶を濁しました。まあ32bitの方は、ないとコンパイラのインストールが進まないというだけで、32bitでコンパイルする気はないので適当です。

・shogiserver

rubyもないのでapt-get orz なんかデフォルトのパッケージの選択間違ってないかUbuntu?

あとはまあOKでしたか。これを今日の午前にやって、午後からこの環境でオープン戦やってます。
あ、あと前回、「setpathなんたらを作って.bashrcに入れる」と書きましたが、これたしか.profileにも同じもの入れないとダメだったかと思います。

VTuneも入れようとしたのですが、これはいろいろトラブって結局できてません。Ubuntu 64bitにVTune入れた方いらっしゃいません?何かtipsがあるのでしたら情報大歓迎です。(9.04 32bitは入ったんだけど)

« 2010年3月 | トップページ | 2010年5月 »