Hello:
Welcome to TalkChess!
I am not a programmer, so please take my answer with care. I think that the main objective of perft is correctness, so I would not care too much about perft speeds if you are programming a chess engine unless you want to focus on a perft counter.
Having said that, there are several techniques to boost perft speeds: hash, bulk counting, multi-thread... Even a lone number of speed is misleading because it heavily depends on the hardware: a very fast perft counter running on a very slow hardware can be slower than a slow perft counter running on very fast hardware. I think you should stick to your hardware and run benchmarks, as you already did with SF.
------------
Here is a short list with interesting perft counters that work on
Windows. Probably some of them do not run under Ubuntu.
There is a fast, single-core dedicated perft counter called
JetChess:
https://web.archive.org/web/20080901011 ... /jetchess/
https://web.archive.org/web/20150402020 ... .0.0.0.zip
Which is a user friendly GUI and will give you a very high standard, but please do not get frustrated if you do not get paired with it.
There was other even faster multi-core perft counter called
gperft, but it is not available anymore.
Other fast perft counter is
qperft, easily available; qperft counts recursively, this is, if you go to perft(3) of a given position, it computes perft(1), perft(2) and perft(3), not only perft(3).
So I ran benchmarks of Perft(7) of the starting position in my PC with SF 16, qperft, JetChess 1.0.0.0 and gperft 1.1 to compare:
Code: Select all
Perft(7) of the starting position: 3,195,901,860
Total times for each qperft run [Perft(1) + Perft(2) + ... + Perft(6) + Perft(7)]
=======================================================================
ENGINE / COUNTER HASH (MB) THREADS TIME (M:SS.sss)
=======================================================================
gperft 1.1 64 2 0:00.815
gperft 1.1 64 2 0:00.866
gperft 1.1 128 1 0:01.465
gperft 1.1 64 1 0:01.485
gperft 1.1 0 2 0:03.494
qperft 128 1 0:04.369
qperft 256 1 0:04.433
JetChess 1.0.0.0 64 1 0:04.498
JetChess 1.0.0.0 128 1 0:04.565
JetChess 1.0.0.0 256 1 0:04.586
qperft 64 1 0:04.679
qperft 32 1 0:05.110
qperft 16 1 0:05.600
gperft 1.1 0 1 0:06.362
qperft 0 1 0:23.922
SF 16 x86-64 Modern ? 1 0:28 (manual time)
Hash, bulk counting... are game changers regarding perft speed, as you can see. Bigger hash in perft usually starts slower, then pays off with high perft values. Perft(7) is not that high and you can expect lower elapsed times with bigger hashes.
Making a wild guess, your PC is roughly twice as fast as mine regarding SF (it is true that you use AVX2 compile while I use Modern compile). Then, your engine scores above qperft without hash in my chart (a corrected time around 10.19 seconds in my chart with a
rule of three of your times and my SF time). I would say that you are doing a good job. Again, my tip is please do not get obsessed with perft speeds.
------------
I guess you know CPW (Chessprogramming wiki):
https://www.chessprogramming.org/
Which is very useful for general chess programming, not only perft. Regarding perft, there are at least two interesting pages there:
https://www.chessprogramming.org/Perft
https://www.chessprogramming.org/Perft_Results
Where you can find a GitHub link to a very fast perft counter, which I have not tried, so I have not got any feedback for you:
https://github.com/ankan-ban/perft_gpu
Good luck with your project!
Regards from Spain.
Ajedrecista.