From: Yann Collet Date: Fri, 7 Feb 2025 23:58:42 +0000 (-0800) Subject: dynamically adjust hratelog and ldmml based on strategy X-Git-Tag: v1.5.7^2~4^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4609a40b89b94cc61cc6a6a833725d6f89bf9de6;p=thirdparty%2Fzstd.git dynamically adjust hratelog and ldmml based on strategy --- diff --git a/lib/compress/zstd_ldm.c b/lib/compress/zstd_ldm.c index 42b38c0d0..6f866ea16 100644 --- a/lib/compress/zstd_ldm.c +++ b/lib/compress/zstd_ldm.c @@ -139,15 +139,19 @@ void ZSTD_ldm_adjustParameters(ldmParams_t* params, ZSTD_STATIC_ASSERT(LDM_BUCKET_SIZE_LOG <= ZSTD_LDM_BUCKETSIZELOG_MAX); DEBUGLOG(4, "ZSTD_ldm_adjustParameters"); 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) { - 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); } - if (params->hashRateLog == 0) { - params->hashRateLog = params->windowLog < params->hashLog - ? 0 - : params->windowLog - params->hashLog; + if (params->minMatchLength == 0) { + params->minMatchLength = (params->hashRateLog < 6) ? + LDM_MIN_MATCH_LENGTH : + LDM_MIN_MATCH_LENGTH * 2; } params->bucketSizeLog = MIN(params->bucketSizeLog, params->hashLog); }