diff --git a/src/history.h b/src/history.h index 9811d0397..3aa9ef623 100644 --- a/src/history.h +++ b/src/history.h @@ -105,10 +105,10 @@ struct DynStats { data = make_unique_large_page(size); } // Sets all values in the range to 0 - void clear_range(int value, size_t threadIdx) { - size_t start = threadIdx * SizeMultiplier; + void clear_range(int value, size_t threadIdx, size_t numaTotal) { + size_t start = uint64_t(threadIdx) * size / numaTotal; assert(start < size); - size_t end = std::min(start + SizeMultiplier, size); + size_t end = threadIdx + 1 == numaTotal ? size : uint64_t(threadIdx + 1) * size / numaTotal; while (start < end) data[start++].fill(value); diff --git a/src/search.cpp b/src/search.cpp index 87a96cab8..c1a7d5880 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -582,8 +582,8 @@ void Search::Worker::clear() { captureHistory.fill(-689); // Each thread is responsible for clearing their part of shared history - sharedHistory.correctionHistory.clear_range(0, numaThreadIdx); - sharedHistory.pawnHistory.clear_range(-1238, numaThreadIdx); + sharedHistory.correctionHistory.clear_range(0, numaThreadIdx, numaTotal); + sharedHistory.pawnHistory.clear_range(-1238, numaThreadIdx, numaTotal); ttMoveHistory = 0;