I think the problem is in the TT as all threads seem to be working on the same ply constantly. Also ttd only increases with more threads.
My current tt store method is:
Code: Select all
for(int i=0; i<N_TE_PER_HASH_GROUP; i++)
{
if (e[i].hash == hash)
{
if (e[i].age != age || e[i].depth <= d || (flagExact && e[i].flags != EXACT))
useSubIndex = i;
else
useSubIndex = -1;
break;
}
if (e[i].age != age)
useSubIndex = i;
if (e[i].flags == NOTVALID)
useSubIndex = i;
}
If the hash is found, the following checks are done:
- different move?
- bigger depth?
- we're replacing a lower/higher bound by an exact?
If any of these is true, then replace it and stop searching. If not, don't replace and and also stop searching.
Else: if an entry is found with a different age or maybe not used at all, then remember this entry in case no hash-match is found.
This should be sane, isn't it?
regards