Ed Gilbert wrote:Bert,
I think if you want to use Perft for move generator benchmarks, then we have to make the modification which they call bulk counting at the Perft web page. The description of bulk counting also points this out, that it gives a better indication of move generator speed. I made the bulk counting modification, and now I get these results for your comparison.
{game start position}
perft -d11
perft(1) 9 nodes, 0.00 sec, 9 knodes/sec
perft(2) 81 nodes, 0.00 sec, 81 knodes/sec
perft(3) 658 nodes, 0.00 sec, 658 knodes/sec
perft(4) 4265 nodes, 0.00 sec, 4265 knodes/sec
perft(5) 27117 nodes, 0.00 sec, 27117 knodes/sec
perft(6) 167140 nodes, 0.00 sec, 167140 knodes/sec
perft(7) 1049442 nodes, 0.02 sec, 61732 knodes/sec
perft(8) 6483961 nodes, 0.14 sec, 45986 knodes/sec
perft(9) 41022423 nodes, 0.86 sec, 47645 knodes/sec
perft(10) 258895763 nodes, 5.30 sec, 48867 knodes/sec
perft(11) 1665861398 nodes, 32.80 sec, 50792 knodes/sec
{test position with 530 redundant moves at the start}
perft -d9 -f B:W6,9,10,11,20,21,22,23,30,K31,33,37,41,42,43,44,46:BK17,K24.
perft(1) 14 nodes, 0.00 sec, 14 knodes/sec
perft(2) 55 nodes, 0.00 sec, 55 knodes/sec
perft(3) 1168 nodes, 0.00 sec, 1168 knodes/sec
perft(4) 5432 nodes, 0.00 sec, 5432 knodes/sec
perft(5) 87195 nodes, 0.00 sec, 87195 knodes/sec
perft(6) 629010 nodes, 0.00 sec, 629010 knodes/sec
perft(7) 9041010 nodes, 0.14 sec, 64121 knodes/sec
perft(8) 86724219 nodes, 1.27 sec, 68448 knodes/sec
perft(9) 1216917193 nodes, 18.22 sec, 66790 knodes/sec
{Position from a Woldouby game}
perft -d15 -f W:W25,27,28,30,32,33,34,35,37,38:B12,13,14,16,18,19,21,23,24,26.
perft(1) 6 nodes, 0.00 sec, 6 knodes/sec
perft(2) 12 nodes, 0.00 sec, 12 knodes/sec
perft(3) 30 nodes, 0.00 sec, 30 knodes/sec
perft(4) 73 nodes, 0.00 sec, 73 knodes/sec
perft(5) 215 nodes, 0.00 sec, 215 knodes/sec
perft(6) 590 nodes, 0.00 sec, 590 knodes/sec
perft(7) 1944 nodes, 0.00 sec, 1944 knodes/sec
perft(8) 6269 nodes, 0.00 sec, 6269 knodes/sec
perft(9) 22369 nodes, 0.00 sec, 22369 knodes/sec
perft(10) 88050 nodes, 0.00 sec, 88050 knodes/sec
perft(11) 377436 nodes, 0.02 sec, 23590 knodes/sec
perft(12) 1910989 nodes, 0.06 sec, 29859 knodes/sec
perft(13) 9872645 nodes, 0.28 sec, 35009 knodes/sec
perft(14) 58360286 nodes, 1.60 sec, 36590 knodes/sec
perft(15) 346184885 nodes, 9.38 sec, 36922 knodes/sec
-- Ed
Thanks to Ed for running my code on his fast quad core: here are my fully optimized perft() timings. I think I can claim the speed record now [img]
images/smilies/icon_cool.gif[/img]
Code: Select all
b b b b b
b b b b b
b b b b b
b b b b b
. . . . .
. . . . .
w w w w w
w w w w w
w w w w w
w w w w w
"W:B1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20:W31,32,33,34,35,36,37,38,
39,40,41,42,43,44,45,46,47,48,49,50"
Starting position: searching to nominal depth=11
perft( 1) 9 moves, 0.00 sec, 0.01 Mnps (b=-1.#J)
perft( 2) 81 moves, 0.00 sec, 0.08 Mnps (b=-1.#J)
perft( 3) 658 moves, 0.00 sec, 0.66 Mnps (b=-1.#J)
perft( 4) 4265 moves, 0.00 sec, 4.26 Mnps (b=-1.#J)
perft( 5) 27117 moves, 0.00 sec, 27.12 Mnps (b=-1.#J)
perft( 6) 167140 moves, 0.02 sec, 9.83 Mnps (b=-1.#J)
perft( 7) 1049442 moves, 0.02 sec, 65.59 Mnps (b=-1.#J)
perft( 8) 6483961 moves, 0.10 sec, 68.25 Mnps (b=-1.#J)
perft( 9) 41022423 moves, 0.56 sec, 72.73 Mnps (b=-1.#J)
perft(10) 258895763 moves, 3.59 sec, 72.04 Mnps (b=-1.#J)
perft(11) 1665861398 moves, 22.61 sec, 73.68 Mnps (b=-1.#J)
. . . . .
w . . w w
w . . . .
. B . . w
w w w B .
. . . . w
W . w . .
. w . . .
w w w w .
w . . . .
"B:BK17,K24:W6,9,10,11,20,21,22,23,30,K31,33,37,41,42,43,44,46"
Starting position: searching to nominal depth=9
perft( 1) 14 moves, 0.00 sec, 0.01 Mnps (b=-1.#J)
perft( 2) 55 moves, 0.00 sec, 0.06 Mnps (b=-1.#J)
perft( 3) 1168 moves, 0.00 sec, 1.17 Mnps (b=-1.#J)
perft( 4) 5432 moves, 0.00 sec, 5.43 Mnps (b=-1.#J)
perft( 5) 87195 moves, 0.00 sec, 87.19 Mnps (b=-1.#J)
perft( 6) 629010 moves, 0.02 sec, 37.00 Mnps (b=-1.#J)
perft( 7) 9041010 moves, 0.08 sec, 114.44 Mnps (b=-1.#J)
perft( 8) 86724219 moves, 0.88 sec, 99.00 Mnps (b=-1.#J)
perft( 9) 1216917193 moves, 12.11 sec, 100.49 Mnps (b=-1.#J)
. . . . .
. . . . .
. b b b .
b . b b .
b . b b w
b w w . w
. w w w w
. w w . .
. . . . .
. . . . .
"W:B12,13,14,16,18,19,21,23,24,26:W25,27,28,30,32,33,34,35,37,38"
Starting position: searching to nominal depth=15
perft( 1) 6 moves, 0.00 sec, 0.01 Mnps (b=-1.#J)
perft( 2) 12 moves, 0.00 sec, 0.01 Mnps (b=-1.#J)
perft( 3) 30 moves, 0.00 sec, 0.03 Mnps (b=-1.#J)
perft( 4) 73 moves, 0.00 sec, 0.07 Mnps (b=-1.#J)
perft( 5) 215 moves, 0.00 sec, 0.22 Mnps (b=-1.#J)
perft( 6) 590 moves, 0.00 sec, 0.59 Mnps (b=-1.#J)
perft( 7) 1944 moves, 0.00 sec, 1.94 Mnps (b=-1.#J)
perft( 8) 6269 moves, 0.00 sec, 6.27 Mnps (b=-1.#J)
perft( 9) 22369 moves, 0.00 sec, 22.37 Mnps (b=-1.#J)
perft(10) 88050 moves, 0.00 sec, 88.05 Mnps (b=-1.#J)
perft(11) 377436 moves, 0.02 sec, 22.20 Mnps (b=-1.#J)
perft(12) 1910989 moves, 0.05 sec, 39.81 Mnps (b=-1.#J)
perft(13) 9872645 moves, 0.22 sec, 44.88 Mnps (b=-1.#J)
perft(14) 58360286 moves, 1.17 sec, 49.75 Mnps (b=-1.#J)
perft(15) 346184885 moves, 6.97 sec, 49.67 Mnps (b=-1.#J)