X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fmisc.cpp;h=2970ac3b49c30c6ceb0aeda94b95836919eab715;hp=0d27b615ea75122695f37e8c9da0ab3021525cb4;hb=47ee6d9fa4091aa05f6fedb62a2bb652b0422f08;hpb=86c2d2fc3b596e544e7f280edf2bd7b3f755b83d diff --git a/src/misc.cpp b/src/misc.cpp index 0d27b615..2970ac3b 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -39,6 +39,10 @@ #endif +#if !defined(NO_PREFETCH) +# include +#endif + #include #include #include @@ -54,7 +58,7 @@ using namespace std; /// Version number. If this is left empty, the current date (in the format /// YYMMDD) is used as a version number. -static const string EngineVersion = "1.7.1"; +static const string EngineVersion = ""; static const string AppName = "Stockfish"; static const string AppTag = ""; @@ -287,4 +291,26 @@ int Bioskey() return 0; } } + +/// prefetch() preloads the given address in L1/L2 cache. This is a non +/// blocking function and do not stalls the CPU waiting for data to be +/// loaded from RAM, that can be very slow. +#if defined(NO_PREFETCH) +void prefetch(char*) {} +#else + +void prefetch(char* addr) { + +#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 + + _mm_prefetch(addr, _MM_HINT_T2); + _mm_prefetch(addr+64, _MM_HINT_T2); // 64 bytes ahead +} + +#endif + #endif