From: Yann Collet Date: Fri, 11 Mar 2016 12:41:20 +0000 (+0100) Subject: benchmark mode : automated cooling (overheat protection) X-Git-Tag: v0.6.0^2~17^2~70 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=27d3dad7514b9f52aa6c8ea8985440056613de33;p=thirdparty%2Fzstd.git benchmark mode : automated cooling (overheat protection) --- diff --git a/programs/bench.c b/programs/bench.c index 1c776c4e6..82e28d405 100644 --- a/programs/bench.c +++ b/programs/bench.c @@ -62,6 +62,17 @@ # include /* gettimeofday */ #endif +/* sleep : posix - windows - others */ +#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) +# include +# define BMK_sleep(s) sleep(s) +#elif defined(_WIN32) +# include +# define BMK_sleep(s) Sleep(1000*s) +#else +# define BMK_sleep(s) /* disabled */ +#endif + #include "mem.h" #include "zstd_static.h" #include "xxhash.h" @@ -83,8 +94,10 @@ /* ************************************* * Constants ***************************************/ -#define NBLOOPS 3 -#define TIMELOOP 2500 +#define NBLOOPS 3 +#define TIMELOOP_MS 2500 +#define ACTIVEPERIOD_S 70 +#define COOLPERIOD_S 10 #define KB *(1 <<10) #define MB *(1 <<20) @@ -274,6 +287,7 @@ static int BMK_benchMem(const void* srcBuffer, size_t srcSize, double fastestC = 100000000., fastestD = 100000000.; double ratio = 0.; U64 crcCheck = 0; + int coolTime = BMK_GetMilliStart(); DISPLAY("\r%79s\r", ""); for (loopNb = 1; loopNb <= nbIterations; loopNb++) { @@ -281,6 +295,13 @@ static int BMK_benchMem(const void* srcBuffer, size_t srcSize, int milliTime; U32 blockNb; + /* overheat protection */ + if (BMK_GetMilliSpan(coolTime) > ACTIVEPERIOD_S*1000) { + DISPLAY("\rcooling down ... \r"); + BMK_sleep(COOLPERIOD_S); + coolTime = BMK_GetMilliStart(); + } + /* Compression */ DISPLAY("%2i-%-17.17s :%10u ->\r", loopNb, displayName, (U32)srcSize); memset(compressedBuffer, 0xE5, maxCompressedSize); @@ -289,7 +310,7 @@ static int BMK_benchMem(const void* srcBuffer, size_t srcSize, milliTime = BMK_GetMilliStart(); while (BMK_GetMilliStart() == milliTime); milliTime = BMK_GetMilliStart(); - while (BMK_GetMilliSpan(milliTime) < TIMELOOP) { + while (BMK_GetMilliSpan(milliTime) < TIMELOOP_MS) { ZSTD_compressBegin_advanced(refCtx, dictBuffer, dictBufferSize, ZSTD_getParams(cLevel, MAX(dictBufferSize, largestBlockSize))); for (blockNb=0; blockNb