2024年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

« Ubuntu 64bit メモ | トップページ | クラスタ環境探してます »

がーん 衝撃の事実

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

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 メモ | トップページ | クラスタ環境探してます »

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

コメント

>hash_word1/2はuint64_tなので、32bitだとロード2回になってだめです

 平たく言うと、32bitOSでは、
 Bonanza4系のハッシュロックは働いていない
 ということでしょうか?

はい、私はそう理解しています。

お世話様です。

http://download.intel.com/design/processor/manuals/253668.pdf

の 8.1.1 によると、Pentium 以降の ia32 は 64bit アラインされた quadword が atomic のようです。

Bonanza ではハッシュがおかしくなって、格納された指し手が非合法になった場合の動作は不定です。恐らく落ちます。

ハッシュキーの衝突でもこの現象は起こりえることなので、厳密にはこれはバグともいえますが、まぁ問題無いでしょう。。。 と、とにかく、選手権では頑張ってください!


どうしても心配ならば valid.c で定義されている関数でチェックしてください。

p.s. ところで、何故かは分からないのですが、64 bit 環境でも 32bit executable の方が探索が速いようです。

hokiさん、コメントありがとうございます。
説明長くなりますので次の記事で。
選手権、ご活躍を期待しております。

コメントを書く

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

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

トラックバック


この記事へのトラックバック一覧です: がーん 衝撃の事実:

« Ubuntu 64bit メモ | トップページ | クラスタ環境探してます »