X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fmisc.cpp;h=8cfba7341fa7fe7256fdaafa440dc3140ae9dbcd;hp=9cd953922ce8d59a685ef2c50d56a68a5088187b;hb=7c8a8e038f0acd48a30ec7e3971c7d0efcfbf25d;hpb=8307da0de77c9c7bbf7c56a7d9c8a688ff4dfb4e
diff --git a/src/misc.cpp b/src/misc.cpp
index 9cd95392..8cfba734 100644
--- a/src/misc.cpp
+++ b/src/misc.cpp
@@ -17,17 +17,13 @@
along with this program. If not, see .
*/
-#if defined(_MSC_VER)
+#if defined(_WIN32) || defined(_WIN64)
-#define _CRT_SECURE_NO_DEPRECATE
#define NOMINMAX // disable macros min() and max()
#include
-#include
#else
-# include
-# include
# include
# if defined(__hpux)
# include
@@ -39,25 +35,21 @@
# include
#endif
-#include
-#include
+#include
#include
#include
#include
-#include
-#include "bitcount.h"
#include "misc.h"
#include "thread.h"
using namespace std;
-
/// Version number. If Version is left empty, then Tag plus current
/// date (in the format YYMMDD) is used as a version number.
static const string Version = "";
-static const string Tag = "";
+static const string Tag = "";
/// engine_info() returns the full name of the current Stockfish version.
@@ -81,70 +73,35 @@ const string engine_info(bool to_uci) {
s << "Stockfish " << Tag
<< setfill('0') << " " << year.substr(2)
<< setw(2) << (1 + months.find(month) / 4)
- << setw(2) << day << cpu64 << popcnt;
+ << setw(2) << day;
}
else
- s << "Stockfish " << Version << cpu64 << popcnt;
+ s << "Stockfish " << Version;
- s << (to_uci ? "\nid author ": " by ")
+ s << cpu64 << popcnt << (to_uci ? "\nid author ": " by ")
<< "Tord Romstad, Marco Costalba and Joona Kiiski";
return s.str();
}
-/// Debug stuff. Helper functions used mainly for debugging purposes
-
-static uint64_t dbg_hit_cnt0;
-static uint64_t dbg_hit_cnt1;
-static uint64_t dbg_mean_cnt0;
-static uint64_t dbg_mean_cnt1;
-
-void dbg_print_hit_rate() {
-
- if (dbg_hit_cnt0)
- cerr << "Total " << dbg_hit_cnt0 << " Hit " << dbg_hit_cnt1
- << " hit rate (%) " << 100 * dbg_hit_cnt1 / dbg_hit_cnt0 << endl;
-}
-
-void dbg_print_mean() {
-
- if (dbg_mean_cnt0)
- cerr << "Total " << dbg_mean_cnt0 << " Mean "
- << (float)dbg_mean_cnt1 / dbg_mean_cnt0 << endl;
-}
-
-void dbg_mean_of(int v) {
-
- dbg_mean_cnt0++;
- dbg_mean_cnt1 += v;
-}
-
-void dbg_hit_on(bool b) {
+/// Debug functions used mainly to collect run-time statistics
- dbg_hit_cnt0++;
- if (b)
- dbg_hit_cnt1++;
-}
+static uint64_t hits[2], means[2];
+void dbg_hit_on(bool b) { hits[0]++; if (b) hits[1]++; }
void dbg_hit_on_c(bool c, bool b) { if (c) dbg_hit_on(b); }
-void dbg_before() { dbg_hit_on(false); }
-void dbg_after() { dbg_hit_on(true); dbg_hit_cnt0--; }
+void dbg_mean_of(int v) { means[0]++; means[1] += v; }
+void dbg_print() {
-/// system_time() returns the current system time, measured in milliseconds
+ if (hits[0])
+ cerr << "Total " << hits[0] << " Hits " << hits[1]
+ << " hit rate (%) " << 100 * hits[1] / hits[0] << endl;
-int system_time() {
-
-#if defined(_MSC_VER)
- struct _timeb t;
- _ftime(&t);
- return int(t.time * 1000 + t.millitm);
-#else
- struct timeval t;
- gettimeofday(&t, NULL);
- return t.tv_sec * 1000 + t.tv_usec / 1000;
-#endif
+ if (means[0])
+ cerr << "Total " << means[0] << " Mean "
+ << (float)means[1] / means[0] << endl;
}
@@ -152,7 +109,7 @@ int system_time() {
int cpu_count() {
-#if defined(_MSC_VER)
+#if defined(_WIN32) || defined(_WIN64)
SYSTEM_INFO s;
GetSystemInfo(&s);
return std::min(int(s.dwNumberOfProcessors), MAX_THREADS);
@@ -176,24 +133,16 @@ int cpu_count() {
/// timed_wait() waits for msec milliseconds. It is mainly an helper to wrap
/// conversion from milliseconds to struct timespec, as used by pthreads.
-void timed_wait(WaitCondition* sleepCond, Lock* sleepLock, int msec) {
+void timed_wait(WaitCondition& sleepCond, Lock& sleepLock, int msec) {
-#if defined(_MSC_VER)
+#if defined(_WIN32) || defined(_WIN64)
int tm = msec;
#else
- struct timeval t;
- struct timespec abstime, *tm = &abstime;
+ timespec ts, *tm = &ts;
+ uint64_t ms = Time::current_time().msec() + msec;
- gettimeofday(&t, NULL);
-
- abstime.tv_sec = t.tv_sec + (msec / 1000);
- abstime.tv_nsec = (t.tv_usec + (msec % 1000) * 1000) * 1000;
-
- if (abstime.tv_nsec > 1000000000LL)
- {
- abstime.tv_sec += 1;
- abstime.tv_nsec -= 1000000000LL;
- }
+ ts.tv_sec = ms / 1000;
+ ts.tv_nsec = (ms % 1000) * 1000000LL;
#endif
cond_timedwait(sleepCond, sleepLock, tm);
@@ -211,11 +160,11 @@ void prefetch(char*) {}
void prefetch(char* addr) {
-#if defined(__INTEL_COMPILER) || defined(__ICL)
+# if defined(__INTEL_COMPILER) || defined(__ICL)
// This hack prevents prefetches to be optimized away by
// Intel compiler. Both MSVC and gcc seems not affected.
__asm__ ("");
-#endif
+# endif
_mm_prefetch(addr, _MM_HINT_T2);
_mm_prefetch(addr+64, _MM_HINT_T2); // 64 bytes ahead