unsigned nbLoops)
{
size_t dstSize = 0;
- U64 totalTime;
if(!nbLoops) {
RETURN_QUIET_ERROR(1, BMK_runOutcome_t, "nbLoops must be nonzero ");
#endif
}
- /* benchmark loop */
+ /* benchmark */
{ UTIL_time_t const clockStart = UTIL_getTime();
unsigned loopNb, blockNb;
if (initFn != NULL) initFn(initPayload);
} else if (loopNb == 0) {
dstSize += res;
if (blockResults != NULL) blockResults[blockNb] = res;
- dstSize += res;
} }
} /* for (loopNb = 0; loopNb < nbLoops; loopNb++) */
- totalTime = UTIL_clockSpanNano(clockStart);
- }
- { BMK_runTime_t rt;
- rt.nanoSecPerRun = totalTime / nbLoops;
- rt.sumOfReturn = dstSize;
- return BMK_setValid_runTime(rt);
- }
+ { U64 const totalTime = UTIL_clockSpanNano(clockStart);
+ BMK_runTime_t rt;
+ rt.nanoSecPerRun = totalTime / nbLoops;
+ rt.sumOfReturn = dstSize;
+ return BMK_setValid_runTime(rt);
+ } }
}
int displayLevel, const char* displayName,
const BMK_advancedParams_t* adv)
{
- size_t const blockSize = ((adv->blockSize>=32 && (adv->mode != BMK_decodeOnly)) ? adv->blockSize : srcSize) + (!srcSize); /* avoid div by 0 */
+ size_t const blockSize = ((adv->blockSize>=32 && (adv->mode != BMK_decodeOnly)) ? adv->blockSize : srcSize) + (!srcSize); /* avoid div by 0 */
BMK_benchResult_t benchResult;
size_t const loadedCompressedSize = srcSize;
size_t cSize = 0;
assert(cctx != NULL); assert(dctx != NULL);
/* init */
+ memset(&benchResult, 0, sizeof(benchResult));
if (strlen(displayName)>17) displayName += strlen(displayName) - 17; /* display last 17 characters */
if (adv->mode == BMK_decodeOnly) { /* benchmark only decompression : source must be already compressed */
const char* srcPtr = (const char*)srcBuffer;
while (!(compressionCompleted && decompressionCompleted)) {
if (!compressionCompleted) {
- BMK_runTime_t cResult;
-
BMK_timedFnOutcome_t const cOutcome =
- BMK_benchFunctionTimed(timeStateCompress,
- &local_defaultCompress, (void*)cctx,
- &local_initCCtx, (void*)&cctxprep,
- nbBlocks,
- srcPtrs, srcSizes,
- cPtrs, cCapacities,
- cSizes);
+ BMK_benchFunctionTimed( timeStateCompress,
+ &local_defaultCompress, cctx,
+ &local_initCCtx, &cctxprep,
+ nbBlocks,
+ srcPtrs, srcSizes,
+ cPtrs, cCapacities,
+ cSizes);
if (!BMK_isSuccessful_timedFnOutcome(cOutcome)) {
return BMK_benchOutcome_error();
}
- cResult = BMK_extract_timedFnResult(cOutcome);
- ratio = (double)(srcSize / cResult.sumOfReturn);
-
- { int const ratioAccuracy = (ratio < 10.) ? 3 : 2;
+ { BMK_runTime_t const cResult = BMK_extract_timedFnResult(cOutcome);
cSize = cResult.sumOfReturn;
- benchResult.cSpeed = (srcSize * TIMELOOP_NANOSEC / cResult.nanoSecPerRun);
- benchResult.cSize = cSize;
ratio = (double)srcSize / cSize;
+ { BMK_benchResult_t newResult;
+ newResult.cSpeed = ((U64)srcSize * TIMELOOP_NANOSEC / cResult.nanoSecPerRun);
+ benchResult.cSize = cSize;
+ if (newResult.cSpeed > benchResult.cSpeed)
+ benchResult.cSpeed = newResult.cSpeed;
+ } }
+
+ { int const ratioAccuracy = (ratio < 10.) ? 3 : 2;
markNb = (markNb+1) % NB_MARKS;
DISPLAYLEVEL(2, "%2s-%-17.17s :%10u ->%10u (%5.*f),%6.*f MB/s\r",
- marks[markNb], displayName, (U32)srcSize, (U32)cSize,
+ marks[markNb], displayName,
+ (U32)srcSize, (U32)cSize,
ratioAccuracy, ratio,
benchResult.cSpeed < (10 MB) ? 2 : 1, (double)benchResult.cSpeed / MB_UNIT);
}
+ compressionCompleted = BMK_isCompleted_timedFnOutcome(cOutcome);
}
if(!decompressionCompleted) {
- BMK_runTime_t dResult;
-
BMK_timedFnOutcome_t const dOutcome =
- BMK_benchFunctionTimed(timeStateDecompress,
- &local_defaultDecompress, (void*)(dctx),
- &local_initDCtx, (void*)&dctxprep,
- nbBlocks,
- (const void* const*)cPtrs, cSizes,
- resPtrs, resSizes,
- NULL);
+ BMK_benchFunctionTimed(timeStateDecompress,
+ &local_defaultDecompress, dctx,
+ &local_initDCtx, &dctxprep,
+ nbBlocks,
+ (const void *const *)cPtrs, cSizes,
+ resPtrs, resSizes,
+ NULL);
if(!BMK_isSuccessful_timedFnOutcome(dOutcome)) {
return BMK_benchOutcome_error();
}
- dResult = BMK_extract_timedFnResult(dOutcome);
+ { BMK_runTime_t const dResult = BMK_extract_timedFnResult(dOutcome);
+ U64 const newDSpeed = (srcSize * TIMELOOP_NANOSEC / dResult.nanoSecPerRun);
+ if (newDSpeed > benchResult.dSpeed)
+ benchResult.dSpeed = newDSpeed;
+ }
{ int const ratioAccuracy = (ratio < 10.) ? 3 : 2;
- benchResult.dSpeed = (srcSize * TIMELOOP_NANOSEC / dResult.nanoSecPerRun);
markNb = (markNb+1) % NB_MARKS;
DISPLAYLEVEL(2, "%2s-%-17.17s :%10u ->%10u (%5.*f),%6.*f MB/s ,%6.1f MB/s \r",
- marks[markNb], displayName, (U32)srcSize, (U32)benchResult.cSize,
+ marks[markNb], displayName,
+ (U32)srcSize, (U32)benchResult.cSize,
ratioAccuracy, ratio,
benchResult.cSpeed < (10 MB) ? 2 : 1, (double)benchResult.cSpeed / MB_UNIT,
- (double)benchResult.dSpeed / (1 MB));
+ (double)benchResult.dSpeed / MB_UNIT);
}
+ decompressionCompleted = BMK_isCompleted_timedFnOutcome(dOutcome);
}
- }
+ } /* while (!(compressionCompleted && decompressionCompleted)) */
/* CRC Checking */
{ const BYTE* resultBuffer = (const BYTE*)(*resultBufferPtr);
#include "util.h"
#include "bench.h"
#include "zstd_errors.h"
-#include "zstd_internal.h"
+#include "zstd_internal.h" /* should not be needed */
+
/*-************************************
* Constants
static const U64 g_maxVariationTime = 60 * SEC_TO_MICRO;
static const int g_maxNbVariations = 64;
+
/*-************************************
* Macros
**************************************/
"ZSTD_greedy ", "ZSTD_lazy ", "ZSTD_lazy2 ",
"ZSTD_btlazy2 ", "ZSTD_btopt ", "ZSTD_btultra "};
-
static const U32 tlen_table[TLEN_RANGE] = { 0, 1, 2, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 256, 512, 999 };
+
/*-************************************
* Setup for Adding new params
**************************************/
}
}
+
/*-************************************
* Benchmark Parameters/Global Variables
**************************************/
* g_clockGranularity
*/
+
/*-*******************************************************
* General Util Functions
*********************************************************/
}
fprintf(f, " }, /* R:%5.3f at %5.1f MB/s - %5.1f MB/s */\n",
- (double)srcSize / res.result.cSize, (double)res.result.cSpeed / (1 MB), (double)res.result.dSpeed / (1 MB));
+ (double)srcSize / res.result.cSize, (double)res.result.cSpeed / MB_UNIT, (double)res.result.dSpeed / MB_UNIT);
}
/* Writes to f the results of a parameter benchmark */
}
fprintf(f, "================================\n");
fprintf(f, "Level Bounds: R: > %.3f AND C: < %.1f MB/s \n\n",
- (double)srcSize / g_lvltarget.cSize, (double)g_lvltarget.cSpeed / (1 MB));
+ (double)srcSize / g_lvltarget.cSize, (double)g_lvltarget.cSpeed / MB_UNIT);
fprintf(f, "Overall Winner: \n");
/* too large compression speed difference for the compression benefit */
if (W_ratio > O_ratio)
DISPLAY ("Compression Speed : %5.3f @ %4.1f MB/s vs %5.3f @ %4.1f MB/s : not enough for level %i\n",
- W_ratio, (double)testResult.cSpeed / (1 MB),
- O_ratio, (double)winners[cLevel].result.cSpeed / (1 MB), cLevel);
+ W_ratio, (double)testResult.cSpeed / MB_UNIT,
+ O_ratio, (double)winners[cLevel].result.cSpeed / MB_UNIT, cLevel);
continue;
}
if (W_DSpeed_note < O_DSpeed_note ) {
/* too large decompression speed difference for the compression benefit */
if (W_ratio > O_ratio)
DISPLAY ("Decompression Speed : %5.3f @ %4.1f MB/s vs %5.3f @ %4.1f MB/s : not enough for level %i\n",
- W_ratio, (double)testResult.dSpeed / (1 MB),
- O_ratio, (double)winners[cLevel].result.dSpeed / (1 MB), cLevel);
+ W_ratio, (double)testResult.dSpeed / MB_UNIT,
+ O_ratio, (double)winners[cLevel].result.dSpeed / MB_UNIT, cLevel);
continue;
}
if (f==NULL) { DISPLAY("error opening %s \n", rfName); exit(1); }
if (g_target) {
- BMK_init_level_constraints(g_target * (1 MB));
+ BMK_init_level_constraints(g_target * MB_UNIT);
} else {
/* baseline config for level 1 */
paramValues_t const l1params = cParamsToPVals(ZSTD_getCParams(1, buf.maxBlockSize, ctx.dictSize));