For those that already implemented one:
- What replacement scheme do you use ?
- What hit rate could I expect in a typical middle game position ?
Regards,
Klaus
Moderator: Andres Valverde
Klaus Friedel wrote:I thinking about introducing a evaluation cache in Snitch.
For those that already implemented one:
- What replacement scheme do you use ?
- What hit rate could I expect in a typical middle game position ?
Regards,
Klaus[/list]
Klaus Friedel wrote:I thinking about introducing a evaluation cache in Snitch.
For those that already implemented one:
- What replacement scheme do you use ?
- What hit rate could I expect in a typical middle game position ?
Dann Corbit wrote:Scorpio and Glaurung both use an evaluation cache.
Tord Romstad wrote:Klaus Friedel wrote:I thinking about introducing a evaluation cache in Snitch.
For those that already implemented one:
- What replacement scheme do you use ?
- What hit rate could I expect in a typical middle game position ?
- Always replace. Perhaps I lack imagination, but I don't see any other reasonable scheme.
- The hit rate depends on a number of factors, including the size of the cache, the time control, and whether you evaluate internal nodes. I've found it to be most useful in fast games, where most of the internal nodes at iteration N have already been evaluated during iteration N-1. In blitz games, a sufficiently big evaluation cache gives me an n/s increase of about 5-10% on x86 CPUs, and nothing at all on the PowerPC G5.
And, of course, Phalanx.
Tord
Klaus Friedel wrote:5-10% is not that much.
I do evaluate internal nodes. The king safty evaluation of Snitch is quite big. Today I use lazy evaluation so its called only in about 10-20% of the nodes. I'd like to drop lazy evaluation in favor of a eval cache but looking at your experiences it doesn't look that promising.
By the way - anybody using both lazy evaluation and evaluation caching ?
Tord Romstad wrote:Not me. Lazy eval wouldn't work well in Glaurung. The only sensible way to do lazy eval seems to be to compute the biggest evaluation terms first, and to omit the smaller terms if the preliminary score is too far outside the (alpha,beta) window. In my case, the most expensive parts of my eval are also the ones which produce the biggest scores (especially king safety), so lazy eval would be almost worthless.
Tord
What replacement scheme do you use ?
What hit rate could I expect in a typical middle game position ?
Not me. Lazy eval wouldn't work well in Glaurung. The only sensible way to do lazy eval seems to be to compute the biggest evaluation terms first, and to omit the smaller terms if the preliminary score is too far outside the (alpha,beta) window. In my case, the most expensive parts of my eval are also the ones which produce the biggest scores (especially king safety), so lazy eval would be almost worthless.
Daniel Shawul wrote:IIRC you use futility pruning inside qsearch,
if i did not miss someting, this is the same as lazy eval only that it is done before move is made.
Daniel Shawul wrote:
- Code: Select all
What replacement scheme do you use ?
What hit rate could I expect in a typical middle game position ?
I use always replace. I have never thought of any other replacement scheme because i couldnt think of a way to choose one position over the other. Since i also store lazy eval score in hash table , may be i have a choice not to overwrite real score with a lazy score.
I think that more interesting is trying many probes (up to 8). For my main hash table this scheme did not work better than the simple two-table approach.
The hitrate is around 25-30% in midgame for me, and 40-50% in late middle game . It can rise up to 70 in the endgame!
My measurements are based on a few blitz games but i think this is enough. Since the table is not cleared between moves, the percentage rises on every move made. I used to be confused when eveyone said their pawnhash table hit was close to 99% when mine usually is 92-93% at best. Well i found out that the problem was i was mearuing things on testsuites, and when i measured it on actual games it was actually 99%.
- Code: Select all
Not me. Lazy eval wouldn't work well in Glaurung. The only sensible way to do lazy eval seems to be to compute the biggest evaluation terms first, and to omit the smaller terms if the preliminary score is too far outside the (alpha,beta) window. In my case, the most expensive parts of my eval are also the ones which produce the biggest scores (especially king safety), so lazy eval would be almost worthless.
IIRC you use futility pruning inside qsearch, if i did not miss someting,
this is the same as lazy eval only that it is done before move is made.
Daniel
H.G.Muller wrote:Why would you want a separate cache for the evaluation if you already have a transposition hash table? You either did not encounter the position before, or you did, in which case you should have stored everything you need to know about it in the hash table. It is the same set of nodes that you would want to preserve in both cases, namely those that gives you the most hits.
Return to Programming and Technical Discussions
Users browsing this forum: No registered users and 7 guests