初期局面の指し手生成速度を調査

http://d.hatena.ne.jp/LS3600/comment?date=20091122#c

> 移動手(打つのでない手)はどうなんですか?平手初期配置(30手)だと何M回/secなんでしょう?

それがかなり遅くてですね、前回の私の指し手生成ルーチンではBonanzaのアルゴリズムを引きずっていて、
平手の初期局面はVC++ PGOなしで3.5M回/sec(マシンはCore2Duo2.8GHz)しか出なくて、
指し手生成ルーチン自体を64bit化にともない全面的に書き直し中です。

LS3600さんとこで初期局面の指し手の生成速度の話が出ていたので試しに量りました

te=30 △96歩△86歩△76歩△66歩△56歩△46歩△36歩△26歩△16歩△78銀△68銀△48銀△
38銀△78金△68金△58金△58金△48金△38金△78飛△68飛△58飛△48飛△38飛△18飛△98
香△18香△68王△58王△48王
#1 2518891.7回/sec 100万回time=0.397秒
#2 2493765.6回/sec 100万回time=0.401秒
#3 2518891.7回/sec 100万回time=0.397秒
#4 2487562.2回/sec 100万回time=0.402秒
#5 2506265.7回/sec 100万回time=0.399秒
AVG 2505075.4回/sec


LS3600さんは3.5M回/secの模様。
misakiは2.5M回/secでなかなか健闘してるカモ
(ただし、うちはCore2Extram(65n)3Ghzだけど、古いCPUなのでL1とかL2が少ない)。
それでも1M以上の差がありますねえ……
ま、LS3600さんは尋常じゃない人なので追いつくのはおそらく無理でしょうw


forceinline増やしたら激速した。うーんまだ精神的に守りに入っていたようだ。

#1 3300330.0回/sec 100万回time=0.303秒
#2 3289473.7回/sec 100万回time=0.304秒
#3 3311258.3回/sec 100万回time=0.302秒
#4 3311258.3回/sec 100万回time=0.302秒
#5 3300330.0回/sec 100万回time=0.303秒
AVG 3302530.0回/sec

っていうかLS3600さんに追いついてるじゃんw

さらにチューニングして

#1 3415300.5回/sec 500万回time=1.464秒
#2 3422313.5回/sec 500万回time=1.461秒
#3 3415300.5回/sec 500万回time=1.464秒
#4 3417635.0回/sec 500万回time=1.463秒
#5 3417635.0回/sec 500万回time=1.463秒
AVG 3417636.8回/sec


序盤は高速化して深く読んでも仕方ないので、高速化は終盤をターゲットに考えないと意味が無いと思います。
打つ手が多い終盤はやはりdropを高速化することには意味があるでしょう。
(とはいえ、まずはGenCapから生成するんでしょうから、静止探索も含めてGenCapの高速化は重要でしょうけど)


3GHzのとき1サイクルは1/3nsなので、3サイクルが1ns。3x10億サイクルが1sec。
3.4Mx30手に3x10億サイクルかかってるってことは、1手のサイクルは、10億/3千4百万=29サイクル
とうことで、移動手には29サイクルぐらいかかってるって計算になる。