lucasart wrote:
* using an "eval class" with 2 int's for opening/endgame score, instead of vectorizing (int16_t, int16_t) <-> int32_t as done Stockfish, Critter (and probably most top engines).
I agree that using a vector is more elegant. I never got the impression it was actually worth that much in practice though...
* putting too much intelligence into the board class. in particular calculating tons of stuff after playing a move, that can be skipped in many nodes of the search due to early pruning (before move generation).
Do you have attack tables? I once experimented with those - you get the in-check test for "free" and you can do clever tricks with hanging pieces and safe time for mobility calculation in the evaluation. I never got it to do more than break even though, and it makes the code significantly more complicated (so I scrapped it).
* hardcoding some limitations inside the board and movegen code. using some nasty global arrays where a recursive approach is more elegant and SMP-friendly.
* writing a single threaded program, and thinking that one day, maybe (ie. never), I will find the courage to parralelize it. better to parralelize it when you have an extremely simple alpha/beta, and add stuff and make design choices with SMP in mind.
Yes, building an SMP engine from the ground up is definitely a better idea than trying to put SMP into an existing framework that doesn't take to it very well. I think Don rewrote all of Komodo for the same reason (but maybe I remember wrong).
It's one of the things that was much easier in Jazz than I thought it would be, due to having no global state at all.
I suppose I could rewrite large portions of my code to retrofit these things into it. But it would be hard and not very fun. Seems more exciting to restart and keep an open mind. Try to do things differently, with the experience and gained from the previous attempt.
That is certainly much more fun, and it's great to see the rapid improvement once you put in the transposition table, null-move, piece square tables (versus no piece square tables). Do you plan to keep the evaluation basically the same? You spent quite a lot of time tuning it very thoroughly, seems like a shame to throw that away.