Rustic @ i7-6700K. No bulk-counting, 1 thread. First set is without TT, second is with a TT of 1 MB. Even a 1 MB TT improves the result by 30%.
Speed without hash is 3.28 seconds for perft 6, which is 10 times faster than your engine. Even if you are not using magic bitboards, the speed difference shouldn't be that big. And, because of implementing incremental evaluation, the engine took a speed hit of about 10%; it could have been even faster. At the moment though, I'm not optimizing for perft speed anymore. I did that to remove bottlenecks from make/unmake, and the move generator, and those haven't changed for a long time. The "only" thing left in that regard is to add enhancements to the move generator.
I'd be looking for things like unnecessary allocations or copies in loops within your move generator, make/unmake, and maybe the perft-function itself.
Code: Select all
Hash table: disabled.
Perft 1: 20 (0 ms, inf leaves/sec)
Perft 2: 400 (0 ms, inf leaves/sec)
Perft 3: 8902 (0 ms, inf leaves/sec)
Perft 4: 197281 (5 ms, 39456200 leaves/sec)
Perft 5: 4865609 (140 ms, 34754350 leaves/sec)
Perft 6: 119060324 (3283 ms, 36265709 leaves/sec)
Perft 7: 3195901860 (94987 ms, 33645676 leaves/sec)
Total time spent: 98415 ms
Execution speed: 33735044 leaves/second
Code: Select all
Hash table: 1 MB
Perft 1: 20 (0 ms, inf leaves/sec)
Perft 2: 400 (0 ms, inf leaves/sec)
Perft 3: 8902 (0 ms, inf leaves/sec)
Perft 4: 197281 (5 ms, 39456200 leaves/sec)
Perft 5: 4865609 (97 ms, 50160917 leaves/sec)
Perft 6: 119060324 (2131 ms, 55870635 leaves/sec)
Perft 7: 3195901860 (60747 ms, 52610036 leaves/sec)
Total time spent: 62980 ms
Execution speed: 52715693 leaves/second