Hamsters 0.4x on my Mac Mini (1.6 GHz Intel Core Duo).

With hashing:

Code: Select all

```
Hamsters 0.4.1 dev X by Alessandro Scotti
s r3k2r/p6p/8/8/8/8/P6P/R3K2R w - - 0 1
p 7
D = 1, N = 14 / 14, T = 0 ms (0 KNps)
D = 2, N = 192 / 206, T = 0 ms (0 KNps)
D = 3, N = 3466 / 3672, T = 1 ms (3672 KNps)
D = 4, N = 60120 / 63792, T = 5 ms (12758 KNps)
D = 5, N = 1223784 / 1287576, T = 51 ms (25246 KNps)
D = 6, N = 24161970 / 25449546, T = 521 ms (48847 KNps)
D = 7, N = 528388659 / 553838205, T = 4567 ms (121269 KNps)
```

Without hashing (here the perft style of 0.3 would be better but anyway...):

Code: Select all

```
s r3k2r/p6p/8/8/8/8/P6P/R3K2R w - - 0 1
p 7
D = 1, N = 14 / 14, T = 0 ms (0 KNps)
D = 2, N = 192 / 206, T = 0 ms (0 KNps)
D = 3, N = 3466 / 3672, T = 0 ms (0 KNps)
D = 4, N = 60120 / 63792, T = 5 ms (12758 KNps)
D = 5, N = 1223784 / 1287576, T = 91 ms (14149 KNps)
D = 6, N = 24161970 / 25449546, T = 1838 ms (13846 KNps)
D = 7, N = 528388659 / 553838205, T = 37911 ms (14608 KNps)
```

IIRC the biggest improvement to perft speed came from the pseudo-legality test and also good handling of in-check positions doesn't hurt either.

By comparison, here's Kiwi on the same machine (Kiwi does not use these techniques, so it will try to perform a move just to discover it's illegal):

Code: Select all

```
setboard r3k2r/p6p/8/8/8/8/P6P/R3K2R w - - 0 1
perft 7
perft: depth=7, FEN=r3k2r/p6p/8/8/8/8/P6P/R3K2R w - - - -
depth=1, nodes=14
depth=2, nodes=192
depth=3, nodes=3466
depth=4, nodes=60120
depth=5, nodes=1223784
depth=6, nodes=24161970
depth=7, nodes=528388659
perft complete: total=553838205 nodes in 124.220 seconds (4458 KNps)
```