From a2af804129594f86d6327d1514cf8d22e0232cfd Mon Sep 17 00:00:00 2001 From: "W. Felix Handte" Date: Tue, 15 Sep 2020 13:38:05 -0400 Subject: [PATCH 1/7] Pull CParam Override Logic into Helper --- lib/compress/zstd_compress.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/compress/zstd_compress.c b/lib/compress/zstd_compress.c index eedd9b67f..3e2ecdc45 100644 --- a/lib/compress/zstd_compress.c +++ b/lib/compress/zstd_compress.c @@ -1098,6 +1098,19 @@ ZSTD_adjustCParams(ZSTD_compressionParameters cPar, static ZSTD_compressionParameters ZSTD_getCParams_internal(int compressionLevel, unsigned long long srcSizeHint, size_t dictSize); static ZSTD_parameters ZSTD_getParams_internal(int compressionLevel, unsigned long long srcSizeHint, size_t dictSize); +static void ZSTD_overrideCParams( + ZSTD_compressionParameters* cParams, + const ZSTD_compressionParameters* overrides) +{ + if (overrides->windowLog) cParams->windowLog = overrides->windowLog; + if (overrides->hashLog) cParams->hashLog = overrides->hashLog; + if (overrides->chainLog) cParams->chainLog = overrides->chainLog; + if (overrides->searchLog) cParams->searchLog = overrides->searchLog; + if (overrides->minMatch) cParams->minMatch = overrides->minMatch; + if (overrides->targetLength) cParams->targetLength = overrides->targetLength; + if (overrides->strategy) cParams->strategy = overrides->strategy; +} + ZSTD_compressionParameters ZSTD_getCParamsFromCCtxParams( const ZSTD_CCtx_params* CCtxParams, U64 srcSizeHint, size_t dictSize) { @@ -1107,13 +1120,7 @@ ZSTD_compressionParameters ZSTD_getCParamsFromCCtxParams( } cParams = ZSTD_getCParams_internal(CCtxParams->compressionLevel, srcSizeHint, dictSize); if (CCtxParams->ldmParams.enableLdm) cParams.windowLog = ZSTD_LDM_DEFAULT_WINDOW_LOG; - if (CCtxParams->cParams.windowLog) cParams.windowLog = CCtxParams->cParams.windowLog; - if (CCtxParams->cParams.hashLog) cParams.hashLog = CCtxParams->cParams.hashLog; - if (CCtxParams->cParams.chainLog) cParams.chainLog = CCtxParams->cParams.chainLog; - if (CCtxParams->cParams.searchLog) cParams.searchLog = CCtxParams->cParams.searchLog; - if (CCtxParams->cParams.minMatch) cParams.minMatch = CCtxParams->cParams.minMatch; - if (CCtxParams->cParams.targetLength) cParams.targetLength = CCtxParams->cParams.targetLength; - if (CCtxParams->cParams.strategy) cParams.strategy = CCtxParams->cParams.strategy; + ZSTD_overrideCParams(&cParams, &CCtxParams->cParams); assert(!ZSTD_checkCParams(cParams)); /* srcSizeHint == 0 means 0 */ return ZSTD_adjustCParams_internal(cParams, srcSizeHint, dictSize); From 26a96a5b35deaa64c79bcf1bc39f00dee16ddfb4 Mon Sep 17 00:00:00 2001 From: "W. Felix Handte" Date: Tue, 15 Sep 2020 13:57:43 -0400 Subject: [PATCH 2/7] Do More Complete CParams Deduction in Non-DDSS Path of ZSTD_createCDict_advanced2 Call ZSTD_getCParamsFromCCtxParams() instead of ZSTD_getCParams_internal(). --- lib/compress/zstd_compress.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/compress/zstd_compress.c b/lib/compress/zstd_compress.c index 3e2ecdc45..08d09aa49 100644 --- a/lib/compress/zstd_compress.c +++ b/lib/compress/zstd_compress.c @@ -3540,8 +3540,8 @@ ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced2(const void* dict, size_t dict ZSTD_dedicatedDictSearch_isSupported( cctxParams->compressionLevel, ZSTD_CONTENTSIZE_UNKNOWN, dictSize); if (!dedicatedDictSearch) { - ZSTD_compressionParameters cParams = ZSTD_getCParams_internal( - cctxParams->compressionLevel, ZSTD_CONTENTSIZE_UNKNOWN, dictSize); + ZSTD_compressionParameters cParams = ZSTD_getCParamsFromCCtxParams( + cctxParams, ZSTD_CONTENTSIZE_UNKNOWN, dictSize); return ZSTD_createCDict_advanced(dict, dictSize, dictLoadMethod, dictContentType, cParams, customMem); From bc6521a6f64b4270eb5ac1e59b91685600ec5040 Mon Sep 17 00:00:00 2001 From: "W. Felix Handte" Date: Tue, 15 Sep 2020 14:06:10 -0400 Subject: [PATCH 3/7] Make ZSTD_createCDict_advanced2() cctxParams Arg Const --- lib/compress/zstd_compress.c | 11 ++++++----- lib/zstd.h | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/compress/zstd_compress.c b/lib/compress/zstd_compress.c index 08d09aa49..732f39d31 100644 --- a/lib/compress/zstd_compress.c +++ b/lib/compress/zstd_compress.c @@ -3530,11 +3530,12 @@ ZSTD_CDict* ZSTD_createCDict_advanced(const void* dictBuffer, size_t dictSize, } -ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced2(const void* dict, size_t dictSize, - ZSTD_dictLoadMethod_e dictLoadMethod, - ZSTD_dictContentType_e dictContentType, - ZSTD_CCtx_params* cctxParams, - ZSTD_customMem customMem) +ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced2( + const void* dict, size_t dictSize, + ZSTD_dictLoadMethod_e dictLoadMethod, + ZSTD_dictContentType_e dictContentType, + const ZSTD_CCtx_params* cctxParams, + ZSTD_customMem customMem) { int const dedicatedDictSearch = cctxParams->enableDedicatedDictSearch && ZSTD_dedicatedDictSearch_isSupported( diff --git a/lib/zstd.h b/lib/zstd.h index f8d5e84da..78c85dee4 100644 --- a/lib/zstd.h +++ b/lib/zstd.h @@ -1411,7 +1411,7 @@ ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced2( const void* dict, size_t dictSize, ZSTD_dictLoadMethod_e dictLoadMethod, ZSTD_dictContentType_e dictContentType, - ZSTD_CCtx_params* cctxParams, + const ZSTD_CCtx_params* cctxParams, ZSTD_customMem customMem); ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict_advanced(const void* dict, size_t dictSize, From eee51a664a4170165b3f6acf0d6cc1bc4a7d1d9d Mon Sep 17 00:00:00 2001 From: "W. Felix Handte" Date: Tue, 15 Sep 2020 14:06:58 -0400 Subject: [PATCH 4/7] Fall Back if Derived CParams are Incompatible with DDSS; Refactor CDict Creation Rewrite ZSTD_createCDict_advanced() as a wrapper around ZSTD_createCDict_advanced2(). Evaluate whether to use DDSS mode *after* fully resolving cparams. If not, fall back. --- lib/compress/zstd_compress.c | 101 +++++++++++++++++------------------ 1 file changed, 49 insertions(+), 52 deletions(-) diff --git a/lib/compress/zstd_compress.c b/lib/compress/zstd_compress.c index 732f39d31..427298ab7 100644 --- a/lib/compress/zstd_compress.c +++ b/lib/compress/zstd_compress.c @@ -869,9 +869,7 @@ static ZSTD_compressionParameters ZSTD_dedicatedDictSearch_getCParams( unsigned long long srcSizeHint, size_t const dictSize); static int ZSTD_dedicatedDictSearch_isSupported( - int const compressionLevel, - unsigned long long srcSizeHint, - size_t const dictSize); + const ZSTD_compressionParameters* cParams); static void ZSTD_dedicatedDictSearch_revertCParams( ZSTD_compressionParameters* cParams); @@ -3505,64 +3503,63 @@ static ZSTD_CDict* ZSTD_createCDict_advanced_internal(size_t dictSize, ZSTD_CDict* ZSTD_createCDict_advanced(const void* dictBuffer, size_t dictSize, ZSTD_dictLoadMethod_e dictLoadMethod, ZSTD_dictContentType_e dictContentType, - ZSTD_compressionParameters cParams, ZSTD_customMem customMem) + ZSTD_compressionParameters cParams, + ZSTD_customMem customMem) { - DEBUGLOG(3, "ZSTD_createCDict_advanced, mode %u", (unsigned)dictContentType); - if (!customMem.customAlloc ^ !customMem.customFree) return NULL; - - { ZSTD_CDict* cdict = ZSTD_createCDict_advanced_internal(dictSize, - dictLoadMethod, cParams, - customMem); - - ZSTD_CCtx_params params; - ZSTD_memset(¶ms, 0, sizeof(params)); - - if (ZSTD_isError( ZSTD_initCDict_internal(cdict, - dictBuffer, dictSize, - dictLoadMethod, dictContentType, - cParams, params) )) { - ZSTD_freeCDict(cdict); - return NULL; - } - - return cdict; - } - + ZSTD_CCtx_params cctxParams; + memset(&cctxParams, 0, sizeof(cctxParams)); + ZSTD_CCtxParams_init(&cctxParams, 0); + cctxParams.cParams = cParams; + cctxParams.customMem = customMem; + return ZSTD_createCDict_advanced2( + dictBuffer, dictSize, + dictLoadMethod, dictContentType, + &cctxParams, customMem); } ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced2( const void* dict, size_t dictSize, ZSTD_dictLoadMethod_e dictLoadMethod, ZSTD_dictContentType_e dictContentType, - const ZSTD_CCtx_params* cctxParams, + const ZSTD_CCtx_params* originalCctxParams, ZSTD_customMem customMem) { - int const dedicatedDictSearch = cctxParams->enableDedicatedDictSearch && - ZSTD_dedicatedDictSearch_isSupported( - cctxParams->compressionLevel, ZSTD_CONTENTSIZE_UNKNOWN, dictSize); - if (!dedicatedDictSearch) { - ZSTD_compressionParameters cParams = ZSTD_getCParamsFromCCtxParams( - cctxParams, ZSTD_CONTENTSIZE_UNKNOWN, dictSize); - return ZSTD_createCDict_advanced(dict, dictSize, - dictLoadMethod, dictContentType, cParams, - customMem); - } - { ZSTD_compressionParameters const cParams = ZSTD_dedicatedDictSearch_getCParams( - cctxParams->compressionLevel, ZSTD_CONTENTSIZE_UNKNOWN, dictSize); - ZSTD_CDict* cdict = ZSTD_createCDict_advanced_internal(dictSize, - dictLoadMethod, cParams, - customMem); + ZSTD_CCtx_params cctxParams = *originalCctxParams; + ZSTD_compressionParameters cParams; + ZSTD_CDict* cdict; - if (ZSTD_isError( ZSTD_initCDict_internal(cdict, - dict, dictSize, - dictLoadMethod, dictContentType, - cParams, *cctxParams) )) { - ZSTD_freeCDict(cdict); - return NULL; - } + DEBUGLOG(3, "ZSTD_createCDict_advanced2, mode %u", (unsigned)dictContentType); + if (!customMem.customAlloc ^ !customMem.customFree) return NULL; - return cdict; + if (cctxParams.enableDedicatedDictSearch) { + cParams = ZSTD_dedicatedDictSearch_getCParams( + cctxParams.compressionLevel, ZSTD_CONTENTSIZE_UNKNOWN, dictSize); + ZSTD_overrideCParams(&cParams, &cctxParams.cParams); + } else { + cParams = ZSTD_getCParamsFromCCtxParams( + &cctxParams, ZSTD_CONTENTSIZE_UNKNOWN, dictSize); } + + if (!ZSTD_dedicatedDictSearch_isSupported(&cParams)) { + /* Fall back to non-DDSS params */ + cctxParams.enableDedicatedDictSearch = 0; + cParams = ZSTD_getCParamsFromCCtxParams( + &cctxParams, ZSTD_CONTENTSIZE_UNKNOWN, dictSize); + } + + cdict = ZSTD_createCDict_advanced_internal(dictSize, + dictLoadMethod, cParams, + customMem); + + if (ZSTD_isError( ZSTD_initCDict_internal(cdict, + dict, dictSize, + dictLoadMethod, dictContentType, + cParams, cctxParams) )) { + ZSTD_freeCDict(cdict); + return NULL; + } + + return cdict; } ZSTD_CDict* ZSTD_createCDict(const void* dict, size_t dictSize, int compressionLevel) @@ -4368,10 +4365,10 @@ static ZSTD_compressionParameters ZSTD_dedicatedDictSearch_getCParams(int const return cParams; } -static int ZSTD_dedicatedDictSearch_isSupported(int const compressionLevel, unsigned long long srcSizeHint, size_t const dictSize) +static int ZSTD_dedicatedDictSearch_isSupported( + ZSTD_compressionParameters const* cParams) { - ZSTD_compressionParameters const cParams = ZSTD_dedicatedDictSearch_getCParams(compressionLevel, srcSizeHint, dictSize); - return (cParams.strategy >= ZSTD_greedy) && (cParams.strategy <= ZSTD_lazy2); + return (cParams->strategy >= ZSTD_greedy) && (cParams->strategy <= ZSTD_lazy2); } /** From e8a44326faa695bfe25bf1ef10abfda678a94ae2 Mon Sep 17 00:00:00 2001 From: "W. Felix Handte" Date: Thu, 17 Sep 2020 12:08:36 -0400 Subject: [PATCH 5/7] Avoid Redundancy in ZSTD_initCDict_internal() Args; Don't Take CParams + CCtxParams --- lib/compress/zstd_compress.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/compress/zstd_compress.c b/lib/compress/zstd_compress.c index 427298ab7..7f47dc79e 100644 --- a/lib/compress/zstd_compress.c +++ b/lib/compress/zstd_compress.c @@ -3416,12 +3416,11 @@ static size_t ZSTD_initCDict_internal( const void* dictBuffer, size_t dictSize, ZSTD_dictLoadMethod_e dictLoadMethod, ZSTD_dictContentType_e dictContentType, - ZSTD_compressionParameters cParams, ZSTD_CCtx_params params) { DEBUGLOG(3, "ZSTD_initCDict_internal (dictContentType:%u)", (unsigned)dictContentType); - assert(!ZSTD_checkCParams(cParams)); - cdict->matchState.cParams = cParams; + assert(!ZSTD_checkCParams(params.cParams)); + cdict->matchState.cParams = params.cParams; cdict->matchState.dedicatedDictSearch = params.enableDedicatedDictSearch; if (cdict->matchState.dedicatedDictSearch && dictSize > ZSTD_CHUNKSIZE_MAX) { cdict->matchState.dedicatedDictSearch = 0; @@ -3444,7 +3443,7 @@ static size_t ZSTD_initCDict_internal( FORWARD_IF_ERROR(ZSTD_reset_matchState( &cdict->matchState, &cdict->workspace, - &cParams, + ¶ms.cParams, ZSTDcrp_makeClean, ZSTDirp_reset, ZSTD_resetTarget_CDict), ""); @@ -3453,7 +3452,6 @@ static size_t ZSTD_initCDict_internal( */ { params.compressionLevel = ZSTD_CLEVEL_DEFAULT; params.fParams.contentSizeFlag = 1; - params.cParams = cParams; { size_t const dictID = ZSTD_compress_insertDictionary( &cdict->cBlockState, &cdict->matchState, NULL, &cdict->workspace, ¶ms, cdict->dictContent, cdict->dictContentSize, @@ -3547,14 +3545,16 @@ ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced2( &cctxParams, ZSTD_CONTENTSIZE_UNKNOWN, dictSize); } + cctxParams.cParams = cParams; + cdict = ZSTD_createCDict_advanced_internal(dictSize, - dictLoadMethod, cParams, + dictLoadMethod, cctxParams.cParams, customMem); if (ZSTD_isError( ZSTD_initCDict_internal(cdict, dict, dictSize, dictLoadMethod, dictContentType, - cParams, cctxParams) )) { + cctxParams) )) { ZSTD_freeCDict(cdict); return NULL; } @@ -3638,11 +3638,12 @@ const ZSTD_CDict* ZSTD_initStaticCDict( if (workspaceSize < neededSize) return NULL; ZSTD_memset(¶ms, 0, sizeof(params)); + params.cParams = cParams; if (ZSTD_isError( ZSTD_initCDict_internal(cdict, dict, dictSize, dictLoadMethod, dictContentType, - cParams, params) )) + params) )) return NULL; return cdict; From 8930c6e551c90738bc8df0b4ae212d2078289329 Mon Sep 17 00:00:00 2001 From: "W. Felix Handte" Date: Thu, 17 Sep 2020 12:15:33 -0400 Subject: [PATCH 6/7] Use ZSTD_CCtxParams_init() to Init CCtxParams, not memset() Even if the discrepancies are at the moment benign, it's probably better to standardize on using the one true initializer, rather than trying (and failing) to correctly duplicate its behavior. --- lib/compress/zstd_compress.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/compress/zstd_compress.c b/lib/compress/zstd_compress.c index 7f47dc79e..102d015c9 100644 --- a/lib/compress/zstd_compress.c +++ b/lib/compress/zstd_compress.c @@ -192,11 +192,10 @@ static ZSTD_CCtx_params ZSTD_makeCCtxParamsFromCParams( ZSTD_compressionParameters cParams) { ZSTD_CCtx_params cctxParams; - ZSTD_memset(&cctxParams, 0, sizeof(cctxParams)); + /* should not matter, as all cParams are presumed properly defined */ + ZSTD_CCtxParams_init(&cctxParams, ZSTD_CLEVEL_DEFAULT); cctxParams.cParams = cParams; - cctxParams.compressionLevel = ZSTD_CLEVEL_DEFAULT; /* should not matter, as all cParams are presumed properly defined */ assert(!ZSTD_checkCParams(cParams)); - cctxParams.fParams.contentSizeFlag = 1; return cctxParams; } @@ -208,9 +207,8 @@ static ZSTD_CCtx_params* ZSTD_createCCtxParams_advanced( params = (ZSTD_CCtx_params*)ZSTD_customCalloc( sizeof(ZSTD_CCtx_params), customMem); if (!params) { return NULL; } + ZSTD_CCtxParams_init(params, ZSTD_CLEVEL_DEFAULT); params->customMem = customMem; - params->compressionLevel = ZSTD_CLEVEL_DEFAULT; - params->fParams.contentSizeFlag = 1; return params; } @@ -3637,7 +3635,7 @@ const ZSTD_CDict* ZSTD_initStaticCDict( (unsigned)workspaceSize, (unsigned)neededSize, (unsigned)(workspaceSize < neededSize)); if (workspaceSize < neededSize) return NULL; - ZSTD_memset(¶ms, 0, sizeof(params)); + ZSTD_CCtxParams_init(¶ms, 0); params.cParams = cParams; if (ZSTD_isError( ZSTD_initCDict_internal(cdict, From f23a32178120b275ac349133b2338f920836b2bd Mon Sep 17 00:00:00 2001 From: "W. Felix Handte" Date: Thu, 17 Sep 2020 12:23:05 -0400 Subject: [PATCH 7/7] Update Regression Test Results --- tests/regression/results.csv | 88 ++++++++++++++++++------------------ 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/tests/regression/results.csv b/tests/regression/results.csv index 39de0728d..60d43b6ad 100644 --- a/tests/regression/results.csv +++ b/tests/regression/results.csv @@ -23,10 +23,10 @@ silesia, level 0, compress silesia, level 1, compress cctx, 5313204 silesia, level 3, compress cctx, 4849552 silesia, level 4, compress cctx, 4786970 -silesia, level 5, compress cctx, 4710237 -silesia, level 6, compress cctx, 4660057 -silesia, level 7, compress cctx, 4596295 -silesia, level 9, compress cctx, 4543924 +silesia, level 5, compress cctx, 4710236 +silesia, level 6, compress cctx, 4660056 +silesia, level 7, compress cctx, 4596296 +silesia, level 9, compress cctx, 4543925 silesia, level 13, compress cctx, 4482135 silesia, level 16, compress cctx, 4377465 silesia, level 19, compress cctx, 4293330 @@ -36,7 +36,7 @@ silesia, multithreaded long distance mode, compress silesia, small window log, compress cctx, 7084179 silesia, small hash log, compress cctx, 6555021 silesia, small chain log, compress cctx, 4931148 -silesia, explicit params, compress cctx, 4794666 +silesia, explicit params, compress cctx, 4794677 silesia, uncompressed literals, compress cctx, 4849552 silesia, uncompressed literals optimal, compress cctx, 4293330 silesia, huffman literals, compress cctx, 6178460 @@ -87,10 +87,10 @@ silesia, level 0, zstdcli, silesia, level 1, zstdcli, 5314210 silesia, level 3, zstdcli, 4849600 silesia, level 4, zstdcli, 4787018 -silesia, level 5, zstdcli, 4710285 -silesia, level 6, zstdcli, 4660105 -silesia, level 7, zstdcli, 4596343 -silesia, level 9, zstdcli, 4543972 +silesia, level 5, zstdcli, 4710284 +silesia, level 6, zstdcli, 4660104 +silesia, level 7, zstdcli, 4596344 +silesia, level 9, zstdcli, 4543973 silesia, level 13, zstdcli, 4482183 silesia, level 16, zstdcli, 4377513 silesia, level 19, zstdcli, 4293378 @@ -100,7 +100,7 @@ silesia, multithreaded long distance mode, zstdcli, silesia, small window log, zstdcli, 7111012 silesia, small hash log, zstdcli, 6555069 silesia, small chain log, zstdcli, 4931196 -silesia, explicit params, zstdcli, 4797100 +silesia, explicit params, zstdcli, 4797112 silesia, uncompressed literals, zstdcli, 5128030 silesia, uncompressed literals optimal, zstdcli, 4325520 silesia, huffman literals, zstdcli, 5331216 @@ -126,7 +126,7 @@ silesia.tar, multithreaded long distance mode, zstdcli, silesia.tar, small window log, zstdcli, 7101576 silesia.tar, small hash log, zstdcli, 6587959 silesia.tar, small chain log, zstdcli, 4943310 -silesia.tar, explicit params, zstdcli, 4822354 +silesia.tar, explicit params, zstdcli, 4822362 silesia.tar, uncompressed literals, zstdcli, 5129559 silesia.tar, uncompressed literals optimal, zstdcli, 4320931 silesia.tar, huffman literals, zstdcli, 5347610 @@ -146,7 +146,7 @@ github, level 3 with dict, zstdcli, github, level 4, zstdcli, 138199 github, level 4 with dict, zstdcli, 43251 github, level 5, zstdcli, 137121 -github, level 5 with dict, zstdcli, 40938 +github, level 5 with dict, zstdcli, 40741 github, level 6, zstdcli, 137122 github, level 6 with dict, zstdcli, 40632 github, level 7, zstdcli, 137122 @@ -177,10 +177,10 @@ silesia, level 0, advanced silesia, level 1, advanced one pass, 5313204 silesia, level 3, advanced one pass, 4849552 silesia, level 4, advanced one pass, 4786970 -silesia, level 5, advanced one pass, 4710237 -silesia, level 6, advanced one pass, 4660057 -silesia, level 7, advanced one pass, 4596295 -silesia, level 9, advanced one pass, 4543924 +silesia, level 5, advanced one pass, 4710236 +silesia, level 6, advanced one pass, 4660056 +silesia, level 7, advanced one pass, 4596296 +silesia, level 9, advanced one pass, 4543925 silesia, level 13, advanced one pass, 4482135 silesia, level 16, advanced one pass, 4377465 silesia, level 19, advanced one pass, 4293330 @@ -191,7 +191,7 @@ silesia, multithreaded long distance mode, advanced silesia, small window log, advanced one pass, 7095919 silesia, small hash log, advanced one pass, 6555021 silesia, small chain log, advanced one pass, 4931148 -silesia, explicit params, advanced one pass, 4797086 +silesia, explicit params, advanced one pass, 4797095 silesia, uncompressed literals, advanced one pass, 5127982 silesia, uncompressed literals optimal, advanced one pass, 4325472 silesia, huffman literals, advanced one pass, 5326268 @@ -217,7 +217,7 @@ silesia.tar, multithreaded long distance mode, advanced silesia.tar, small window log, advanced one pass, 7101530 silesia.tar, small hash log, advanced one pass, 6587951 silesia.tar, small chain log, advanced one pass, 4943307 -silesia.tar, explicit params, advanced one pass, 4808581 +silesia.tar, explicit params, advanced one pass, 4808589 silesia.tar, uncompressed literals, advanced one pass, 5129458 silesia.tar, uncompressed literals optimal, advanced one pass, 4320927 silesia.tar, huffman literals, advanced one pass, 5347335 @@ -269,10 +269,10 @@ silesia, level 0, advanced silesia, level 1, advanced one pass small out, 5313204 silesia, level 3, advanced one pass small out, 4849552 silesia, level 4, advanced one pass small out, 4786970 -silesia, level 5, advanced one pass small out, 4710237 -silesia, level 6, advanced one pass small out, 4660057 -silesia, level 7, advanced one pass small out, 4596295 -silesia, level 9, advanced one pass small out, 4543924 +silesia, level 5, advanced one pass small out, 4710236 +silesia, level 6, advanced one pass small out, 4660056 +silesia, level 7, advanced one pass small out, 4596296 +silesia, level 9, advanced one pass small out, 4543925 silesia, level 13, advanced one pass small out, 4482135 silesia, level 16, advanced one pass small out, 4377465 silesia, level 19, advanced one pass small out, 4293330 @@ -283,7 +283,7 @@ silesia, multithreaded long distance mode, advanced silesia, small window log, advanced one pass small out, 7095919 silesia, small hash log, advanced one pass small out, 6555021 silesia, small chain log, advanced one pass small out, 4931148 -silesia, explicit params, advanced one pass small out, 4797086 +silesia, explicit params, advanced one pass small out, 4797095 silesia, uncompressed literals, advanced one pass small out, 5127982 silesia, uncompressed literals optimal, advanced one pass small out, 4325472 silesia, huffman literals, advanced one pass small out, 5326268 @@ -309,7 +309,7 @@ silesia.tar, multithreaded long distance mode, advanced silesia.tar, small window log, advanced one pass small out, 7101530 silesia.tar, small hash log, advanced one pass small out, 6587951 silesia.tar, small chain log, advanced one pass small out, 4943307 -silesia.tar, explicit params, advanced one pass small out, 4808581 +silesia.tar, explicit params, advanced one pass small out, 4808589 silesia.tar, uncompressed literals, advanced one pass small out, 5129458 silesia.tar, uncompressed literals optimal, advanced one pass small out, 4320927 silesia.tar, huffman literals, advanced one pass small out, 5347335 @@ -361,10 +361,10 @@ silesia, level 0, advanced silesia, level 1, advanced streaming, 5314162 silesia, level 3, advanced streaming, 4849552 silesia, level 4, advanced streaming, 4786970 -silesia, level 5, advanced streaming, 4710237 -silesia, level 6, advanced streaming, 4660057 -silesia, level 7, advanced streaming, 4596295 -silesia, level 9, advanced streaming, 4543924 +silesia, level 5, advanced streaming, 4710236 +silesia, level 6, advanced streaming, 4660056 +silesia, level 7, advanced streaming, 4596296 +silesia, level 9, advanced streaming, 4543925 silesia, level 13, advanced streaming, 4482135 silesia, level 16, advanced streaming, 4377465 silesia, level 19, advanced streaming, 4293330 @@ -375,7 +375,7 @@ silesia, multithreaded long distance mode, advanced silesia, small window log, advanced streaming, 7112062 silesia, small hash log, advanced streaming, 6555021 silesia, small chain log, advanced streaming, 4931148 -silesia, explicit params, advanced streaming, 4797100 +silesia, explicit params, advanced streaming, 4797112 silesia, uncompressed literals, advanced streaming, 5127982 silesia, uncompressed literals optimal, advanced streaming, 4325472 silesia, huffman literals, advanced streaming, 5331168 @@ -401,7 +401,7 @@ silesia.tar, multithreaded long distance mode, advanced silesia.tar, small window log, advanced streaming, 7118769 silesia.tar, small hash log, advanced streaming, 6587952 silesia.tar, small chain log, advanced streaming, 4943312 -silesia.tar, explicit params, advanced streaming, 4808608 +silesia.tar, explicit params, advanced streaming, 4808618 silesia.tar, uncompressed literals, advanced streaming, 5129461 silesia.tar, uncompressed literals optimal, advanced streaming, 4320858 silesia.tar, huffman literals, advanced streaming, 5352360 @@ -453,10 +453,10 @@ silesia, level 0, old stre silesia, level 1, old streaming, 5314162 silesia, level 3, old streaming, 4849552 silesia, level 4, old streaming, 4786970 -silesia, level 5, old streaming, 4710237 -silesia, level 6, old streaming, 4660057 -silesia, level 7, old streaming, 4596295 -silesia, level 9, old streaming, 4543924 +silesia, level 5, old streaming, 4710236 +silesia, level 6, old streaming, 4660056 +silesia, level 7, old streaming, 4596296 +silesia, level 9, old streaming, 4543925 silesia, level 13, old streaming, 4482135 silesia, level 16, old streaming, 4377465 silesia, level 19, old streaming, 4293330 @@ -521,10 +521,10 @@ silesia, level 0, old stre silesia, level 1, old streaming advanced, 5314162 silesia, level 3, old streaming advanced, 4849552 silesia, level 4, old streaming advanced, 4786970 -silesia, level 5, old streaming advanced, 4710237 -silesia, level 6, old streaming advanced, 4660057 -silesia, level 7, old streaming advanced, 4596295 -silesia, level 9, old streaming advanced, 4543924 +silesia, level 5, old streaming advanced, 4710236 +silesia, level 6, old streaming advanced, 4660056 +silesia, level 7, old streaming advanced, 4596296 +silesia, level 9, old streaming advanced, 4543925 silesia, level 13, old streaming advanced, 4482135 silesia, level 16, old streaming advanced, 4377465 silesia, level 19, old streaming advanced, 4293330 @@ -535,7 +535,7 @@ silesia, multithreaded long distance mode, old stre silesia, small window log, old streaming advanced, 7112062 silesia, small hash log, old streaming advanced, 6555021 silesia, small chain log, old streaming advanced, 4931148 -silesia, explicit params, old streaming advanced, 4797100 +silesia, explicit params, old streaming advanced, 4797112 silesia, uncompressed literals, old streaming advanced, 4849552 silesia, uncompressed literals optimal, old streaming advanced, 4293330 silesia, huffman literals, old streaming advanced, 6183403 @@ -561,7 +561,7 @@ silesia.tar, multithreaded long distance mode, old stre silesia.tar, small window log, old streaming advanced, 7118772 silesia.tar, small hash log, old streaming advanced, 6587952 silesia.tar, small chain log, old streaming advanced, 4943312 -silesia.tar, explicit params, old streaming advanced, 4808608 +silesia.tar, explicit params, old streaming advanced, 4808618 silesia.tar, uncompressed literals, old streaming advanced, 4861427 silesia.tar, uncompressed literals optimal, old streaming advanced, 4281562 silesia.tar, huffman literals, old streaming advanced, 6190795 @@ -627,10 +627,10 @@ github, level 0 with dict, old stre github, level 1 with dict, old streaming advanced cdict, 42430 github, level 3 with dict, old streaming advanced cdict, 41113 github, level 4 with dict, old streaming advanced cdict, 41084 -github, level 5 with dict, old streaming advanced cdict, 39158 -github, level 6 with dict, old streaming advanced cdict, 38748 -github, level 7 with dict, old streaming advanced cdict, 38744 -github, level 9 with dict, old streaming advanced cdict, 38992 +github, level 5 with dict, old streaming advanced cdict, 39159 +github, level 6 with dict, old streaming advanced cdict, 38749 +github, level 7 with dict, old streaming advanced cdict, 38746 +github, level 9 with dict, old streaming advanced cdict, 38993 github, level 13 with dict, old streaming advanced cdict, 39731 github, level 16 with dict, old streaming advanced cdict, 40789 github, level 19 with dict, old streaming advanced cdict, 37576