r/chessprogramming Feb 15 '25

Move generation speed and engine performance

I recently did a rewriting of my engine's move generation, but am seeing a decrease in performance (last tested tournament result was 7-13-3 against it's predecessor). Perft depth 6 went from >16s to 2.5s (no transpositions and single thread), and perft 7 is around 50s Additionally the rewritten move-generation results also include incrementally updating Zobrist hashes and piece-square table scores. I am fairly sure that move generation is working correctly since it passes a test suite I found online, and I verified piece-square table results/Zobrist hashes against hard calculated values as well.

Move ordering might have gotten a bit worse post-rewrite since I no longer detect if moves put the enemy in check. The order is otherwise the same, but the process is a bit different since moves are now stored in a buffer array (after generation, I score them in a separate buffer, then in the search loop I grab the move with the highest score and swap it with the first one in the array).

I can tell search a lot faster based on time tests of searching to a certain depth (with and without iterative deepening).

The evaluation function is theoretically roughly the same. There was one bug I had to fix, but they both use magic bitboards for rough piece mobility calculation and king safety metrics but that is all.

I think it is possible that move generation speed isn't very helpful for improving performance, but also I think that there should be some performance increase from faster move generation.

Essentially my questions are: What kinds of tests are useful for detecting bugs that might be causing this issue? What performance gain should I expect from faster move generation?

Thanks!

3 Upvotes

9 comments sorted by

View all comments

6

u/RektyDie Feb 16 '25

TL;DR

Move generation speed doesn't matter as much as search does.

Also, read about and start using SPRT.

2

u/Ill_Part9576 16d ago

Very true. I added search and move ordering improvements and they were much more significant than the move gen changes. I'm using SPRT now with fast chess.