mirror of
https://github.com/facebook/zstd.git
synced 2025-11-27 00:05:09 -05:00
updated fullbench and paramgrill
to use new benchfn returning a double.
This commit is contained in:
parent
b8701102e0
commit
cee31bbd25
@ -67,12 +67,6 @@ static const size_t g_sampleSize = 10000000;
|
|||||||
static unsigned g_nbIterations = NBLOOPS;
|
static unsigned g_nbIterations = NBLOOPS;
|
||||||
static double g_compressibility = COMPRESSIBILITY_DEFAULT;
|
static double g_compressibility = COMPRESSIBILITY_DEFAULT;
|
||||||
|
|
||||||
static void BMK_SetNbIterations(unsigned nbLoops)
|
|
||||||
{
|
|
||||||
g_nbIterations = nbLoops;
|
|
||||||
DISPLAY("- %i iterations -\n", g_nbIterations);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*_*******************************************************
|
/*_*******************************************************
|
||||||
* Private functions
|
* Private functions
|
||||||
@ -316,9 +310,9 @@ static size_t local_ZSTD_decompressContinue(const void* src, size_t srcSize,
|
|||||||
/*_*******************************************************
|
/*_*******************************************************
|
||||||
* Bench functions
|
* Bench functions
|
||||||
*********************************************************/
|
*********************************************************/
|
||||||
static size_t benchMem(unsigned benchNb,
|
static int benchMem(unsigned benchNb,
|
||||||
const void* src, size_t srcSize,
|
const void* src, size_t srcSize,
|
||||||
int cLevel, ZSTD_compressionParameters cparams)
|
int cLevel, ZSTD_compressionParameters cparams)
|
||||||
{
|
{
|
||||||
size_t dstBuffSize = ZSTD_compressBound(srcSize);
|
size_t dstBuffSize = ZSTD_compressBound(srcSize);
|
||||||
BYTE* dstBuff;
|
BYTE* dstBuff;
|
||||||
@ -395,22 +389,22 @@ static size_t benchMem(unsigned benchNb,
|
|||||||
cparams->minMatch, cparams->targetLength, cparams->strategy); */
|
cparams->minMatch, cparams->targetLength, cparams->strategy); */
|
||||||
|
|
||||||
ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_compressionLevel, cLevel);
|
ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_compressionLevel, cLevel);
|
||||||
ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_windowLog, cparams.windowLog);
|
ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_windowLog, (int)cparams.windowLog);
|
||||||
ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_hashLog, cparams.hashLog);
|
ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_hashLog, (int)cparams.hashLog);
|
||||||
ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_chainLog, cparams.chainLog);
|
ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_chainLog, (int)cparams.chainLog);
|
||||||
ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_searchLog, cparams.searchLog);
|
ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_searchLog, (int)cparams.searchLog);
|
||||||
ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_minMatch, cparams.minMatch);
|
ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_minMatch, (int)cparams.minMatch);
|
||||||
ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_targetLength, cparams.targetLength);
|
ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_targetLength, (int)cparams.targetLength);
|
||||||
ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_strategy, cparams.strategy);
|
ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_strategy, cparams.strategy);
|
||||||
|
|
||||||
|
|
||||||
ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_compressionLevel, cLevel);
|
ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_compressionLevel, cLevel);
|
||||||
ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_windowLog, cparams.windowLog);
|
ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_windowLog, (int)cparams.windowLog);
|
||||||
ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_hashLog, cparams.hashLog);
|
ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_hashLog, (int)cparams.hashLog);
|
||||||
ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_chainLog, cparams.chainLog);
|
ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_chainLog, (int)cparams.chainLog);
|
||||||
ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_searchLog, cparams.searchLog);
|
ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_searchLog, (int)cparams.searchLog);
|
||||||
ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_minMatch, cparams.minMatch);
|
ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_minMatch, (int)cparams.minMatch);
|
||||||
ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_targetLength, cparams.targetLength);
|
ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_targetLength, (int)cparams.targetLength);
|
||||||
ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_strategy, cparams.strategy);
|
ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_strategy, cparams.strategy);
|
||||||
|
|
||||||
/* Preparation */
|
/* Preparation */
|
||||||
@ -469,8 +463,9 @@ static size_t benchMem(unsigned benchNb,
|
|||||||
iend = ip + ZSTD_blockHeaderSize + cBlockSize; /* End of first block */
|
iend = ip + ZSTD_blockHeaderSize + cBlockSize; /* End of first block */
|
||||||
ip += ZSTD_blockHeaderSize; /* skip block header */
|
ip += ZSTD_blockHeaderSize; /* skip block header */
|
||||||
ZSTD_decompressBegin(g_zdc);
|
ZSTD_decompressBegin(g_zdc);
|
||||||
ip += ZSTD_decodeLiteralsBlock(g_zdc, ip, iend-ip); /* skip literal segment */
|
assert(iend > ip);
|
||||||
g_cSize = iend-ip;
|
ip += ZSTD_decodeLiteralsBlock(g_zdc, ip, (size_t)(iend-ip)); /* skip literal segment */
|
||||||
|
g_cSize = (size_t)(iend-ip);
|
||||||
memcpy(buff2, ip, g_cSize); /* copy rest of block (it starts by SeqHeader) */
|
memcpy(buff2, ip, g_cSize); /* copy rest of block (it starts by SeqHeader) */
|
||||||
srcSize = srcSize > 128 KB ? 128 KB : srcSize; /* speed relative to block */
|
srcSize = srcSize > 128 KB ? 128 KB : srcSize; /* speed relative to block */
|
||||||
break;
|
break;
|
||||||
@ -654,7 +649,9 @@ static unsigned readU32FromChar(const char** stringPtr)
|
|||||||
while ((**stringPtr >='0') && (**stringPtr <='9')) {
|
while ((**stringPtr >='0') && (**stringPtr <='9')) {
|
||||||
unsigned const max = (((unsigned)(-1)) / 10) - 1;
|
unsigned const max = (((unsigned)(-1)) / 10) - 1;
|
||||||
if (result > max) ERROR_OUT(errorMsg);
|
if (result > max) ERROR_OUT(errorMsg);
|
||||||
result *= 10, result += **stringPtr - '0', (*stringPtr)++ ;
|
result *= 10;
|
||||||
|
result += (unsigned)(**stringPtr - '0');
|
||||||
|
(*stringPtr)++ ;
|
||||||
}
|
}
|
||||||
if ((**stringPtr=='K') || (**stringPtr=='M')) {
|
if ((**stringPtr=='K') || (**stringPtr=='M')) {
|
||||||
unsigned const maxK = ((unsigned)(-1)) >> 10;
|
unsigned const maxK = ((unsigned)(-1)) >> 10;
|
||||||
@ -671,7 +668,7 @@ static unsigned readU32FromChar(const char** stringPtr)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned longCommandWArg(const char** stringPtr, const char* longCommand)
|
static int longCommandWArg(const char** stringPtr, const char* longCommand)
|
||||||
{
|
{
|
||||||
size_t const comSize = strlen(longCommand);
|
size_t const comSize = strlen(longCommand);
|
||||||
int const result = !strncmp(*stringPtr, longCommand, comSize);
|
int const result = !strncmp(*stringPtr, longCommand, comSize);
|
||||||
@ -772,7 +769,7 @@ int main(int argc, const char** argv)
|
|||||||
/* Modify Nb Iterations */
|
/* Modify Nb Iterations */
|
||||||
case 'i':
|
case 'i':
|
||||||
argument++;
|
argument++;
|
||||||
BMK_SetNbIterations((int)readU32FromChar(&argument));
|
g_nbIterations = readU32FromChar(&argument);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Select compressibility of synthetic sample */
|
/* Select compressibility of synthetic sample */
|
||||||
@ -782,7 +779,7 @@ int main(int argc, const char** argv)
|
|||||||
break;
|
break;
|
||||||
case 'l':
|
case 'l':
|
||||||
argument++;
|
argument++;
|
||||||
cLevel = readU32FromChar(&argument);
|
cLevel = (int)readU32FromChar(&argument);
|
||||||
cparams = ZSTD_getCParams(cLevel, 0, 0);
|
cparams = ZSTD_getCParams(cLevel, 0, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@ -141,7 +141,7 @@ static const char* g_shortParamNames[NUM_PARAMS] =
|
|||||||
/* maps value from { 0 to rangetable[param] - 1 } to valid paramvalues */
|
/* maps value from { 0 to rangetable[param] - 1 } to valid paramvalues */
|
||||||
static U32 rangeMap(varInds_t param, int ind)
|
static U32 rangeMap(varInds_t param, int ind)
|
||||||
{
|
{
|
||||||
ind = MAX(MIN(ind, (int)rangetable[param] - 1), 0);
|
U32 const uind = (U32)MAX(MIN(ind, (int)rangetable[param] - 1), 0);
|
||||||
switch(param) {
|
switch(param) {
|
||||||
case wlog_ind: /* using default: triggers -Wswitch-enum */
|
case wlog_ind: /* using default: triggers -Wswitch-enum */
|
||||||
case clog_ind:
|
case clog_ind:
|
||||||
@ -149,11 +149,11 @@ static U32 rangeMap(varInds_t param, int ind)
|
|||||||
case slog_ind:
|
case slog_ind:
|
||||||
case mml_ind:
|
case mml_ind:
|
||||||
case strt_ind:
|
case strt_ind:
|
||||||
return mintable[param] + ind;
|
return mintable[param] + uind;
|
||||||
case tlen_ind:
|
case tlen_ind:
|
||||||
return tlen_table[ind];
|
return tlen_table[uind];
|
||||||
case fadt_ind: /* 0, 1, 2 -> -1, 0, 1 */
|
case fadt_ind: /* 0, 1, 2 -> -1, 0, 1 */
|
||||||
return ind - 1;
|
return uind - 1;
|
||||||
case NUM_PARAMS:
|
case NUM_PARAMS:
|
||||||
default:;
|
default:;
|
||||||
}
|
}
|
||||||
@ -173,7 +173,7 @@ static int invRangeMap(varInds_t param, U32 value)
|
|||||||
case slog_ind:
|
case slog_ind:
|
||||||
case mml_ind:
|
case mml_ind:
|
||||||
case strt_ind:
|
case strt_ind:
|
||||||
return value - mintable[param];
|
return (int)(value - mintable[param]);
|
||||||
case tlen_ind: /* bin search */
|
case tlen_ind: /* bin search */
|
||||||
{
|
{
|
||||||
int lo = 0;
|
int lo = 0;
|
||||||
@ -493,13 +493,15 @@ static void
|
|||||||
paramVariation(paramValues_t* ptr, memoTable_t* mtAll, const U32 nbChanges)
|
paramVariation(paramValues_t* ptr, memoTable_t* mtAll, const U32 nbChanges)
|
||||||
{
|
{
|
||||||
paramValues_t p;
|
paramValues_t p;
|
||||||
U32 validated = 0;
|
int validated = 0;
|
||||||
while (!validated) {
|
while (!validated) {
|
||||||
U32 i;
|
U32 i;
|
||||||
p = *ptr;
|
p = *ptr;
|
||||||
for (i = 0 ; i < nbChanges ; i++) {
|
for (i = 0 ; i < nbChanges ; i++) {
|
||||||
const U32 changeID = (U32)FUZ_rand(&g_rand) % (mtAll[p.vals[strt_ind]].varLen << 1);
|
const U32 changeID = (U32)FUZ_rand(&g_rand) % (mtAll[p.vals[strt_ind]].varLen << 1);
|
||||||
paramVaryOnce(mtAll[p.vals[strt_ind]].varArray[changeID >> 1], ((changeID & 1) << 1) - 1, &p);
|
paramVaryOnce(mtAll[p.vals[strt_ind]].varArray[changeID >> 1],
|
||||||
|
(int)((changeID & 1) << 1) - 1,
|
||||||
|
&p);
|
||||||
}
|
}
|
||||||
validated = paramValid(p);
|
validated = paramValid(p);
|
||||||
}
|
}
|
||||||
@ -511,7 +513,7 @@ static paramValues_t randomParams(void)
|
|||||||
{
|
{
|
||||||
varInds_t v; paramValues_t p;
|
varInds_t v; paramValues_t p;
|
||||||
for(v = 0; v < NUM_PARAMS; v++) {
|
for(v = 0; v < NUM_PARAMS; v++) {
|
||||||
p.vals[v] = rangeMap(v, FUZ_rand(&g_rand) % rangetable[v]);
|
p.vals[v] = rangeMap(v, (int)(FUZ_rand(&g_rand) % rangetable[v]));
|
||||||
}
|
}
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
@ -1638,7 +1640,7 @@ BMK_benchMemInvertible( buffers_t buf, contexts_t ctx,
|
|||||||
return bOut;
|
return bOut;
|
||||||
}
|
}
|
||||||
{ BMK_runTime_t const rResult = BMK_extract_runTime(cOutcome);
|
{ BMK_runTime_t const rResult = BMK_extract_runTime(cOutcome);
|
||||||
bResult.cSpeed = (srcSize * TIMELOOP_NANOSEC) / rResult.nanoSecPerRun;
|
bResult.cSpeed = (unsigned long long)((double)srcSize * TIMELOOP_NANOSEC / rResult.nanoSecPerRun);
|
||||||
bResult.cSize = rResult.sumOfReturn;
|
bResult.cSize = rResult.sumOfReturn;
|
||||||
}
|
}
|
||||||
compressionCompleted = BMK_isCompleted_TimedFn(timeStateCompress);
|
compressionCompleted = BMK_isCompleted_TimedFn(timeStateCompress);
|
||||||
@ -1656,7 +1658,7 @@ BMK_benchMemInvertible( buffers_t buf, contexts_t ctx,
|
|||||||
return bOut;
|
return bOut;
|
||||||
}
|
}
|
||||||
{ BMK_runTime_t const rResult = BMK_extract_runTime(dOutcome);
|
{ BMK_runTime_t const rResult = BMK_extract_runTime(dOutcome);
|
||||||
bResult.dSpeed = (srcSize * TIMELOOP_NANOSEC) / rResult.nanoSecPerRun;
|
bResult.dSpeed = (unsigned long long)((double)srcSize * TIMELOOP_NANOSEC / rResult.nanoSecPerRun);
|
||||||
}
|
}
|
||||||
decompressionCompleted = BMK_isCompleted_TimedFn(timeStateDecompress);
|
decompressionCompleted = BMK_isCompleted_TimedFn(timeStateDecompress);
|
||||||
}
|
}
|
||||||
@ -2199,7 +2201,9 @@ static winnerInfo_t climbOnce(const constraint_t target,
|
|||||||
for (offset = -1; offset <= 1; offset += 2) {
|
for (offset = -1; offset <= 1; offset += 2) {
|
||||||
CHECKTIME(winnerInfo);
|
CHECKTIME(winnerInfo);
|
||||||
candidateInfo.params = cparam;
|
candidateInfo.params = cparam;
|
||||||
paramVaryOnce(mtAll[cparam.vals[strt_ind]].varArray[i], offset, &candidateInfo.params);
|
paramVaryOnce(mtAll[cparam.vals[strt_ind]].varArray[i],
|
||||||
|
offset,
|
||||||
|
&candidateInfo.params);
|
||||||
|
|
||||||
if(paramValid(candidateInfo.params)) {
|
if(paramValid(candidateInfo.params)) {
|
||||||
int res;
|
int res;
|
||||||
@ -2351,7 +2355,7 @@ static int nextStrategy(const int currentStrategy, const int bestStrategy)
|
|||||||
* cLevel - compression level to exceed (all solutions must be > lvl in cSpeed + ratio)
|
* cLevel - compression level to exceed (all solutions must be > lvl in cSpeed + ratio)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int g_maxTries = 5;
|
static unsigned g_maxTries = 5;
|
||||||
#define TRY_DECAY 1
|
#define TRY_DECAY 1
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -2561,7 +2565,7 @@ _cleanUp:
|
|||||||
* @return 0 and doesn't modify *stringPtr otherwise.
|
* @return 0 and doesn't modify *stringPtr otherwise.
|
||||||
* from zstdcli.c
|
* from zstdcli.c
|
||||||
*/
|
*/
|
||||||
static unsigned longCommandWArg(const char** stringPtr, const char* longCommand)
|
static int longCommandWArg(const char** stringPtr, const char* longCommand)
|
||||||
{
|
{
|
||||||
size_t const comSize = strlen(longCommand);
|
size_t const comSize = strlen(longCommand);
|
||||||
int const result = !strncmp(*stringPtr, longCommand, comSize);
|
int const result = !strncmp(*stringPtr, longCommand, comSize);
|
||||||
@ -2588,7 +2592,10 @@ static unsigned readU32FromChar(const char** stringPtr)
|
|||||||
while ((**stringPtr >='0') && (**stringPtr <='9')) {
|
while ((**stringPtr >='0') && (**stringPtr <='9')) {
|
||||||
unsigned const max = (((unsigned)(-1)) / 10) - 1;
|
unsigned const max = (((unsigned)(-1)) / 10) - 1;
|
||||||
if (result > max) errorOut(errorMsg);
|
if (result > max) errorOut(errorMsg);
|
||||||
result *= 10, result += **stringPtr - '0', (*stringPtr)++ ;
|
result *= 10;
|
||||||
|
assert(**stringPtr >= '0');
|
||||||
|
result += (unsigned)(**stringPtr - '0');
|
||||||
|
(*stringPtr)++ ;
|
||||||
}
|
}
|
||||||
if ((**stringPtr=='K') || (**stringPtr=='M')) {
|
if ((**stringPtr=='K') || (**stringPtr=='M')) {
|
||||||
unsigned const maxK = ((unsigned)(-1)) >> 10;
|
unsigned const maxK = ((unsigned)(-1)) >> 10;
|
||||||
@ -2726,7 +2733,7 @@ int main(int argc, const char** argv)
|
|||||||
PARSE_SUB_ARGS("strict=", "stc=", g_strictness);
|
PARSE_SUB_ARGS("strict=", "stc=", g_strictness);
|
||||||
PARSE_SUB_ARGS("maxTries=", "tries=", g_maxTries);
|
PARSE_SUB_ARGS("maxTries=", "tries=", g_maxTries);
|
||||||
PARSE_SUB_ARGS("memoLimitLog=", "memLog=", memoTableLog);
|
PARSE_SUB_ARGS("memoLimitLog=", "memLog=", memoTableLog);
|
||||||
if (longCommandWArg(&argument, "level=") || longCommandWArg(&argument, "lvl=")) { cLevelOpt = readU32FromChar(&argument); g_optmode = 1; if (argument[0]==',') { argument++; continue; } else break; }
|
if (longCommandWArg(&argument, "level=") || longCommandWArg(&argument, "lvl=")) { cLevelOpt = (int)readU32FromChar(&argument); g_optmode = 1; if (argument[0]==',') { argument++; continue; } else break; }
|
||||||
if (longCommandWArg(&argument, "speedForRatio=") || longCommandWArg(&argument, "speedRatio=")) { g_ratioMultiplier = readDoubleFromChar(&argument); if (argument[0]==',') { argument++; continue; } else break; }
|
if (longCommandWArg(&argument, "speedForRatio=") || longCommandWArg(&argument, "speedRatio=")) { g_ratioMultiplier = readDoubleFromChar(&argument); if (argument[0]==',') { argument++; continue; } else break; }
|
||||||
|
|
||||||
DISPLAY("invalid optimization parameter \n");
|
DISPLAY("invalid optimization parameter \n");
|
||||||
@ -2743,7 +2750,7 @@ int main(int argc, const char** argv)
|
|||||||
g_singleRun = 1;
|
g_singleRun = 1;
|
||||||
for ( ; ;) {
|
for ( ; ;) {
|
||||||
if(parse_params(&argument, &g_params)) { if(argument[0] == ',') { argument++; continue; } else break; }
|
if(parse_params(&argument, &g_params)) { if(argument[0] == ',') { argument++; continue; } else break; }
|
||||||
if (longCommandWArg(&argument, "level=") || longCommandWArg(&argument, "lvl=")) { cLevelRun = readU32FromChar(&argument); g_params = emptyParams(); if (argument[0]==',') { argument++; continue; } else break; }
|
if (longCommandWArg(&argument, "level=") || longCommandWArg(&argument, "lvl=")) { cLevelRun = (int)readU32FromChar(&argument); g_params = emptyParams(); if (argument[0]==',') { argument++; continue; } else break; }
|
||||||
|
|
||||||
DISPLAY("invalid compression parameter \n");
|
DISPLAY("invalid compression parameter \n");
|
||||||
return 1;
|
return 1;
|
||||||
@ -2855,7 +2862,7 @@ int main(int argc, const char** argv)
|
|||||||
continue;
|
continue;
|
||||||
case 'L':
|
case 'L':
|
||||||
{ argument++;
|
{ argument++;
|
||||||
cLevelRun = readU32FromChar(&argument);
|
cLevelRun = (int)readU32FromChar(&argument);
|
||||||
g_params = emptyParams();
|
g_params = emptyParams();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -2944,7 +2951,8 @@ int main(int argc, const char** argv)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (g_optimizer) {
|
if (g_optimizer) {
|
||||||
result = optimizeForSize(argv+filenamesStart, argc-filenamesStart, dictFileName, target, paramTarget, cLevelOpt, cLevelRun, memoTableLog);
|
assert(filenamesStart < argc);
|
||||||
|
result = optimizeForSize(argv+filenamesStart, (size_t)(argc-filenamesStart), dictFileName, target, paramTarget, cLevelOpt, cLevelRun, memoTableLog);
|
||||||
} else {
|
} else {
|
||||||
result = benchFiles(argv+filenamesStart, argc-filenamesStart, dictFileName, cLevelRun);
|
result = benchFiles(argv+filenamesStart, argc-filenamesStart, dictFileName, cLevelRun);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user