mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-20 17:16:33 +08:00
Avoid searching TT twice for the same key/position during probe() and store().
Just keep the pointer and remove code from tt.cpp STC LLR: 2.96 (-2.94,2.94) [-1.50,4.50] Total: 13620 W: 2810 L: 2665 D: 8145 LTC LLR: 2.97 (-2.94,2.94) [0.00,6.00] Total: 13021 W: 2238 L: 2073 D: 8710STC http://tests.stockfishchess.org/tests/view/548436860ebc59331739b90c STC 4MB ELO: 2.41 +-2.2 (95%) LOS: 98.6% Total: 40000 W: 8175 L: 7897 D: 23928 LTC 16MB ELO: 1.78 +-2.0 (95%) LOS: 96.1% Total: 39683 W: 6763 L: 6560 D: 26360 Resolves #151 Bench: 8116521
This commit is contained in:
29
src/tt.h
29
src/tt.h
@@ -41,19 +41,21 @@ struct TTEntry {
|
||||
Depth depth() const { return (Depth)depth8; }
|
||||
Bound bound() const { return (Bound)(genBound8 & 0x3); }
|
||||
|
||||
void save(Key k, Value v, Bound b, Depth d, Move m, Value ev, uint8_t g) {
|
||||
|
||||
k >>= 48;
|
||||
if (m || k != key16) // preserve any existing ttMove
|
||||
move16 = (uint16_t)m;
|
||||
key16 = (uint16_t)k;
|
||||
value16 = (int16_t)v;
|
||||
evalValue = (int16_t)ev;
|
||||
genBound8 = (uint8_t)(g | b);
|
||||
depth8 = (int8_t)d;
|
||||
}
|
||||
|
||||
private:
|
||||
friend class TranspositionTable;
|
||||
|
||||
void save(uint16_t k, Value v, Bound b, Depth d, Move m, uint8_t g, Value ev) {
|
||||
|
||||
key16 = (uint16_t)k;
|
||||
move16 = (uint16_t)m;
|
||||
value16 = (int16_t)v;
|
||||
evalValue = (int16_t)ev;
|
||||
genBound8 = (uint8_t)(g | b);
|
||||
depth8 = (int8_t)d;
|
||||
}
|
||||
|
||||
uint16_t key16;
|
||||
uint16_t move16;
|
||||
int16_t value16;
|
||||
@@ -67,7 +69,7 @@ private:
|
||||
/// 3 x TTEntry (3 x 10 bytes)
|
||||
/// padding (2 bytes)
|
||||
|
||||
const unsigned TTClusterSize = 3;
|
||||
static const unsigned TTClusterSize = 3;
|
||||
|
||||
struct TTCluster {
|
||||
TTEntry entry[TTClusterSize];
|
||||
@@ -85,12 +87,11 @@ class TranspositionTable {
|
||||
public:
|
||||
~TranspositionTable() { free(mem); }
|
||||
void new_search() { generation += 4; } // Lower 2 bits are used by Bound
|
||||
|
||||
const TTEntry* probe(const Key key) const;
|
||||
uint8_t get_generation() const { return generation; }
|
||||
TTEntry* probe(const Key key, bool& found) const;
|
||||
TTEntry* first_entry(const Key key) const;
|
||||
void resize(size_t mbSize);
|
||||
void clear();
|
||||
void store(const Key key, Value v, Bound type, Depth d, Move m, Value statV);
|
||||
|
||||
private:
|
||||
size_t clusterCount;
|
||||
|
||||
Reference in New Issue
Block a user