Re-add "Cache line aligned TT"
[stockfish] / src / tt.cpp
index 80ea493bd9c68e3593936bc7bee7a101c195a0de..271b98b74009eaf8f7e5e6601c5225c33a5be7f5 100644 (file)
@@ -40,16 +40,18 @@ void TranspositionTable::set_size(size_t mbSize) {
       return;
 
   hashMask = size - ClusterSize;
-  delete [] table;
-  table = new (std::nothrow) TTEntry[size];
+  free(mem);
+  mem = malloc(size * sizeof(TTEntry) + CACHE_LINE_SIZE - 1);
 
-  if (!table)
+  if (!mem)
   {
       std::cerr << "Failed to allocate " << mbSize
                 << "MB for transposition table." << std::endl;
       exit(EXIT_FAILURE);
   }
 
+  // Align table start address to a cache line
+  for (char* c = (char*)mem; unsigned(table = (TTEntry*)(c)) % CACHE_LINE_SIZE; c++) {}
   clear(); // Operator new is not guaranteed to initialize memory to zero
 }