mirror of
https://github.com/opelly27/Stockfish.git
synced 2026-05-20 07:27:46 +00:00
Accumulator cache bugfix and cleanup
STC: https://tests.stockfishchess.org/tests/view/663068913a05f1bf7a511dc2 LLR: 2.98 (-2.94,2.94) <-1.75,0.25> Total: 70304 W: 18211 L: 18026 D: 34067 Ptnml(0-2): 232, 7966, 18582, 8129, 243 1) Fixes a bug introduced in https://github.com/official-stockfish/Stockfish/pull/5194. Only one psqtOnly flag was used for two perspectives which was causing wrong entries to be cleared and marked. 2) The finny caches should be cleared like histories and not at the start of every search. closes https://github.com/official-stockfish/Stockfish/pull/5203 No functional change
This commit is contained in:
+12
-16
@@ -59,31 +59,27 @@ struct AccumulatorCaches {
|
||||
struct alignas(CacheLineSize) Cache {
|
||||
|
||||
struct alignas(CacheLineSize) Entry {
|
||||
BiasType accumulation[COLOR_NB][Size];
|
||||
PSQTWeightType psqtAccumulation[COLOR_NB][PSQTBuckets];
|
||||
Bitboard byColorBB[COLOR_NB][COLOR_NB];
|
||||
Bitboard byTypeBB[COLOR_NB][PIECE_TYPE_NB];
|
||||
BiasType accumulation[Size];
|
||||
PSQTWeightType psqtAccumulation[PSQTBuckets];
|
||||
Bitboard byColorBB[COLOR_NB];
|
||||
Bitboard byTypeBB[PIECE_TYPE_NB];
|
||||
bool psqtOnly;
|
||||
|
||||
// To initialize a refresh entry, we set all its bitboards empty,
|
||||
// so we put the biases in the accumulation, without any weights on top
|
||||
void clear(const BiasType* biases) {
|
||||
|
||||
std::memset(byColorBB, 0, sizeof(byColorBB));
|
||||
std::memset(byTypeBB, 0, sizeof(byTypeBB));
|
||||
psqtOnly = false;
|
||||
|
||||
std::memcpy(accumulation[WHITE], biases, Size * sizeof(BiasType));
|
||||
std::memcpy(accumulation[BLACK], biases, Size * sizeof(BiasType));
|
||||
|
||||
std::memset(psqtAccumulation, 0, sizeof(psqtAccumulation));
|
||||
std::memcpy(accumulation, biases, sizeof(accumulation));
|
||||
std::memset((uint8_t*) this + offsetof(Entry, psqtAccumulation), 0,
|
||||
sizeof(Entry) - offsetof(Entry, psqtAccumulation));
|
||||
}
|
||||
};
|
||||
|
||||
template<typename Network>
|
||||
void clear(const Network& network) {
|
||||
for (auto& entry : entries)
|
||||
entry.clear(network.featureTransformer->biases);
|
||||
for (auto& entries1D : entries)
|
||||
for (auto& entry : entries1D)
|
||||
entry.clear(network.featureTransformer->biases);
|
||||
}
|
||||
|
||||
void clear(const BiasType* biases) {
|
||||
@@ -91,9 +87,9 @@ struct AccumulatorCaches {
|
||||
entry.clear(biases);
|
||||
}
|
||||
|
||||
Entry& operator[](Square sq) { return entries[sq]; }
|
||||
std::array<Entry, COLOR_NB>& operator[](Square sq) { return entries[sq]; }
|
||||
|
||||
std::array<Entry, SQUARE_NB> entries;
|
||||
std::array<std::array<Entry, COLOR_NB>, SQUARE_NB> entries;
|
||||
};
|
||||
|
||||
template<typename Networks>
|
||||
|
||||
Reference in New Issue
Block a user