Generalize, macro magic numbers
parent
3a2e95eba4
commit
8ff0de15e4
|
@ -112,6 +112,9 @@ Full list of arguments
|
||||||
dSpeed= - Minimum decompression speed
|
dSpeed= - Minimum decompression speed
|
||||||
cMem= - compression memory
|
cMem= - compression memory
|
||||||
lvl= - Automatically sets compression speed constraint to the speed of that level
|
lvl= - Automatically sets compression speed constraint to the speed of that level
|
||||||
|
stc= - In lvl mode, represents slack in ratio/cSpeed allowed for a solution to be considered
|
||||||
|
- In normal operation, represents slack in strategy selection in choosing the default parameters
|
||||||
|
--optimize= : same as -O with more verbose syntax
|
||||||
-P# : generated sample compressibility
|
-P# : generated sample compressibility
|
||||||
-t# : Caps runtime of operation in seconds (default : 99999 seconds (about 27 hours ))
|
-t# : Caps runtime of operation in seconds (default : 99999 seconds (about 27 hours ))
|
||||||
-v : Prints Benchmarking output
|
-v : Prints Benchmarking output
|
||||||
|
|
|
@ -139,8 +139,9 @@ struct ll_node {
|
||||||
static ll_node* g_winners; /* linked list sorted ascending by cSize & cSpeed */
|
static ll_node* g_winners; /* linked list sorted ascending by cSize & cSpeed */
|
||||||
static BMK_result_t g_lvltarget;
|
static BMK_result_t g_lvltarget;
|
||||||
|
|
||||||
/* range 0 - 99 */
|
/* range 0 - 99, measure of how strict */
|
||||||
static U32 g_strictness = 99;
|
#define DEFAULT_STRICTNESS 99999
|
||||||
|
static U32 g_strictness = DEFAULT_STRICTNESS;
|
||||||
|
|
||||||
void BMK_SetNbIterations(int nbLoops)
|
void BMK_SetNbIterations(int nbLoops)
|
||||||
{
|
{
|
||||||
|
@ -318,8 +319,8 @@ static int compareResultLT(const BMK_result_t result1, const BMK_result_t result
|
||||||
|
|
||||||
static constraint_t relaxTarget(constraint_t target) {
|
static constraint_t relaxTarget(constraint_t target) {
|
||||||
target.cMem = (U32)-1;
|
target.cMem = (U32)-1;
|
||||||
target.cSpeed *= ((double)(g_strictness + 1) / 100);
|
target.cSpeed *= ((double)(g_strictness) / 100);
|
||||||
target.dSpeed *= ((double)(g_strictness + 1) / 100);
|
target.dSpeed *= ((double)(g_strictness) / 100);
|
||||||
return target;
|
return target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2080,8 +2081,7 @@ static ZSTD_compressionParameters maskParams(ZSTD_compressionParameters base, ZS
|
||||||
}
|
}
|
||||||
|
|
||||||
/* experiment with playing with this and decay value */
|
/* experiment with playing with this and decay value */
|
||||||
#define MAX_TRIES 8
|
|
||||||
#define TRY_DECAY 3
|
|
||||||
/* main fn called when using --optimize */
|
/* main fn called when using --optimize */
|
||||||
/* Does strategy selection by benchmarking default compression levels
|
/* Does strategy selection by benchmarking default compression levels
|
||||||
* then optimizes by strategy, starting with the best one and moving
|
* then optimizes by strategy, starting with the best one and moving
|
||||||
|
@ -2095,6 +2095,9 @@ static ZSTD_compressionParameters maskParams(ZSTD_compressionParameters base, ZS
|
||||||
* 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)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define MAX_TRIES 3
|
||||||
|
#define TRY_DECAY 1
|
||||||
|
|
||||||
static int optimizeForSize(const char* const * const fileNamesTable, const size_t nbFiles, const char* dictFileName, constraint_t target, ZSTD_compressionParameters paramTarget, int cLevel)
|
static int optimizeForSize(const char* const * const fileNamesTable, const size_t nbFiles, const char* dictFileName, constraint_t target, ZSTD_compressionParameters paramTarget, int cLevel)
|
||||||
{
|
{
|
||||||
varInds_t varArray [NUM_PARAMS];
|
varInds_t varArray [NUM_PARAMS];
|
||||||
|
@ -2164,6 +2167,21 @@ static int optimizeForSize(const char* const * const fileNamesTable, const size_
|
||||||
goto _cleanUp;
|
goto _cleanUp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* default strictness = Maximum for */
|
||||||
|
if(g_strictness == DEFAULT_STRICTNESS) {
|
||||||
|
if(cLevel) {
|
||||||
|
g_strictness = 99;
|
||||||
|
} else {
|
||||||
|
g_strictness = 90;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(0 >= g_strictness || g_strictness > 100) {
|
||||||
|
DISPLAY("Strictness Outside of Bounds\n");
|
||||||
|
ret = 4;
|
||||||
|
goto _cleanUp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* use level'ing mode instead of normal target mode */
|
/* use level'ing mode instead of normal target mode */
|
||||||
if(cLevel) {
|
if(cLevel) {
|
||||||
winner.params = ZSTD_getCParams(cLevel, maxBlockSize, ctx.dictSize);
|
winner.params = ZSTD_getCParams(cLevel, maxBlockSize, ctx.dictSize);
|
||||||
|
@ -2177,8 +2195,8 @@ static int optimizeForSize(const char* const * const fileNamesTable, const size_
|
||||||
g_targetConstraints = target;
|
g_targetConstraints = target;
|
||||||
|
|
||||||
g_lvltarget = winner.result;
|
g_lvltarget = winner.result;
|
||||||
g_lvltarget.cSpeed *= ((double)(g_strictness + 1) / 100);
|
g_lvltarget.cSpeed *= ((double)(g_strictness) / 100);
|
||||||
g_lvltarget.cSize /= ((double)(g_strictness + 1) / 100);
|
g_lvltarget.cSize /= ((double)(g_strictness) / 100);
|
||||||
|
|
||||||
BMK_printWinnerOpt(stdout, cLevel, winner.result, winner.params, target, buf.srcSize);
|
BMK_printWinnerOpt(stdout, cLevel, winner.result, winner.params, target, buf.srcSize);
|
||||||
}
|
}
|
||||||
|
@ -2199,6 +2217,7 @@ static int optimizeForSize(const char* const * const fileNamesTable, const size_
|
||||||
|
|
||||||
{
|
{
|
||||||
varInds_t varNew[NUM_PARAMS];
|
varInds_t varNew[NUM_PARAMS];
|
||||||
|
ZSTD_compressionParameters CParams;
|
||||||
|
|
||||||
/* find best solution from default params */
|
/* find best solution from default params */
|
||||||
{
|
{
|
||||||
|
@ -2210,8 +2229,7 @@ static int optimizeForSize(const char* const * const fileNamesTable, const size_
|
||||||
int i;
|
int i;
|
||||||
for (i=1; i<=maxSeeds; i++) {
|
for (i=1; i<=maxSeeds; i++) {
|
||||||
int ec;
|
int ec;
|
||||||
ZSTD_compressionParameters CParams = ZSTD_getCParams(i, maxBlockSize, ctx.dictSize);
|
CParams = maskParams(ZSTD_getCParams(i, maxBlockSize, ctx.dictSize), paramTarget);
|
||||||
CParams = maskParams(CParams, paramTarget);
|
|
||||||
ec = BMK_benchParam(&candidate, buf, ctx, CParams);
|
ec = BMK_benchParam(&candidate, buf, ctx, CParams);
|
||||||
BMK_printWinnerOpt(stdout, i, candidate, CParams, target, buf.srcSize);
|
BMK_printWinnerOpt(stdout, i, candidate, CParams, target, buf.srcSize);
|
||||||
|
|
||||||
|
@ -2221,9 +2239,7 @@ static int optimizeForSize(const char* const * const fileNamesTable, const size_
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if the current params are too slow, just stop. */
|
/* if the current params are too slow, just stop. */
|
||||||
if(target.cSpeed != 0 && target.cSpeed > winner.result.cSpeed / 2) {
|
if(target.cSpeed > candidate.cSpeed * 2) { break; }
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2239,6 +2255,7 @@ static int optimizeForSize(const char* const * const fileNamesTable, const size_
|
||||||
int tries = MAX_TRIES;
|
int tries = MAX_TRIES;
|
||||||
|
|
||||||
{
|
{
|
||||||
|
/* one iterations of hill climbing with the level-defined parameters. */
|
||||||
int varLenNew = sanitizeVarArray(varNew, varLen, varArray, st);
|
int varLenNew = sanitizeVarArray(varNew, varLen, varArray, st);
|
||||||
winnerInfo_t w1 = climbOnce(target, varNew, varLenNew, allMT[st],
|
winnerInfo_t w1 = climbOnce(target, varNew, varLenNew, allMT[st],
|
||||||
buf, ctx, winner.params);
|
buf, ctx, winner.params);
|
||||||
|
@ -2247,17 +2264,20 @@ static int optimizeForSize(const char* const * const fileNamesTable, const size_
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while(st && tries) {
|
while(st && tries > 0) {
|
||||||
DEBUGOUTPUT("StrategySwitch: %s\n", g_stratName[st]);
|
DEBUGOUTPUT("StrategySwitch: %s\n", g_stratName[st]);
|
||||||
winnerInfo_t wc = optimizeFixedStrategy(buf, ctx, target, paramTarget,
|
winnerInfo_t wc = optimizeFixedStrategy(buf, ctx, target, paramTarget,
|
||||||
st, varArray, varLen, allMT[st], tries);
|
st, varArray, varLen, allMT[st], tries);
|
||||||
|
|
||||||
if(compareResultLT(winner.result, wc.result, target, buf.srcSize)) {
|
if(compareResultLT(winner.result, wc.result, target, buf.srcSize)) {
|
||||||
winner = wc;
|
winner = wc;
|
||||||
}
|
tries = MAX_TRIES;
|
||||||
|
bestStrategy = st;
|
||||||
|
} else {
|
||||||
st = nextStrategy(st, bestStrategy);
|
st = nextStrategy(st, bestStrategy);
|
||||||
tries -= TRY_DECAY;
|
tries -= TRY_DECAY;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
winner = optimizeFixedStrategy(buf, ctx, target, paramTarget, paramTarget.strategy,
|
winner = optimizeFixedStrategy(buf, ctx, target, paramTarget, paramTarget.strategy,
|
||||||
varArray, varLen, allMT[paramTarget.strategy], 10);
|
varArray, varLen, allMT[paramTarget.strategy], 10);
|
||||||
|
|
Loading…
Reference in New Issue