dynamically adjust hratelog and ldmml based on strategy

This commit is contained in:
Yann Collet
2025-02-10 10:46:37 -08:00
committed by Yann Collet
parent 5b8575adaa
commit 4609a40b89
+10 -6
View File
@@ -139,15 +139,19 @@ void ZSTD_ldm_adjustParameters(ldmParams_t* params,
ZSTD_STATIC_ASSERT(LDM_BUCKET_SIZE_LOG <= ZSTD_LDM_BUCKETSIZELOG_MAX); ZSTD_STATIC_ASSERT(LDM_BUCKET_SIZE_LOG <= ZSTD_LDM_BUCKETSIZELOG_MAX);
DEBUGLOG(4, "ZSTD_ldm_adjustParameters"); DEBUGLOG(4, "ZSTD_ldm_adjustParameters");
if (!params->bucketSizeLog) params->bucketSizeLog = LDM_BUCKET_SIZE_LOG; if (!params->bucketSizeLog) params->bucketSizeLog = LDM_BUCKET_SIZE_LOG;
if (!params->minMatchLength) params->minMatchLength = LDM_MIN_MATCH_LENGTH; if (params->hashRateLog == 0) {
assert(1 <= (int)cParams->strategy && (int)cParams->strategy <= 9);
/* mapping: strat1 -> rate8 ... strat9 -> rate4*/
params->hashRateLog = 9 - ((cParams->strategy+1)/2);
}
if (params->hashLog == 0) { if (params->hashLog == 0) {
params->hashLog = MAX(ZSTD_HASHLOG_MIN, params->windowLog - LDM_HASH_RLOG); params->hashLog = MAX(ZSTD_HASHLOG_MIN, params->windowLog - params->hashRateLog);
assert(params->hashLog <= ZSTD_HASHLOG_MAX); assert(params->hashLog <= ZSTD_HASHLOG_MAX);
} }
if (params->hashRateLog == 0) { if (params->minMatchLength == 0) {
params->hashRateLog = params->windowLog < params->hashLog params->minMatchLength = (params->hashRateLog < 6) ?
? 0 LDM_MIN_MATCH_LENGTH :
: params->windowLog - params->hashLog; LDM_MIN_MATCH_LENGTH * 2;
} }
params->bucketSizeLog = MIN(params->bucketSizeLog, params->hashLog); params->bucketSizeLog = MIN(params->bucketSizeLog, params->hashLog);
} }