X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmisc.cpp;h=aa2b23310da53ffd558bc41c4d62ece3c3dd8d33;hb=856a5f3aaaf8b9d53599963decacd4476b55c034;hp=daafd3fb650cbd009cee475402474f2786d43871;hpb=ce8ac7997c9ddb34c28859a5b9afde0e2b6a4a9d;p=stockfish diff --git a/src/misc.cpp b/src/misc.cpp index daafd3fb..aa2b2331 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -17,7 +17,6 @@ along with this program. If not, see . */ -#include #include #include #include @@ -27,7 +26,6 @@ #include "thread.h" using namespace std; -using namespace std::chrono; namespace { @@ -125,13 +123,6 @@ const string engine_info(bool to_uci) { } -/// Convert system time to milliseconds. That's all we need. - -Time::point Time::now() { - return duration_cast(steady_clock::now().time_since_epoch()).count(); -} - - /// Debug functions used mainly to collect run-time statistics void dbg_hit_on(bool b) { ++hits[0]; if (b) ++hits[1]; } @@ -155,7 +146,7 @@ void dbg_print() { std::ostream& operator<<(std::ostream& os, SyncCout sc) { - static std::mutex m; + static Mutex m; if (sc == IO_LOCK) m.lock(); @@ -171,16 +162,35 @@ std::ostream& operator<<(std::ostream& os, SyncCout sc) { void start_logger(bool b) { Logger::start(b); } +/// timed_wait() waits for msec milliseconds. It is mainly a helper to wrap +/// the conversion from milliseconds to struct timespec, as used by pthreads. + +void timed_wait(WaitCondition& sleepCond, Lock& sleepLock, int msec) { + +#ifdef _WIN32 + int tm = msec; +#else + timespec ts, *tm = &ts; + uint64_t ms = Time::now() + msec; + + ts.tv_sec = ms / 1000; + ts.tv_nsec = (ms % 1000) * 1000000LL; +#endif + + cond_timedwait(sleepCond, sleepLock, tm); +} + + /// prefetch() preloads the given address in L1/L2 cache. This is a non-blocking /// function that doesn't stall the CPU waiting for data to be loaded from memory, /// which can be quite slow. #ifdef NO_PREFETCH -void prefetch(void*) {} +void prefetch(char*) {} #else -void prefetch(void* addr) { +void prefetch(char* addr) { # if defined(__INTEL_COMPILER) // This hack prevents prefetches from being optimized away by @@ -189,7 +199,7 @@ void prefetch(void* addr) { # endif # if defined(__INTEL_COMPILER) || defined(_MSC_VER) - _mm_prefetch((char*)addr, _MM_HINT_T0); + _mm_prefetch(addr, _MM_HINT_T0); # else __builtin_prefetch(addr); # endif