2009-01-01から1年間の記事一覧

漫遇将棋は人ごとではないという話

現在、私の書いているコンピュータ将棋のソース分量は1MB程度です。 私の場合、ソース中のコメントが非常に多いので、実際のプログラム行だけならばその1/3程度です。 しかし、高速化のためにパズルのような技法をいくつも使ってあります。私のソース中のコ…

fv.binがライブラリではないだなんて、おかしいと思います!

※ 本日の件名↑は、私の意見ではございません。 「Spearがfv.binを同梱している件」*1でBonanzaのfv.bin(評価関数のパラメータ)を自力学習させた場合は、ライブラリ扱いなのかどうか?というのが問題となっていた。 そもそも、何故、ライブラリに含まれるかそ…

PinCheck機構つきのMakeMoveの提案

■ 「pin」という用語の定義 駒を動かすと王手になる駒は「pinされている」と言う。 玉金 ^飛 のようになっていれば(飛車は後手の飛車)、金を右以外に動かすと玉をとられてしまう。すなわち、非合法手である。 このとき「金は、横方向にpinされている」と言う…

開発メモ : Xeon X5680のこと。

Intels 32 nm-Westmere-Xeons im März 2010 http://www.hardware-infos.com/news.php?news=3344 やはり、Gulftown(Core i9)とそのXeon版である5600シリーズは、来年3月に登場するようだ。 X5680 6x 3,33 GHz 12 MB 130 W。 あと、最初のGulftownはCore i9で…

プログラム開発の際に工夫したことをアピールする文書

プログラム開発の際に工夫したことをアピールする文書を3月末までに提出することが推奨となりました。 ※大会ルール 第2章「参加資格」 第3条 第1項の「参加プログラムは、思考部について、自力で十分な工夫を施したものに限る。」を満たすことをアピール…

LS3600とは何者か?

私のハンドルの"LS3600"というのは、LispShogi R3600の略です。 「LispでR3600のコンピュータ将棋を作るぞ!」という気迫の現われです。 LS3600とは誰であるか、すでに誰もが気づいてはいるでしょうが、コメント欄に書かれた場合、申し訳ないですがそのコメ…

64bit環境向けBitboard、RBBの提案

■ 64bit環境に適したBitboard、RBBが何故必要なのか? 将棋盤は81マスあり、Bitboardでこれを表現しようと思うと81bit必要です。64bit環境であれば、64bitレジスタが使用できるのですが、81bitは64bitレジスタ1つには収まりません。そこで、64bit変数1つと32…

開発メモ : Core i7のマシンが意外にショボすぎる件

先日実験用に購入したCore i7 860 2.8GHzのマシン、Turbo Boostがかかっているはずなのですが、Turbo Boostがかかっているはずの状態でやっとCore 2 Duo 2.8GHzより10%ほど速い程度のようです。コア比較なら、同クロックのCore 2 Duoより遅いです。そういう…

x64環境での指し手生成祭り

とりあえず、普通の(差分ではない)指し手生成の速度は、次のようになりました。 マシンは、学習/実験用に購入したCore i7 860 2.8GHz、1コアにて検証です。 ・初期局面 : 6.12M回/sec ・指し手生成祭りの局面*1 : 3.24M回/sec 高速化のためにx64に適した特殊…

開発メモ : x64用にコンパイルしなおすデメリット

昨日の記事で、x64用にコンパイルしなおすメリットを書きましたが、通常は以下のようなデメリットのほうがそれらを上回ります。 ポインタ、関数アドレスなどがすべて64bit幅になるので、プログラムのサイズが増えます。その結果、L1/L2/L3 cacheに収まらなく…

開発メモ : x64用にコンパイルしなおすメリット

一般的に言って、なにかのプログラムをx64用にコンパイルしなおすと、x86のバイナリより遅い実行結果になることが多いです。理由はいろいろあるのですが、今回はまずはx64のメリットを書いておきます。 x64用にコンパイルしなおすメリット 1) アドレス空間が…

将棋ファン向け : 利きの逆算について

今回は、Bonanzaで使われている特殊な利きテーブルについて解説します。今回は、プログラマではなく将棋ファンの方にも読んでもらえる内容だと思うので、将棋ファン向けに少し丁寧に書きます。 解説が長いのでまず問題だけ書きます。 問1) 後手玉に対して、…

クラウドコンピューティングを用いたコンピュータ将棋の開発

いまどきのコンピュータ将棋は、棋譜からパラメータを学習させなければ上位陣には太刀打ちできない。(らしい) 評価関数としていろいろな関数形を試そうにも、実装 → 学習(場合によっては1ヶ月) → 以前のバージョンなどと自己対戦(細かい変更だと有意差かどう…

popcntを用いたbitboardに対するforeachの高速化手法の提案

1であるbit位置を探す命令としてbsf(BitScanForward)がある。bitboardに対するforeachはこれを用いて行なう。bsr(BitScanReverse)ではなく、bsfを使うのは、bsfなら、そのあとそのbitを0にするのに、u &= u -1;という技が使えるからである。(→ http://d.hate…

Spearがfv.binを同梱している件

floodgateのSpear(→ http://www.teu.ac.jp/gamelab/SHOGI/SPEAR/spearmain.html )の評価値がBonanzaと酷似していることが、一部の人の間で話題になっていた。私も以前から気になっていたのだが、最近ちょうど某巨大掲示板のほうで話題になっていたのでこれを…

開発メモ : L1メモリのアクセスが遅すぎる件

NehalemはcacheはLevel 3までと、より深い階層の構成をとりました。しかし、L1Dのlatencyは3→4 cycleに増えています。また、地味なところで連想数も8→4 wayに落ちています。Cache遅延は、配線遅延によるものが大きく、おかげで微細化とともに増加の一途をた…

floodgateの参加ハードウェアのまとめ

「これを機に、参加されている方はマシンのスペック等を公開してみませんか。」と書いた(→ http://d.hatena.ne.jp/LS3600/20091212 )ところ、いろいろ情報が集まりました。(2chのコンピュータ将棋スレでBONA-normalの人が以下のようにまとめてらっしゃいまし…

開発メモ : 開発が牛歩の歩みである件

高速化のためにごちゃごちゃやっていると、1日、2日があっという間にすぎていく。丸1日かかって10行ほどの関数を書いたり、3日間、チラシの裏にボールペンで書き殴っているだけで1行もプログラムが進まなかったり、1週間かかって、結局いままで書いていたプ…

開発メモ : Visual Studio 2010β2は安定している

実験用のマシンが届いたので、そのマシンにWindows Server 2008 R2をインストールして、Visual Studio 2010β2をインストールしてみた。 試しに本家BonanzaをVC++2010β2でx64用にコンパイルしてみたら、何の問題もなくコンパイルされ、何の問題もなく動いた。…

floodgateの激指は、本当に強いですか?

北陸での決戦にそなえてぐんぐん力を蓄えている。。。 やっぱり鶴岡さんすごいや。。。 こ、これが激指の本気か。。http://d.hatena.ne.jp/issei_y/20091210 R2577でBonanzaを抜いてる! 大会と違って、PCが低スペックとか色々と不確定要素はあるでしょうけ…

開発メモ : 学習用マシンを選ぶ

学習(棋譜からのパラメータ学習)とx64での動作テストをするのに本番マシンに近いアーキテクチャのマシンが必要なのだが、来年にはCore i9が出るのにいまCore i7 Extreme Edition 975(以下、975と表記)を買うのはどうかと思う。 975は、半年ほど前に発売され…

開発メモ : __uint64のこと

x86環境ではVisual Studio 2008 の u64(← __uint64のこと)に関する最適化がとてもひどいことになる。 レジスタ割り当てが阻害されるというレベルを通り越している。 u64に対するシフトは勝手に組み込み関数を呼び出すcall命令に変換されたり、u64の下位32bit…

開発メモ : Core i7/Core i9は遅いのではないのか

Core i7のL2は小さすぎる。Core 2シリーズでは4MB前後あったL2が、次のようになっている。 L2:256KB×4 L3:8MB L2がコアごとに256KBしかないので、コンピュータ将棋で使うような利きを求めるためのlook upテーブルすらL2には載るかどうか怪しい。Magic Bitb…

開発メモ : Magic Bitboardsは使わないことに

※ 開発メモと書いてあるのは、自分用のメモです。意味不明なところが多々あるかも知れませんが、あとで、こんなことをこの時期に考えていたと思い返すために残しておきます。 Magic Bitboardsが本当に速いのか検討した結果、コンピュータ将棋には向かないと…

今月がタイムリミットです

何の気まぐれか、私はコンピュータ将棋開発用のコンパイラを作ることになりました。(→ http://d.hatena.ne.jp/LS3600/20091125 ) 幸いにして、20時間程度でこのコンパイラ自体はある程度形になりました。 いまから、このコンパイラ向けにコンピュータ将棋を…

next.cについて保木さんとのメール

今回は、探索に深く関係すると思われる、指し手オーダリング(next.c)について保木さんと私がメールでやりとりした内容のうち、他の開発者の役に立ちそうな部分を保木さんの許可を得て、いくつか抜き出して紹介します。 私から保木さんへの質問。 if ( sortv …

Bonanzaの3手詰み判定関数はどういう処理になっているのか【前編】

1手詰みの解説が終わったので今回は3手詰み。 3手詰み判定はmate3ply.cに書いてある。 "3手詰み" というのは名ばかりで、すぐに取り替えされる中合いをした場合などはそれを王手していた駒で取ってみてそれで詰むかどうかを調べる。 そこで、この判定関数は…

Xeon W5590は本当に速いのか?

いま、Xeon 5500系の最高峰であるXeon W5590×Dualのマシンはいくらでしょう? Dell Precision T5500でOSなし(linuxモデル)で、W5590×Dual + 12GBメモリを選択すると786,135円だそうです。 コンピュータ将棋大会用のマシンとして個人で手が届く範囲なのはこの…

YSSベンチは何故駄目なのか

将棋ソフトに適したマシンを探る指針としてYSSベンチ(→ http://www32.ocn.ne.jp/~yss/bench.html )は長らく利用されてきました。 しかし、いまや新しいデータを投稿する人すらほとんどいません。コンピュータ将棋関係者ですらほとんどの人はスコアを投稿して…

Bonanzaの1手詰み判定関数はどういう処理をしているのか

■ Bonanzaの詰み判定ルーチン Bonanzaの詰み判定は1手詰み判定(mate1ply.c)と3手詰み判定(mate3ply.c)とがある。今回は前者を解説。 ■ mate1ply.c // 1手詰みチェック関数を手番に応じて呼び分けるためのマクロ #define IsMateIn1Ply(turn) \ ( (turn) ? is_…