Explicitly zero TT upon resize.
as discussed in issue #1349, the way pages are allocated with calloc might imply some overhead on first write. This overhead can be large and slow down the first search after a TT resize significantly, especially for large TT. Using an explicit clear of the TT on resize fixes this problem. Not implemented, but possibly useful for large TT, is to do this zero-ing using all search threads. Not only would this be faster, it could also lead to a more favorable memory allocation on numa systems with a first touch policy. No functional change.pull/1352/merge
parent
7d4d3a2c3a
commit
2ba47416cb
|
@ -41,7 +41,7 @@ void TranspositionTable::resize(size_t mbSize) {
|
|||
clusterCount = newClusterCount;
|
||||
|
||||
free(mem);
|
||||
mem = calloc(clusterCount * sizeof(Cluster) + CacheLineSize - 1, 1);
|
||||
mem = malloc(clusterCount * sizeof(Cluster) + CacheLineSize - 1);
|
||||
|
||||
if (!mem)
|
||||
{
|
||||
|
@ -51,6 +51,7 @@ void TranspositionTable::resize(size_t mbSize) {
|
|||
}
|
||||
|
||||
table = (Cluster*)((uintptr_t(mem) + CacheLineSize - 1) & ~(CacheLineSize - 1));
|
||||
clear();
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue