From 1c1e6916e41c47ba06e848a51549f7911a6ad379 Mon Sep 17 00:00:00 2001 From: inikep Date: Fri, 18 Mar 2016 12:49:44 +0100 Subject: [PATCH] improved timer accuracy --- lib/zstd_decompress.c | 8 ++++++-- lib/zstd_internal.h | 2 +- programs/bench.c | 20 ++++++++++++++++++-- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/lib/zstd_decompress.c b/lib/zstd_decompress.c index bb7ad43d..d4974b30 100644 --- a/lib/zstd_decompress.c +++ b/lib/zstd_decompress.c @@ -687,12 +687,16 @@ static void ZSTD_decodeSequence(seq_t* seq, seqState_t* seqState, const U32 mls) offset = 1-offset; if (offset != 0) { + #if 1 size_t temp = seqState->prevOffset[offset]; if (offset != 1) { if (offset == 3) seqState->prevOffset[3] = seqState->prevOffset[2]; seqState->prevOffset[2] = seqState->prevOffset[1]; } offset = temp; + #else + offset = seqState->prevOffset[1]; + #endif seqState->prevOffset[1] = seqState->prevOffset[0]; seqState->prevOffset[0] = offset; } @@ -701,8 +705,8 @@ static void ZSTD_decodeSequence(seq_t* seq, seqState_t* seqState, const U32 mls) } else { offset -= ZSTD_REP_MOVE; #if 0 - seqState->prevOffset[3] = seqState->prevOffset[2]; - seqState->prevOffset[2] = seqState->prevOffset[1]; + // seqState->prevOffset[3] = seqState->prevOffset[2]; + // seqState->prevOffset[2] = seqState->prevOffset[1]; seqState->prevOffset[1] = seqState->prevOffset[0]; seqState->prevOffset[0] = offset; #else diff --git a/lib/zstd_internal.h b/lib/zstd_internal.h index dbce471a..669d4380 100644 --- a/lib/zstd_internal.h +++ b/lib/zstd_internal.h @@ -71,7 +71,7 @@ #else #define ZSTD_REP_NUM 1 #define ZSTD_REP_INIT 2 - #define ZSTD_REP_MOVE (ZSTD_REP_NUM-1) + #define ZSTD_REP_MOVE 0//(ZSTD_REP_NUM-1) #endif #define KB *(1 <<10) diff --git a/programs/bench.c b/programs/bench.c index ff01ca68..5808c2ec 100644 --- a/programs/bench.c +++ b/programs/bench.c @@ -44,13 +44,22 @@ /* ************************************* * Includes ***************************************/ +#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(WIN64) || defined(_WIN64) + #define WINDOWS +#endif #include /* malloc, free */ #include /* memset */ #include /* fprintf, fopen, ftello64 */ #include /* stat64 */ #include /* stat64 */ -#include /* clock_t, clock, CLOCKS_PER_SEC */ - +#include /* clock_t, clock, CLOCKS_PER_SEC */ +#ifdef WINDOWS + #define mili_sleep(mili) Sleep(mili) +#else + #define mili_sleep(mili) usleep(mili*1000) + #include /* setpriority */ +#endif + /* sleep : posix - windows - others */ #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) # include @@ -283,6 +292,7 @@ static int BMK_benchMem(const void* srcBuffer, size_t srcSize, memset(compressedBuffer, 0xE5, maxCompressedSize); /* warm up and erase result buffer */ nbLoops = 0; + mili_sleep(1); // give processor to other processes clockStart = clock(); while (clock() == clockStart); clockStart = clock(); @@ -313,6 +323,7 @@ static int BMK_benchMem(const void* srcBuffer, size_t srcSize, memset(resultBuffer, 0xD6, srcSize); /* warm result buffer */ nbLoops = 0; + mili_sleep(1); // give processor to other processes clockStart = clock(); while (clock() == clockStart); clockStart = clock(); @@ -413,6 +424,11 @@ static void BMK_benchCLevel(void* srcBuffer, size_t benchedSize, { benchResult_t result, total; int l; +#ifdef WINDOWS + SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS); +#else + setpriority(PRIO_PROCESS, 0, -20); +#endif const char* pch = strrchr(displayName, '\\'); /* Windows */ if (!pch) pch = strrchr(displayName, '/'); /* Linux */