- memset(entries, 0, size * sizeof(TTCluster));
-}
-
-
-/// TranspositionTable::store() writes a new entry containing position key and
-/// valuable information of current position. The lowest order bits of position
-/// key are used to decide on which cluster the position will be placed.
-/// When a new entry is written and there are no empty entries available in cluster,
-/// it replaces the least valuable of entries. A TTEntry t1 is considered to be
-/// more valuable than a TTEntry t2 if t1 is from the current search and t2 is from
-/// a previous search, or if the depth of t1 is bigger than the depth of t2.
+ const size_t stride = clusterCount / Options["Threads"];
+ std::vector<std::thread> threads;
+ for (size_t idx = 0; idx < Options["Threads"]; idx++)
+ {
+ const size_t start = stride * idx,
+ len = idx != Options["Threads"] - 1 ?
+ stride :
+ clusterCount - start;
+ threads.push_back(std::thread([this, idx, start, len]() {
+ if (Options["Threads"] >= 8)
+ WinProcGroup::bindThisThread(idx);
+ std::memset(&table[start], 0, len * sizeof(Cluster));
+ }));
+ }