Re-add "Cache line aligned TT"

But this time do not play with pointers, in
particular do not assume that size_t is an
unsigned type of the same width as pointers.

This code should be fully portable.

No functional change.
This commit is contained in:
Marco Costalba
2013-05-01 22:55:23 +02:00
parent e381951a24
commit 481eda4ca0
4 changed files with 10 additions and 8 deletions

View File

@@ -40,16 +40,18 @@ void TranspositionTable::set_size(size_t mbSize) {
return;
hashMask = size - ClusterSize;
delete [] table;
table = new (std::nothrow) TTEntry[size];
free(mem);
mem = malloc(size * sizeof(TTEntry) + CACHE_LINE_SIZE - 1);
if (!table)
if (!mem)
{
std::cerr << "Failed to allocate " << mbSize
<< "MB for transposition table." << std::endl;
exit(EXIT_FAILURE);
}
// Align table start address to a cache line
for (char* c = (char*)mem; unsigned(table = (TTEntry*)(c)) % CACHE_LINE_SIZE; c++) {}
clear(); // Operator new is not guaranteed to initialize memory to zero
}