指し手生成・後の祭り
一日10分ぐらいはパズルゲームと思ってチューニング続行w
飛車と角を持ってる場合持ってない場合で場合わけして15%程度高速化。
199手のほとんどが打手なので、打手に対する改良はダイレクトに効果が出ますね。
(一般に、将棋で手が多い場合は打手が多いのでしょうし)
#1 1164144.4回/sec 100万回time=0.859秒 #2 1172332.9回/sec 100万回time=0.853秒 #3 1166861.1回/sec 100万回time=0.857秒 #4 1146789.0回/sec 100万回time=0.872秒 #5 1157407.4回/sec 100万回time=0.864秒
持ち駒を全パターン作るのも面倒なので、対象局面の状態のパターンだけ作成
(理屈上は全パターン作った場合と同じ速度のはず)
#1 1269035.5回/sec 100万回time=0.788秒 #2 1277139.2回/sec 100万回time=0.783秒 #3 1275510.2回/sec 100万回time=0.784秒 #4 1282051.3回/sec 100万回time=0.780秒 #5 1282051.3回/sec 100万回time=0.780秒
27%速度アップ。これ以上はなかなか速度アップできないかも〜
手の構造関係をいじって150万回/sec超えた!
#1 1531393.6回/sec 100万回time=0.653秒 #2 1529052.0回/sec 100万回time=0.654秒 #3 1531393.6回/sec 100万回time=0.653秒 #4 1526717.6回/sec 100万回time=0.655秒 #5 1533742.3回/sec 100万回time=0.652秒 AVG 1530459.8回/sec
http://d.hatena.ne.jp/LS3600/20091110
■ 追記(2009/11/18) http://d.hatena.ne.jp/LS3600/20091117にある、BitScanForwardを使うように変更したところ5%ほど高速化しました。 あと、細かいところ少しいじって3%ほど高速化しました。5M回1937[ms]で2.58M/secで記録更新しました
LS3600さんは改良して今は2.58M/secらしい
でも、差は2倍は離れてないのでだいぶ追いついてきました
akiさんもyaneLisp改造してまで指し手の高速化に取り組んでる模様
YaneLispの改造
http://d.hatena.ne.jp/ak11/20091122#p1
forceinlineを増やして1.79M回/secまで来た!
#1 1798561.2回/sec 100万回time=0.556秒 #2 1795332.1回/sec 100万回time=0.557秒 #3 1788908.8回/sec 100万回time=0.559秒 #4 1795332.1回/sec 100万回time=0.557秒 #5 1801801.8回/sec 100万回time=0.555秒 AVG 1795987.2回/sec