mirror of
https://github.com/sockspls/badfish
synced 2025-05-02 09:39:36 +00:00
Allow for higher depths. (#2147)
High rootDepths, selDepths and generally searches are increasingly common with long time control games, analysis, and improving hardware. In this case, depths of MAX_DEPTH/MAX_PLY (128) can be reached, and the search tree is truncated. In principle MAX_PLY can be easily increased, except for a technicality of storing depths in a signed 8 bit int in the TT. This patch increases MAX_PLY by storing the depth in an unsigned 8 bit, after shifting by the most negative depth stored in TT (DEPTH_NONE). No regression at STC: LLR: 2.96 (-2.94,2.94) [-3.00,1.00] Total: 42235 W: 9565 L: 9484 D: 23186 http://tests.stockfishchess.org/tests/view/5cdb35360ebc5925cf0595e1 Verified to reach high depths on k1b5/1p1p4/pP1Pp3/K2pPp2/1P1p1P2/3P1P2/5P2/8 w - - info depth 142 seldepth 154 multipv 1 score cp 537 nodes 26740713110 ... No bench change.
This commit is contained in:
parent
7df832fea6
commit
893a08a8c2
3 changed files with 6 additions and 5 deletions
|
@ -43,14 +43,15 @@ void TTEntry::save(Key k, Value v, bool pv, Bound b, Depth d, Move m, Value ev)
|
||||||
|
|
||||||
// Overwrite less valuable entries
|
// Overwrite less valuable entries
|
||||||
if ( (k >> 48) != key16
|
if ( (k >> 48) != key16
|
||||||
|| d / ONE_PLY > depth8 - 4
|
|| d / ONE_PLY + 10 > depth8
|
||||||
|| b == BOUND_EXACT)
|
|| b == BOUND_EXACT)
|
||||||
{
|
{
|
||||||
key16 = (uint16_t)(k >> 48);
|
key16 = (uint16_t)(k >> 48);
|
||||||
value16 = (int16_t)v;
|
value16 = (int16_t)v;
|
||||||
eval16 = (int16_t)ev;
|
eval16 = (int16_t)ev;
|
||||||
genBound8 = (uint8_t)(TT.generation8 | uint8_t(pv) << 2 | b);
|
genBound8 = (uint8_t)(TT.generation8 | uint8_t(pv) << 2 | b);
|
||||||
depth8 = (int8_t)(d / ONE_PLY);
|
assert((d - DEPTH_NONE) / ONE_PLY >= 0);
|
||||||
|
depth8 = (uint8_t)((d - DEPTH_NONE) / ONE_PLY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
4
src/tt.h
4
src/tt.h
|
@ -40,7 +40,7 @@ struct TTEntry {
|
||||||
Move move() const { return (Move )move16; }
|
Move move() const { return (Move )move16; }
|
||||||
Value value() const { return (Value)value16; }
|
Value value() const { return (Value)value16; }
|
||||||
Value eval() const { return (Value)eval16; }
|
Value eval() const { return (Value)eval16; }
|
||||||
Depth depth() const { return (Depth)(depth8 * int(ONE_PLY)); }
|
Depth depth() const { return (Depth)(depth8 * int(ONE_PLY)) + DEPTH_NONE; }
|
||||||
bool is_pv() const { return (bool)(genBound8 & 0x4); }
|
bool is_pv() const { return (bool)(genBound8 & 0x4); }
|
||||||
Bound bound() const { return (Bound)(genBound8 & 0x3); }
|
Bound bound() const { return (Bound)(genBound8 & 0x3); }
|
||||||
void save(Key k, Value v, bool pv, Bound b, Depth d, Move m, Value ev);
|
void save(Key k, Value v, bool pv, Bound b, Depth d, Move m, Value ev);
|
||||||
|
@ -53,7 +53,7 @@ private:
|
||||||
int16_t value16;
|
int16_t value16;
|
||||||
int16_t eval16;
|
int16_t eval16;
|
||||||
uint8_t genBound8;
|
uint8_t genBound8;
|
||||||
int8_t depth8;
|
uint8_t depth8;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -101,7 +101,7 @@ typedef uint64_t Key;
|
||||||
typedef uint64_t Bitboard;
|
typedef uint64_t Bitboard;
|
||||||
|
|
||||||
constexpr int MAX_MOVES = 256;
|
constexpr int MAX_MOVES = 256;
|
||||||
constexpr int MAX_PLY = 128;
|
constexpr int MAX_PLY = 246;
|
||||||
|
|
||||||
/// A move needs 16 bits to be stored
|
/// A move needs 16 bits to be stored
|
||||||
///
|
///
|
||||||
|
|
Loading…
Add table
Reference in a new issue