Henk wrote:[d] r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 1
How much time does your engine need to compute KiwiPete perft(4) = 4085603 ?
Skipper needs 18 seconds.
4,085,603 / 18 = 226,977 nodes per second. That's slower than my engine (Perft(6) gives 853,228NPS), and I'm using Copy-Make on unaligned structures...
No it was 4 seconds. It collects all moves in a list and that is not necessary. But I don't think it is that important for now. Only if I get tired waiting for perft to finish.
I'm more interested in the speed of Skipper's normal chess playing.
Henk wrote:No it was 4 seconds. It collects all moves in a list and that is not necessary. But I don't think it is that important for now. Only if I get tired waiting for perft to finish.
I'm more interested in the speed of Skipper's normal chess playing.
These are inherently interlinked. Perft is kind of an upper bound for your chess speed - if your perft is slow, your normal chess won't be any faster.
Well, not really. Perft can be slow because you have to check legality of the moves. Which, in a King-capture engine would basically force you to do an extra ply of move generation to detect if their are King captures in the perft leaves. That would make the eprft slow even in a fast engine.
hgm wrote:Well, not really. Perft can be slow because you have to check legality of the moves. Which, in a King-capture engine would basically force you to do an extra ply of move generation to detect if their are King captures in the perft leaves. That would make the eprft slow even in a fast engine.
Note the use of "kind of". If your move ordering is worst-case, let's say, then you're doing a slower perft, which is where I got my idea of upper bound from, but I suppose you're right.
Having sufficiently debugged my program enough to get a correct result for KiwiPete(4), I have:
hgm wrote:Well, not really. Perft can be slow because you have to check legality of the moves. Which, in a King-capture engine would basically force you to do an extra ply of move generation to detect if their are King captures in the perft leaves. That would make the eprft slow even in a fast engine.
Note the use of "kind of". If your move ordering is worst-case, let's say, then you're doing a slower perft, which is where I got my idea of upper bound from, but I suppose you're right.
Having sufficiently debugged my program enough to get a correct result for KiwiPete(4), I have:
hgm wrote:Well, not really. Perft can be slow because you have to check legality of the moves. Which, in a King-capture engine would basically force you to do an extra ply of move generation to detect if their are King captures in the perft leaves. That would make the eprft slow even in a fast engine.
Note the use of "kind of". If your move ordering is worst-case, let's say, then you're doing a slower perft, which is where I got my idea of upper bound from, but I suppose you're right.
Having sufficiently debugged my program enough to get a correct result for KiwiPete(4), I have:
On a debug build. That number would probably go down with the aid of optimisation and SSE, and possibly (to be tested) a 64-bit compile.
Matthew:out
You should be able to reach this fairly easily. Crafty has a plain vanilla perft, no hashing or anything tricky...
White(1): r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 1
White(1): perft 4
total moves=4085603 time=0.09
White(1): perft 5
total moves=193690690 time=4.31
White(1): perft 6
total moves=8031647685 time=177.86
I'm currently debugging my UnmakeMove function, since the 5 second figure was done with copy-make, which is really not ideal.
With optimisation flags, I got the number to 3.25 seconds copy-make, which is still fairly slow. An obvious speedup would be to not copy over the attack tables, since they get regenerated immediately afterwards.