diff options
Diffstat (limited to 'tests/fullbench.c')
-rw-r--r-- | tests/fullbench.c | 48 |
1 files changed, 32 insertions, 16 deletions
diff --git a/tests/fullbench.c b/tests/fullbench.c index 2ec3ce5554e2..6abdd4da00fa 100644 --- a/tests/fullbench.c +++ b/tests/fullbench.c @@ -15,6 +15,7 @@ #include "util.h" /* Compiler options, UTIL_GetFileSize */ #include <stdlib.h> /* malloc */ #include <stdio.h> /* fprintf, fopen, ftello64 */ +#include <assert.h> /* assert */ #include "mem.h" /* U32 */ #ifndef ZSTD_DLL_IMPORT @@ -181,7 +182,7 @@ static size_t local_ZSTD_compress_generic_T2_end(void* dst, size_t dstCapacity, ZSTD_inBuffer buffIn; (void)buff2; ZSTD_CCtx_setParameter(g_cstream, ZSTD_p_compressionLevel, 1); - ZSTD_CCtx_setParameter(g_cstream, ZSTD_p_nbThreads, 2); + ZSTD_CCtx_setParameter(g_cstream, ZSTD_p_nbWorkers, 2); buffOut.dst = dst; buffOut.size = dstCapacity; buffOut.pos = 0; @@ -198,7 +199,7 @@ static size_t local_ZSTD_compress_generic_T2_continue(void* dst, size_t dstCapac ZSTD_inBuffer buffIn; (void)buff2; ZSTD_CCtx_setParameter(g_cstream, ZSTD_p_compressionLevel, 1); - ZSTD_CCtx_setParameter(g_cstream, ZSTD_p_nbThreads, 2); + ZSTD_CCtx_setParameter(g_cstream, ZSTD_p_nbWorkers, 2); buffOut.dst = dst; buffOut.size = dstCapacity; buffOut.pos = 0; @@ -413,33 +414,48 @@ static size_t benchMem(const void* src, size_t srcSize, U32 benchNb) break; /* test functions */ - /* by convention, test functions can be added > 100 */ + /* convention: test functions have ID > 100 */ default : ; } - { size_t i; for (i=0; i<dstBuffSize; i++) dstBuff[i]=(BYTE)i; } /* warming up memory */ + /* warming up memory */ + { size_t i; for (i=0; i<dstBuffSize; i++) dstBuff[i]=(BYTE)i; } + /* benchmark loop */ { U32 loopNb; -# define TIME_SEC_MICROSEC (1*1000000ULL) /* 1 second */ - U64 const clockLoop = TIMELOOP_S * TIME_SEC_MICROSEC; + U32 nbRounds = (U32)((50 MB) / (srcSize+1)) + 1; /* initial conservative speed estimate */ +# define TIME_SEC_MICROSEC (1*1000000ULL) /* 1 second */ +# define TIME_SEC_NANOSEC (1*1000000000ULL) /* 1 second */ DISPLAY("%2i- %-30.30s : \r", benchNb, benchName); for (loopNb = 1; loopNb <= g_nbIterations; loopNb++) { UTIL_time_t clockStart; size_t benchResult=0; - U32 nbRounds; + U32 roundNb; - UTIL_sleepMilli(1); /* give processor time to other processes */ + UTIL_sleepMilli(5); /* give processor time to other processes */ UTIL_waitForNextTick(); clockStart = UTIL_getTime(); - for (nbRounds=0; UTIL_clockSpanMicro(clockStart) < clockLoop; nbRounds++) { + for (roundNb=0; roundNb < nbRounds; roundNb++) { benchResult = benchFunction(dstBuff, dstBuffSize, buff2, src, srcSize); - if (ZSTD_isError(benchResult)) { DISPLAY("ERROR ! %s() => %s !! \n", benchName, ZSTD_getErrorName(benchResult)); exit(1); } - } - { U64 const clockSpanMicro = UTIL_clockSpanMicro(clockStart); - double const averageTime = (double)clockSpanMicro / TIME_SEC_MICROSEC / nbRounds; - if (averageTime < bestTime) bestTime = averageTime; - DISPLAY("%2i- %-30.30s : %7.1f MB/s (%9u)\r", loopNb, benchName, (double)srcSize / (1 MB) / bestTime, (U32)benchResult); + if (ZSTD_isError(benchResult)) { + DISPLAY("ERROR ! %s() => %s !! \n", benchName, ZSTD_getErrorName(benchResult)); + exit(1); + } } + { U64 const clockSpanNano = UTIL_clockSpanNano(clockStart); + double const averageTime = (double)clockSpanNano / TIME_SEC_NANOSEC / nbRounds; + if (clockSpanNano > 0) { + if (averageTime < bestTime) bestTime = averageTime; + assert(bestTime > (1./2000000000)); + nbRounds = (U32)(1. / bestTime); /* aim for 1 sec */ + DISPLAY("%2i- %-30.30s : %7.1f MB/s (%9u)\r", + loopNb, benchName, + (double)srcSize / (1 MB) / bestTime, + (U32)benchResult); + } else { + assert(nbRounds < 40000000); /* avoid overflow */ + nbRounds *= 100; + } } } } DISPLAY("%2u\n", benchNb); @@ -573,7 +589,7 @@ int main(int argc, const char** argv) for(i=1; i<argc; i++) { const char* argument = argv[i]; - if(!argument) continue; /* Protection if argument empty */ + assert(argument != NULL); /* Commands (note : aggregated commands are allowed) */ if (argument[0]=='-') { |