mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-21 01:27:16 +08:00
Further simplify first_entry()
We can encode the ClusterSize directly in the hashMask, this allows to skip the left shift. There is no real change, but bench number is now different because instead of using the lowest order bits of the key to index the start of the cluster, now we don't use the last two lsb bits that are always set to zero (cluster size is 4). So for instance, if 10 bits are used to index the cluster, instead of bits [9..0] now we use bits [11..2]. This changes the positions that end up in the same cluster affecting TT hits and so bench is different. Also some renaming while there. bench: 5383795
This commit is contained in:
14
src/tt.cpp
14
src/tt.cpp
@@ -34,16 +34,16 @@ void TranspositionTable::set_size(size_t mbSize) {
|
||||
|
||||
assert(msb((mbSize << 20) / sizeof(TTEntry)) < 32);
|
||||
|
||||
uint32_t size = 1 << msb((mbSize << 20) / sizeof(TTEntry[ClusterSize]));
|
||||
uint32_t size = ClusterSize << msb((mbSize << 20) / sizeof(TTEntry[ClusterSize]));
|
||||
|
||||
if (clusterMask == size - 1)
|
||||
if (hashMask == size - ClusterSize)
|
||||
return;
|
||||
|
||||
clusterMask = size - 1;
|
||||
delete [] entries;
|
||||
entries = new (std::nothrow) TTEntry[size * ClusterSize];
|
||||
hashMask = size - ClusterSize;
|
||||
delete [] table;
|
||||
table = new (std::nothrow) TTEntry[size];
|
||||
|
||||
if (!entries)
|
||||
if (!table)
|
||||
{
|
||||
std::cerr << "Failed to allocate " << mbSize
|
||||
<< "MB for transposition table." << std::endl;
|
||||
@@ -60,7 +60,7 @@ void TranspositionTable::set_size(size_t mbSize) {
|
||||
|
||||
void TranspositionTable::clear() {
|
||||
|
||||
memset(entries, 0, (clusterMask + 1) * sizeof(TTEntry[ClusterSize]));
|
||||
memset(table, 0, (hashMask + ClusterSize) * sizeof(TTEntry));
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user