From: inikep Date: Tue, 29 Mar 2016 09:17:58 +0000 (+0200) Subject: fix for BMK_clockSpan on Windows X-Git-Tag: v0.6.0^2~17^2~17^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=06f793a3abd63744118b7d80beaa7df99dd43498;p=thirdparty%2Fzstd.git fix for BMK_clockSpan on Windows --- diff --git a/programs/bench.c b/programs/bench.c index 1468bcb2b..8cdb8051e 100644 --- a/programs/bench.c +++ b/programs/bench.c @@ -162,9 +162,17 @@ void BMK_SetBlockSize(size_t blockSize) /* ******************************************************** * Private functions **********************************************************/ -static clock_t BMK_clockSpan( clock_t clockStart ) +typedef clock_t BMK_time_t; + +static BMK_time_t BMK_getTime() +{ + return clock(); +} + +/* returns time span in nanoseconds */ +static U64 BMK_clockSpan( BMK_time_t clockStart ) { - return clock() - clockStart; /* works even if overflow, span limited to <= ~30mn */ + return 1000000ULL * (BMK_getTime() - clockStart) / CLOCKS_PER_SEC; } @@ -265,20 +273,21 @@ static int BMK_benchMem(const void* srcBuffer, size_t srcSize, double fastestC = 100000000., fastestD = 100000000.; double ratio = 0.; U64 crcCheck = 0; - clock_t coolTime = clock(); + BMK_time_t coolTime = BMK_getTime(); U32 testNb; DISPLAYLEVEL(2, "\r%79s\r", ""); for (testNb = 1; testNb <= (g_nbIterations + !g_nbIterations); testNb++) { int nbLoops; - clock_t clockStart, clockSpan; - clock_t const clockLoop = g_nbIterations ? TIMELOOP_S * CLOCKS_PER_SEC : 10; + BMK_time_t clockStart; + U64 clockSpan; + U64 const clockLoop = g_nbIterations ? TIMELOOP_S*1000000ULL : 10; /* overheat protection */ - if (BMK_clockSpan(coolTime) > ACTIVEPERIOD_S * CLOCKS_PER_SEC) { + if (BMK_clockSpan(coolTime) > ACTIVEPERIOD_S*1000000ULL) { DISPLAY("\rcooling down ... \r"); BMK_sleep(COOLPERIOD_S); - coolTime = clock(); + coolTime = BMK_getTime(); } /* Compression */ @@ -286,9 +295,9 @@ static int BMK_benchMem(const void* srcBuffer, size_t srcSize, memset(compressedBuffer, 0xE5, maxCompressedSize); /* warm up and erase result buffer */ mili_sleep(1); /* give processor time to other processes */ - clockStart = clock(); - while (clock() == clockStart); - clockStart = clock(); + clockStart = BMK_getTime(); + while (BMK_getTime() == clockStart); + clockStart = BMK_getTime(); for (nbLoops = 0 ; BMK_clockSpan(clockStart) < clockLoop ; nbLoops++) { U32 blockNb; @@ -308,16 +317,16 @@ static int BMK_benchMem(const void* srcBuffer, size_t srcSize, ratio = (double)srcSize / (double)cSize; DISPLAYLEVEL(2, "%2i-%-17.17s :%10u ->%10u (%5.3f),%6.1f MB/s\r", testNb, displayName, (U32)srcSize, (U32)cSize, ratio, - (double)srcSize / 1000000. / (fastestC / CLOCKS_PER_SEC) ); + (double)srcSize / fastestC ); #if 1 /* Decompression */ memset(resultBuffer, 0xD6, srcSize); /* warm result buffer */ mili_sleep(1); /* give processor time to other processes */ - clockStart = clock(); - while (clock() == clockStart); - clockStart = clock(); + clockStart = BMK_getTime(); + while (BMK_getTime() == clockStart); + clockStart = BMK_getTime(); for (nbLoops = 0 ; BMK_clockSpan(clockStart) < clockLoop ; nbLoops++) { U32 blockNb; @@ -338,8 +347,8 @@ static int BMK_benchMem(const void* srcBuffer, size_t srcSize, if ((double)clockSpan < fastestD*nbLoops) fastestD = (double)clockSpan / nbLoops; DISPLAYLEVEL(2, "%2i-%-17.17s :%10u ->%10u (%5.3f),%6.1f MB/s ,%6.1f MB/s\r", testNb, displayName, (U32)srcSize, (U32)cSize, ratio, - (double)srcSize / 1000000. / (fastestC / CLOCKS_PER_SEC), - (double)srcSize / 1000000. / (fastestD / CLOCKS_PER_SEC) ); + (double)srcSize / fastestC, + (double)srcSize / fastestD ); /* CRC Checking */ _findError: @@ -372,8 +381,8 @@ _findError: if (crcOrig == crcCheck) { result->ratio = ratio; result->cSize = cSize; - result->cSpeed = (double)srcSize / 1000000. / (fastestC / CLOCKS_PER_SEC); - result->dSpeed = (double)srcSize / 1000000. / (fastestD / CLOCKS_PER_SEC); + result->cSpeed = (double)srcSize / fastestC; + result->dSpeed = (double)srcSize / fastestD; } DISPLAYLEVEL(2, "%2i#\n", cLevel); } /* Bench */