mirror of
https://github.com/facebook/zstd.git
synced 2025-08-05 19:15:58 +03:00
Perf improvements
try decay strategy selection skipping
This commit is contained in:
@@ -2079,7 +2079,9 @@ static ZSTD_compressionParameters maskParams(ZSTD_compressionParameters base, ZS
|
|||||||
return base;
|
return base;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* experiment with playing with this and decay value */
|
||||||
#define MAX_TRIES 8
|
#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
|
||||||
@@ -2092,6 +2094,7 @@ static ZSTD_compressionParameters maskParams(ZSTD_compressionParameters base, ZS
|
|||||||
* paramTarget - parameter constraints (i.e. restriction search space to where strategy = ZSTD_fast)
|
* paramTarget - parameter constraints (i.e. restriction search space to where strategy = ZSTD_fast)
|
||||||
* 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 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];
|
||||||
@@ -2202,7 +2205,7 @@ static int optimizeForSize(const char* const * const fileNamesTable, const size_
|
|||||||
/* strategy selection */
|
/* strategy selection */
|
||||||
const int maxSeeds = g_noSeed ? 1 : ZSTD_maxCLevel();
|
const int maxSeeds = g_noSeed ? 1 : ZSTD_maxCLevel();
|
||||||
DEBUGOUTPUT("Strategy Selection\n");
|
DEBUGOUTPUT("Strategy Selection\n");
|
||||||
if(paramTarget.strategy == 0) { /* no variable based constraints */
|
if(paramTarget.strategy == 0) {
|
||||||
BMK_result_t candidate;
|
BMK_result_t candidate;
|
||||||
int i;
|
int i;
|
||||||
for (i=1; i<=maxSeeds; i++) {
|
for (i=1; i<=maxSeeds; i++) {
|
||||||
@@ -2216,6 +2219,11 @@ static int optimizeForSize(const char* const * const fileNamesTable, const size_
|
|||||||
winner.result = candidate;
|
winner.result = candidate;
|
||||||
winner.params = CParams;
|
winner.params = CParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* if the current params are too slow, just stop. */
|
||||||
|
if(target.cSpeed != 0 && target.cSpeed > winner.result.cSpeed / 2) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2248,7 +2256,7 @@ static int optimizeForSize(const char* const * const fileNamesTable, const size_
|
|||||||
}
|
}
|
||||||
|
|
||||||
st = nextStrategy(st, bestStrategy);
|
st = nextStrategy(st, bestStrategy);
|
||||||
tries--;
|
tries -= TRY_DECAY;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
winner = optimizeFixedStrategy(buf, ctx, target, paramTarget, paramTarget.strategy,
|
winner = optimizeFixedStrategy(buf, ctx, target, paramTarget, paramTarget.strategy,
|
||||||
|
Reference in New Issue
Block a user