がーん 衝撃の事実
のっぴきならない事情って何よ?の話。
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 メモ | トップページ | クラスタ環境探してます »
「将棋プロセサ」カテゴリの記事
- ボンクラーズの開発過程について書いた記事が掲載されました(2019.03.07)
- 「浅い評価値を深い評価値に近づける学習法」誕生の背景(2016.10.06)
- 塚田九段の対ボンクラーズ練習棋譜を公開します(2013.09.07)
- Puella α ソース公開(2013.08.28)
- クラスタ並列の解説記事を公開します(2013.08.22)
>hash_word1/2はuint64_tなので、32bitだとロード2回になってだめです
平たく言うと、32bitOSでは、
Bonanza4系のハッシュロックは働いていない
ということでしょうか?
投稿: mkomiya | 2010年4月 5日 (月) 15時41分
はい、私はそう理解しています。
投稿: A級 | 2010年4月 5日 (月) 17時23分
お世話様です。
http://download.intel.com/design/processor/manuals/253668.pdf
の 8.1.1 によると、Pentium 以降の ia32 は 64bit アラインされた quadword が atomic のようです。
Bonanza ではハッシュがおかしくなって、格納された指し手が非合法になった場合の動作は不定です。恐らく落ちます。
ハッシュキーの衝突でもこの現象は起こりえることなので、厳密にはこれはバグともいえますが、まぁ問題無いでしょう。。。 と、とにかく、選手権では頑張ってください!
どうしても心配ならば valid.c で定義されている関数でチェックしてください。
投稿: hoki | 2010年4月15日 (木) 23時29分
p.s. ところで、何故かは分からないのですが、64 bit 環境でも 32bit executable の方が探索が速いようです。
投稿: hoki | 2010年4月15日 (木) 23時32分
hokiさん、コメントありがとうございます。
説明長くなりますので次の記事で。
選手権、ご活躍を期待しております。
投稿: A級 | 2010年4月16日 (金) 11時58分