Sync with master
authorMarco Costalba <mcostalba@gmail.com>
Sat, 31 Jan 2015 12:04:15 +0000 (13:04 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sat, 31 Jan 2015 12:05:51 +0000 (13:05 +0100)
bench: 7374604

src/search.cpp
src/tt.cpp
src/tt.h

index da8f457d6f01bdfeab1283237b2bf641115c3b31..c188469146eb074ae85ea6c72cef191fdaa014a2 100644 (file)
@@ -1441,8 +1441,12 @@ string UCI::pv(const Position& pos, Depth depth, Value alpha, Value beta) {
           ss << (v >= beta ? " lowerbound" : v <= alpha ? " upperbound" : "");
 
       ss << " nodes "    << pos.nodes_searched()
-         << " nps "      << pos.nodes_searched() * 1000 / elapsed
-         << " tbhits "   << TB::Hits
+         << " nps "      << pos.nodes_searched() * 1000 / elapsed;
+
+      if (elapsed > 1000) // Earlier makes little sense
+          ss << " hashfull "  << TT.hashfull();
+
+      ss << " tbhits "   << TB::Hits
          << " time "     << elapsed
          << " pv";
 
index bb49a824519a52b97828b1a6055d2e12cc8f198b..d0e2d729c8c766e883092277bfc5fd97b2bb58e2 100644 (file)
@@ -94,3 +94,20 @@ TTEntry* TranspositionTable::probe(const Key key, bool& found) const {
 
   return found = false, replace;
 }
+
+
+/// Returns an approximation of the hashtable occupation during a search. The
+/// hash is x permill full, as per UCI protocol.
+
+int TranspositionTable::hashfull() const
+{
+  int cnt = 0;
+  for (int i = 0; i < 1000 / ClusterSize; i++)
+  {
+      const TTEntry* tte = &table[i].entry[0];
+      for (int j = 0; j < ClusterSize; j++)
+          if ((tte[j].genBound8 & 0xFC) == generation8)
+              cnt++;
+  }
+  return cnt;
+}
index 14f820d0cb6677637615f7d21b312514ed2d26fe..32b4036e39dea085974410867b7212facfc6c625 100644 (file)
--- a/src/tt.h
+++ b/src/tt.h
@@ -88,6 +88,7 @@ public:
   void new_search() { generation8 += 4; } // Lower 2 bits are used by Bound
   uint8_t generation() const { return generation8; }
   TTEntry* probe(const Key key, bool& found) const;
+  int hashfull() const;
   void resize(size_t mbSize);
   void clear();