X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Ftt.h;h=5b83399b85c9093511f229b0bf853bf4e5120051;hp=bff1749841b1ac1312a7a413d9c3619eb6e461c0;hb=2572055c87f04832e43d63f30f26de04cadb729c;hpb=60bc30275decbb00aa26af8dc14ad6cb167eaa82 diff --git a/src/tt.h b/src/tt.h index bff17498..5b83399b 100644 --- a/src/tt.h +++ b/src/tt.h @@ -1,7 +1,7 @@ /* Stockfish, a UCI chess playing engine derived from Glaurung 2.1 Copyright (C) 2004-2008 Tord Romstad (Glaurung author) - Copyright (C) 2008-2009 Marco Costalba + Copyright (C) 2008-2010 Marco Costalba, Joona Kiiski, Tord Romstad Stockfish is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -54,9 +54,11 @@ class TTEntry { public: TTEntry() {} - TTEntry(uint32_t k, Value v, ValueType t, Depth d, Move m, int generation) + TTEntry(uint32_t k, Value v, ValueType t, Depth d, Move m, int generation, + Value statV, Value kingD) : key_ (k), data((m & 0x1FFFF) | (t << 20) | (generation << 23)), - value_(int16_t(v)), depth_(int16_t(d)) {} + value_(int16_t(v)), depth_(int16_t(d)), + staticValue_(int16_t(statV)), kingDanger_(int16_t(kingD)) {} uint32_t key() const { return key_; } Depth depth() const { return Depth(depth_); } @@ -64,25 +66,29 @@ public: Value value() const { return Value(value_); } ValueType type() const { return ValueType((data >> 20) & 7); } int generation() const { return (data >> 23); } + Value static_value() const { return Value(staticValue_); } + Value king_danger() const { return Value(kingDanger_); } private: uint32_t key_; uint32_t data; int16_t value_; int16_t depth_; + int16_t staticValue_; + int16_t kingDanger_; }; /// This is the number of TTEntry slots for each position -const int ClusterSize = 5; +const int ClusterSize = 4; /// Each group of ClusterSize number of TTEntry form a TTCluster -/// that is indexed by a single position key. Cluster is padded -/// to a cache line size so to guarantee always aligned accesses. +/// that is indexed by a single position key. TTCluster size must +// be not bigger then a cache line size, in case it is less then +/// it should be padded to guarantee always aligned accesses. struct TTCluster { TTEntry data[ClusterSize]; - char cache_line_padding[64 - sizeof(TTEntry[ClusterSize])]; }; @@ -95,14 +101,14 @@ class TranspositionTable { public: TranspositionTable(); ~TranspositionTable(); - void set_size(unsigned mbSize); + void set_size(size_t mbSize); void clear(); - void store(const Key posKey, Value v, ValueType type, Depth d, Move m); + void store(const Key posKey, Value v, ValueType type, Depth d, Move m, Value statV, Value kingD); TTEntry* retrieve(const Key posKey) const; void prefetch(const Key posKey) const; void new_search(); void insert_pv(const Position& pos, Move pv[]); - void extract_pv(const Position& pos, Move pv[], int pvSize); + void extract_pv(const Position& pos, Move pv[], const int PLY_MAX); int full() const; private: @@ -114,7 +120,7 @@ private: unsigned writes; // heavy SMP read/write access here unsigned char pad_after[64]; - unsigned size; + size_t size; TTCluster* entries; uint8_t generation; };