忍者ブログ
コンピュータ将棋など…。
[9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

とりあえず、まだちゃんと出来ていませんが、ようやく合法手生成が動きだしてきました。
ピンはまだとか自分の駒を取る手も生成してるとか駒番号を見てないとかありますが、指し手生成ベンチで、
・例の局面 … 55万回/秒
・初期局面 … 80万回/秒
となのは改を上回ってきました!

あとは
・王手生成
・王手回避手生成
・詰ルーチン(反復深化)
・詰ルーチン(df-pn)
と進めていこう。

それにしてもプログラムはかなりれさぴょんに似てるなぁ~。
(関数名は物によってはそのままだったりするし、利きとかピンも持ってるし)
PR
インフルエンザもほぼ治ったので次回選手権に向けての方針決め。

方針:スクラッチビルド!(脱れさぴょん)
目標:ponanzaフルボッコ!

・なのはのオリジナル部分は流用する。
・BitBoardは使わず、駒番号を使う。
・進歩本2、進歩本5のYSSを参考にする。
・Inside KFEndを参考にする。
・学習でパラメータチューニング(できるのか?)
なんかやることが溜まって何にもできてないなぁ~。
とりあえず、ざっくりと列挙するとこんな感じ?

重要度高
・詰ルーチン強化(寿を解く)
・思考ルーチン強化
・Bonanza5五化

重要度中
・新 東大将棋無双II floodgate参戦

重要度低
・詰中将棋ルーチン
・指し中将棋

あと、AMDのサイトにある x86 Open64 Compiler Suite が速いようなら Linux 導入する、とか。
Linux は 64bit環境だと何がいいかなぁ~??
昔、Slackware とか Vine Linux をちょっと触ったくらい(自宅サーバはFreeBSDで作ってた)で、今は相当変わっているかな…。
Serioware GNU/Linux とか選択したら、今はもう道がないか? (x64対応してる??)

ただ、Linux だと萌え対応が出来ないw

コメントを受けて64bit環境でも試してみました。
ダウンロード(popcnt64.zip)


ただ、VS2005だと新しいSSE命令はインラインできないようです…。
32bit環境ではMMXを使ってやってみました(popcnt646_cとpopcnt64_d)が、普通に64bit変数を使うほうが速かったです(これはコードが悪い??)。

以下の結果では PhenomIIX4 940 の64bit環境ではpopcnt_a(1)<popcnt_a(2)<popcnt_a(4)<popcnt_b()なので、常にpopcnt_a()を使うのがいいのかなぁ~。

C:\home\popcnt>popcnt64_x64
64 bit環境

32bit演算
popcnt_a:00000000000000000000000000000000: 0: 0.7810 sec
popcnt_b:00000000000000000000000000000000: 0: 1.2340 sec
popcnt_a:00000000000000000000000000000001: 1: 0.6100 sec
popcnt_b:00000000000000000000000000000001: 1: 1.2340 sec
popcnt_a:10000000000000000000000000000000: 1: 0.6090 sec
popcnt_b:10000000000000000000000000000000: 1: 1.1100 sec
popcnt_a:00000000000000000000000000010001: 2: 0.7650 sec
popcnt_b:00000000000000000000000000010001: 2: 1.2500 sec
popcnt_a:00000000000000000001000100010001: 4: 1.1100 sec
popcnt_b:00000000000000000001000100010001: 4: 1.2340 sec
popcnt_a:00010001000100010001000100010001: 8: 1.7970 sec
popcnt_b:00010001000100010001000100010001: 8: 1.2500 sec
popcnt_a:01010101010101010101010101010101:16: 5.2810 sec
popcnt_b:01010101010101010101010101010101:16: 1.2500 sec
popcnt_a:11111111111111111111111111111111:32: 7.9220 sec
popcnt_b:11111111111111111111111111111111:32: 1.5310 sec

ここから64bit
popcnt64_a:0000000000000000000000000000000000000000000000000000000000000000: 0: 0.7660 sec
popcnt64_b:0000000000000000000000000000000000000000000000000000000000000000: 0: 1.5310 sec
popcnt64_a:0000000000000000000000000000000100000000000000000000000000000001: 1: 0.5940 sec
popcnt64_b:0000000000000000000000000000000100000000000000000000000000000001: 1: 1.3750 sec
popcnt64_a:0000000000000000000000000000000100000000000000000000000000000001: 2: 1.2350 sec
popcnt64_b:0000000000000000000000000000000100000000000000000000000000000001: 2: 1.3590 sec
popcnt64_a:0000000000000001000000000000000100000000000000010000000000000001: 4: 1.1870 sec
popcnt64_b:0000000000000001000000000000000100000000000000010000000000000001: 4: 1.3750 sec
popcnt64_a:0000000100000001000000010000000100000001000000010000000100000001: 8: 1.8750 sec
popcnt64_b:0000000100000001000000010000000100000001000000010000000100000001: 8: 1.3750 sec
popcnt64_a:0001000100010001000100010001000100010001000100010001000100010001:16: 5.1250 sec
popcnt64_b:0001000100010001000100010001000100010001000100010001000100010001:16: 1.3590 sec
popcnt64_a:0101010101010101010101010101010101010101010101010101010101010101:32: 7.9380 sec
popcnt64_b:0101010101010101010101010101010101010101010101010101010101010101:32: 1.3750 sec
popcnt64_a:1111111111111111111111111111111111111111111111111111111111111111:64:13.3750 sec
popcnt64_b:1111111111111111111111111111111111111111111111111111111111111111:64: 1.8750 sec

C:\home\popcnt>popcnt64_x86
32 bit環境

32bit演算
popcnt_a:00000000000000000000000000000000: 0: 1.7810 sec
popcnt_b:00000000000000000000000000000000: 0: 1.3750 sec
popcnt_a:00000000000000000000000000000001: 1: 0.7650 sec
popcnt_b:00000000000000000000000000000001: 1: 1.3590 sec
popcnt_a:10000000000000000000000000000000: 1: 0.7820 sec
popcnt_b:10000000000000000000000000000000: 1: 1.3590 sec
popcnt_a:00000000000000000000000000010001: 2: 4.5470 sec
popcnt_b:00000000000000000000000000010001: 2: 1.3590 sec
popcnt_a:00000000000000000001000100010001: 4: 5.0470 sec
popcnt_b:00000000000000000001000100010001: 4: 1.3600 sec
popcnt_a:00010001000100010001000100010001: 8: 6.2180 sec
popcnt_b:00010001000100010001000100010001: 8: 1.3600 sec
popcnt_a:01010101010101010101010101010101:16: 7.8430 sec
popcnt_b:01010101010101010101010101010101:16: 1.3750 sec
popcnt_a:11111111111111111111111111111111:32:10.5630 sec
popcnt_b:11111111111111111111111111111111:32: 1.3590 sec

ここから64bit
popcnt64_a:0000000000000000000000000000000000000000000000000000000000000000: 0: 0.6870 sec
popcnt64_b:0000000000000000000000000000000000000000000000000000000000000000: 0: 3.5790 sec
popcnt64_c:0000000000000000000000000000000000000000000000000000000000000000: 0: 6.1410 sec
popcnt64_d:0000000000000000000000000000000000000000000000000000000000000000: 0: 4.8120 sec
popcnt64_a:0000000000000000000000000000000000000000000000000000000000000001: 1: 0.9850 sec
popcnt64_b:0000000000000000000000000000000000000000000000000000000000000001: 1: 3.5780 sec
popcnt64_c:0000000000000000000000000000000000000000000000000000000000000001: 1: 6.1400 sec
popcnt64_d:0000000000000000000000000000000000000000000000000000000000000001: 1: 4.8130 sec
popcnt64_a:0000000000000000000000000000000100000000000000000000000000000001: 2: 1.2970 sec
popcnt64_b:0000000000000000000000000000000100000000000000000000000000000001: 2: 3.5780 sec
popcnt64_c:0000000000000000000000000000000100000000000000000000000000000001: 2: 6.1410 sec
popcnt64_d:0000000000000000000000000000000100000000000000000000000000000001: 2: 4.8120 sec
popcnt64_a:0000000000000001000000000000000100000000000000010000000000000001: 4: 2.2190 sec
popcnt64_b:0000000000000001000000000000000100000000000000010000000000000001: 4: 3.5790 sec
popcnt64_c:0000000000000001000000000000000100000000000000010000000000000001: 4: 6.1400 sec
popcnt64_d:0000000000000001000000000000000100000000000000010000000000000001: 4: 4.8130 sec
popcnt64_a:0000000100000001000000010000000100000001000000010000000100000001: 8: 3.9220 sec
popcnt64_b:0000000100000001000000010000000100000001000000010000000100000001: 8: 3.5780 sec
popcnt64_c:0000000100000001000000010000000100000001000000010000000100000001: 8: 6.1400 sec
popcnt64_d:0000000100000001000000010000000100000001000000010000000100000001: 8: 4.8130 sec
popcnt64_a:0001000100010001000100010001000100010001000100010001000100010001:16: 8.9380 sec
popcnt64_b:0001000100010001000100010001000100010001000100010001000100010001:16: 3.5780 sec
popcnt64_c:0001000100010001000100010001000100010001000100010001000100010001:16: 6.1250 sec
popcnt64_d:0001000100010001000100010001000100010001000100010001000100010001:16: 4.8130 sec
popcnt64_a:0101010101010101010101010101010101010101010101010101010101010101:32:15.5470 sec
popcnt64_b:0101010101010101010101010101010101010101010101010101010101010101:32: 3.5780 sec
popcnt64_c:0101010101010101010101010101010101010101010101010101010101010101:32: 6.1400 sec
popcnt64_d:0101010101010101010101010101010101010101010101010101010101010101:32: 4.8130 sec
popcnt64_a:1111111111111111111111111111111111111111111111111111111111111111:64:29.1410 sec
popcnt64_b:1111111111111111111111111111111111111111111111111111111111111111:64: 3.5930 sec
popcnt64_c:1111111111111111111111111111111111111111111111111111111111111111:64: 6.1410 sec
popcnt64_d:1111111111111111111111111111111111111111111111111111111111111111:64: 4.8120 sec
 

セットされているbitを数える関数を作ってみました。
ダウンロード(popcnt.zip)


popcnt_a はループによる数え上げ、popcnt_bはbitシフトと論理積(AND)と加算による数え上げ。
Athlon64X2 4600+ではpopcnt_bは一定の時間で終了するんだけど、セットされているbitの数だけループを回るpopcnt_aは思わぬ結果が?!

popcnt_aではセットされたbitの数が 1 が最速で以下、0、2、・・・と続きました。
Core2Duoでは確か 0 が一番でしたけど…??

以下の結果では Athlon64X2 ではpopcnt_a(1)<popcnt_b()<popcnt_a(0)<popcnt_a(2)<・・・<popcnt_a(32)なので、
常にpopcnt_b()を使うのがいいのかなぁ~。

結果:
popcnt_a:00000000000000000000000000000000: 2.3590 sec
popcnt_b:00000000000000000000000000000000: 1.9370 sec
popcnt_a:00000000000000000000000000000001: 0.7970 sec
popcnt_b:00000000000000000000000000000001: 1.9370 sec
popcnt_a:00000000000000000000000000010001: 5.9070 sec
popcnt_b:00000000000000000000000000010001: 1.9370 sec
popcnt_a:00000000000000000001000100010001: 6.5470 sec
popcnt_b:00000000000000000001000100010001: 1.9380 sec
popcnt_a:00010001000100010001000100010001: 7.8280 sec
popcnt_b:00010001000100010001000100010001: 1.9380 sec
popcnt_a:01010101010101010101010101010101: 9.9840 sec
popcnt_b:01010101010101010101010101010101: 1.9380 sec
popcnt_a:11111111111111111111111111111111:13.5150 sec
popcnt_b:11111111111111111111111111111111: 1.9380 sec


忍者ブログ [PR]
カレンダー
03 2024/04 05
S M T W T F S
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
フリーエリア
なのはの応援をしていただき、かつ協力いただける方は、アマゾンでの買い物は下のリンクからお願いします
最新CM
[04/27 とおりすがり]
[10/21 おてだま]
[10/20 おてだま]
[01/24 なのはminiふぁん]
[01/08 sakura]
最新TB
プロフィール
HN:
かず
性別:
非公開
バーコード
ブログ内検索
最古記事
カウンター
アクセス解析