Merge pull request #1525 from terrelln/enable-huf-flag

Fix optimal parser prices with uncompressed literals
dev
Nick Terrell 2019-02-15 20:21:08 -05:00 committed by GitHub
commit 54e9412ddd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 111 additions and 23 deletions

View File

@ -402,7 +402,6 @@ static int ZSTD_isUpdateAuthorized(ZSTD_cParameter param)
case ZSTD_c_minMatch:
case ZSTD_c_targetLength:
case ZSTD_c_strategy:
case ZSTD_c_literalCompressionMode:
return 1;
case ZSTD_c_format:
@ -421,6 +420,7 @@ static int ZSTD_isUpdateAuthorized(ZSTD_cParameter param)
case ZSTD_c_ldmBucketSizeLog:
case ZSTD_c_ldmHashRateLog:
case ZSTD_c_forceAttachDict:
case ZSTD_c_literalCompressionMode:
default:
return 0;
}
@ -2677,7 +2677,10 @@ static size_t ZSTD_compressBlock_internal(ZSTD_CCtx* zc,
goto out; /* don't even attempt compression below a certain srcSize */
}
ZSTD_resetSeqStore(&(zc->seqStore));
ms->opt.symbolCosts = &zc->blockState.prevCBlock->entropy; /* required for optimal parser to read stats from dictionary */
/* required for optimal parser to read stats from dictionary */
ms->opt.symbolCosts = &zc->blockState.prevCBlock->entropy;
/* tell the optimal parser how we expect to compress literals */
ms->opt.literalCompressionMode = zc->appliedParams.literalCompressionMode;
/* a gap between an attached dict and the current window is not safe,
* they must remain adjacent,

View File

@ -107,6 +107,7 @@ typedef struct {
U32 offCodeSumBasePrice; /* to compare to log2(offreq) */
ZSTD_OptPrice_e priceType; /* prices can be determined dynamically, or follow a pre-defined cost structure */
const ZSTD_entropyCTables_t* symbolCosts; /* pre-calculated dictionary statistics */
ZSTD_literalCompressionMode_e literalCompressionMode;
} optState_t;
typedef struct {

View File

@ -64,9 +64,15 @@ MEM_STATIC double ZSTD_fCost(U32 price)
}
#endif
static int ZSTD_compressedLiterals(optState_t const* const optPtr)
{
return optPtr->literalCompressionMode != ZSTD_lcm_uncompressed;
}
static void ZSTD_setBasePrices(optState_t* optPtr, int optLevel)
{
optPtr->litSumBasePrice = WEIGHT(optPtr->litSum, optLevel);
if (ZSTD_compressedLiterals(optPtr))
optPtr->litSumBasePrice = WEIGHT(optPtr->litSum, optLevel);
optPtr->litLengthSumBasePrice = WEIGHT(optPtr->litLengthSum, optLevel);
optPtr->matchLengthSumBasePrice = WEIGHT(optPtr->matchLengthSum, optLevel);
optPtr->offCodeSumBasePrice = WEIGHT(optPtr->offCodeSum, optLevel);
@ -99,6 +105,7 @@ ZSTD_rescaleFreqs(optState_t* const optPtr,
const BYTE* const src, size_t const srcSize,
int const optLevel)
{
int const compressedLiterals = ZSTD_compressedLiterals(optPtr);
DEBUGLOG(5, "ZSTD_rescaleFreqs (srcSize=%u)", (unsigned)srcSize);
optPtr->priceType = zop_dynamic;
@ -113,9 +120,10 @@ ZSTD_rescaleFreqs(optState_t* const optPtr,
/* huffman table presumed generated by dictionary */
optPtr->priceType = zop_dynamic;
assert(optPtr->litFreq != NULL);
optPtr->litSum = 0;
{ unsigned lit;
if (compressedLiterals) {
unsigned lit;
assert(optPtr->litFreq != NULL);
optPtr->litSum = 0;
for (lit=0; lit<=MaxLit; lit++) {
U32 const scaleLog = 11; /* scale to 2K */
U32 const bitCost = HUF_getNbBits(optPtr->symbolCosts->huf.CTable, lit);
@ -163,10 +171,11 @@ ZSTD_rescaleFreqs(optState_t* const optPtr,
} else { /* not a dictionary */
assert(optPtr->litFreq != NULL);
{ unsigned lit = MaxLit;
if (compressedLiterals) {
unsigned lit = MaxLit;
HIST_count_simple(optPtr->litFreq, &lit, src, srcSize); /* use raw first block to init statistics */
optPtr->litSum = ZSTD_downscaleStat(optPtr->litFreq, MaxLit, 1);
}
optPtr->litSum = ZSTD_downscaleStat(optPtr->litFreq, MaxLit, 1);
{ unsigned ll;
for (ll=0; ll<=MaxLL; ll++)
@ -190,7 +199,8 @@ ZSTD_rescaleFreqs(optState_t* const optPtr,
} else { /* new block : re-use previous statistics, scaled down */
optPtr->litSum = ZSTD_downscaleStat(optPtr->litFreq, MaxLit, 1);
if (compressedLiterals)
optPtr->litSum = ZSTD_downscaleStat(optPtr->litFreq, MaxLit, 1);
optPtr->litLengthSum = ZSTD_downscaleStat(optPtr->litLengthFreq, MaxLL, 0);
optPtr->matchLengthSum = ZSTD_downscaleStat(optPtr->matchLengthFreq, MaxML, 0);
optPtr->offCodeSum = ZSTD_downscaleStat(optPtr->offCodeFreq, MaxOff, 0);
@ -207,6 +217,10 @@ static U32 ZSTD_rawLiteralsCost(const BYTE* const literals, U32 const litLength,
int optLevel)
{
if (litLength == 0) return 0;
if (!ZSTD_compressedLiterals(optPtr))
return (litLength << 3) * BITCOST_MULTIPLIER; /* Uncompressed - 8 bytes per literal. */
if (optPtr->priceType == zop_predef)
return (litLength*6) * BITCOST_MULTIPLIER; /* 6 bit per literal - no statistic used */
@ -310,7 +324,8 @@ static void ZSTD_updateStats(optState_t* const optPtr,
U32 offsetCode, U32 matchLength)
{
/* literals */
{ U32 u;
if (ZSTD_compressedLiterals(optPtr)) {
U32 u;
for (u=0; u < litLength; u++)
optPtr->litFreq[literals[u]] += ZSTD_LITFREQ_ADD;
optPtr->litSum += litLength*ZSTD_LITFREQ_ADD;
@ -1108,7 +1123,8 @@ static U32 ZSTD_upscaleStat(unsigned* table, U32 lastEltIndex, int bonus)
/* used in 2-pass strategy */
MEM_STATIC void ZSTD_upscaleStats(optState_t* optPtr)
{
optPtr->litSum = ZSTD_upscaleStat(optPtr->litFreq, MaxLit, 0);
if (ZSTD_compressedLiterals(optPtr))
optPtr->litSum = ZSTD_upscaleStat(optPtr->litFreq, MaxLit, 0);
optPtr->litLengthSum = ZSTD_upscaleStat(optPtr->litLengthFreq, MaxLL, 0);
optPtr->matchLengthSum = ZSTD_upscaleStat(optPtr->matchLengthFreq, MaxML, 0);
optPtr->offCodeSum = ZSTD_upscaleStat(optPtr->offCodeFreq, MaxOff, 0);

View File

@ -135,7 +135,8 @@ BMK_advancedParams_t BMK_initAdvancedParams(void) {
0, /* ldmMinMatch */
0, /* ldmHashLog */
0, /* ldmBuckSizeLog */
0 /* ldmHashRateLog */
0, /* ldmHashRateLog */
ZSTD_lcm_auto /* literalCompressionMode */
};
return res;
}
@ -174,6 +175,7 @@ static void BMK_initCCtx(ZSTD_CCtx* ctx,
CHECK_Z(ZSTD_CCtx_setParameter(ctx, ZSTD_c_ldmHashLog, adv->ldmHashLog));
CHECK_Z(ZSTD_CCtx_setParameter(ctx, ZSTD_c_ldmBucketSizeLog, adv->ldmBucketSizeLog));
CHECK_Z(ZSTD_CCtx_setParameter(ctx, ZSTD_c_ldmHashRateLog, adv->ldmHashRateLog));
CHECK_Z(ZSTD_CCtx_setParameter(ctx, ZSTD_c_literalCompressionMode, (int)adv->literalCompressionMode));
CHECK_Z(ZSTD_CCtx_setParameter(ctx, ZSTD_c_windowLog, comprParams->windowLog));
CHECK_Z(ZSTD_CCtx_setParameter(ctx, ZSTD_c_hashLog, comprParams->hashLog));
CHECK_Z(ZSTD_CCtx_setParameter(ctx, ZSTD_c_chainLog, comprParams->chainLog));

View File

@ -116,6 +116,7 @@ typedef struct {
unsigned ldmHashLog;
unsigned ldmBucketSizeLog;
unsigned ldmHashRateLog;
ZSTD_literalCompressionMode_e literalCompressionMode;
} BMK_advancedParams_t;
/* returns default parameters used by nonAdvanced functions */

View File

@ -296,6 +296,7 @@ struct FIO_prefs_s {
int ldmMinMatch;
int ldmBucketSizeLog;
int ldmHashRateLog;
ZSTD_literalCompressionMode_e literalCompressionMode;
/* IO preferences */
U32 removeSrcFile;
@ -339,6 +340,7 @@ FIO_prefs_t* FIO_createPreferences(void)
ret->ldmMinMatch = 0;
ret->ldmBucketSizeLog = FIO_LDM_PARAM_NOTSET;
ret->ldmHashRateLog = FIO_LDM_PARAM_NOTSET;
ret->literalCompressionMode = ZSTD_lcm_auto;
return ret;
}
@ -406,6 +408,12 @@ void FIO_setRsyncable(FIO_prefs_t* const prefs, int rsyncable) {
prefs->rsyncable = rsyncable;
}
void FIO_setLiteralCompressionMode(
FIO_prefs_t* const prefs,
ZSTD_literalCompressionMode_e mode) {
prefs->literalCompressionMode = mode;
}
void FIO_setAdaptMin(FIO_prefs_t* const prefs, int minCLevel)
{
#ifndef ZSTD_NOCOMPRESS
@ -674,6 +682,7 @@ static cRess_t FIO_createCResources(FIO_prefs_t* const prefs,
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_c_minMatch, (int)comprParams.minMatch) );
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_c_targetLength, (int)comprParams.targetLength) );
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_c_strategy, comprParams.strategy) );
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_c_literalCompressionMode, (int)prefs->literalCompressionMode) );
/* multi-threading */
#ifdef ZSTD_MULTITHREAD
DISPLAYLEVEL(5,"set nb workers = %u \n", prefs->nbWorkers);

View File

@ -71,6 +71,9 @@ void FIO_setOverlapLog(FIO_prefs_t* const prefs, int overlapLog);
void FIO_setRemoveSrcFile(FIO_prefs_t* const prefs, unsigned flag);
void FIO_setSparseWrite(FIO_prefs_t* const prefs, unsigned sparse); /**< 0: no sparse; 1: disable on stdout; 2: always enabled */
void FIO_setRsyncable(FIO_prefs_t* const prefs, int rsyncable);
void FIO_setLiteralCompressionMode(
FIO_prefs_t* const prefs,
ZSTD_literalCompressionMode_e mode);
void FIO_setNoProgress(unsigned noProgress);
void FIO_setNotificationLevel(int level);

View File

@ -148,6 +148,7 @@ static int usage_advanced(const char* programName)
#endif
DISPLAY( "--no-dictID : don't write dictID into header (dictionary compression)\n");
DISPLAY( "--[no-]check : integrity check (default: enabled) \n");
DISPLAY( "--[no-]compress-literals : force (un)compressed literals \n");
#endif
#ifdef UTIL_HAS_CREATEFILELIST
DISPLAY( " -r : operate recursively on directories \n");
@ -483,7 +484,7 @@ static int init_cLevel(void) {
if ((*ptr>='0') && (*ptr<='9')) {
unsigned absLevel;
if (readU32FromCharChecked(&ptr, &absLevel)) {
if (readU32FromCharChecked(&ptr, &absLevel)) {
DISPLAYLEVEL(2, "Ignore environment variable setting %s=%s: numeric value too large\n", ENV_CLEVEL, env);
return ZSTDCLI_CLEVEL_DEFAULT;
} else if (*ptr == 0) {
@ -567,6 +568,7 @@ int main(int argCount, const char* argv[])
#ifndef ZSTD_NOBENCH
BMK_advancedParams_t benchParams = BMK_initAdvancedParams();
#endif
ZSTD_literalCompressionMode_e literalCompressionMode = ZSTD_lcm_auto;
/* init */
@ -659,6 +661,8 @@ int main(int argCount, const char* argv[])
if (!strcmp(argument, "--format=lz4")) { suffix = LZ4_EXTENSION; FIO_setCompressionType(prefs, FIO_lz4Compression); continue; }
#endif
if (!strcmp(argument, "--rsyncable")) { rsyncable = 1; continue; }
if (!strcmp(argument, "--compress-literals")) { literalCompressionMode = ZSTD_lcm_huffman; continue; }
if (!strcmp(argument, "--no-compress-literals")) { literalCompressionMode = ZSTD_lcm_uncompressed; continue; }
if (!strcmp(argument, "--no-progress")) { FIO_setNoProgress(1); continue; }
/* long commands with arguments */
@ -995,6 +999,7 @@ int main(int argCount, const char* argv[])
if (g_ldmHashRateLog != LDM_PARAM_DEFAULT) {
benchParams.ldmHashRateLog = g_ldmHashRateLog;
}
benchParams.literalCompressionMode = literalCompressionMode;
if (cLevel > ZSTD_maxCLevel()) cLevel = ZSTD_maxCLevel();
if (cLevelLast > ZSTD_maxCLevel()) cLevelLast = ZSTD_maxCLevel();
@ -1108,6 +1113,7 @@ int main(int argCount, const char* argv[])
FIO_setAdaptMin(prefs, adaptMin);
FIO_setAdaptMax(prefs, adaptMax);
FIO_setRsyncable(prefs, rsyncable);
FIO_setLiteralCompressionMode(prefs, literalCompressionMode);
if (adaptMin > cLevel) cLevel = adaptMin;
if (adaptMax < cLevel) cLevel = adaptMax;
@ -1116,7 +1122,7 @@ int main(int argCount, const char* argv[])
else
operationResult = FIO_compressMultipleFilenames(prefs, filenameTable, filenameIdx, outFileName, suffix, dictFileName, cLevel, compressionParams);
#else
(void)suffix; (void)adapt; (void)rsyncable; (void)ultra; (void)cLevel; (void)ldmFlag; /* not used when ZSTD_NOCOMPRESS set */
(void)suffix; (void)adapt; (void)rsyncable; (void)ultra; (void)cLevel; (void)ldmFlag; (void)literalCompressionMode; /* not used when ZSTD_NOCOMPRESS set */
DISPLAY("Compression not supported \n");
#endif
} else { /* decompression or test */

View File

@ -200,6 +200,15 @@ $ZSTD tmp -fo tmp && die "zstd compression overwrote the input file"
$ZSTD tmp.zst -dfo tmp.zst && die "zstd decompression overwrote the input file"
$ECHO "test: detect that input file does not exist"
$ZSTD nothere && die "zstd hasn't detected that input file does not exist"
$ECHO "test: --[no-]compress-literals"
$ZSTD tmp -c --no-compress-literals -1 | $ZSTD -t
$ZSTD tmp -c --no-compress-literals --fast=1 | $ZSTD -t
$ZSTD tmp -c --no-compress-literals -19 | $ZSTD -t
$ZSTD tmp -c --compress-literals -1 | $ZSTD -t
$ZSTD tmp -c --compress-literals --fast=1 | $ZSTD -t
$ZSTD tmp -c --compress-literals -19 | $ZSTD -t
$ZSTD -b --fast=1 -i1e1 tmp --compress-literals
$ZSTD -b --fast=1 -i1e1 tmp --no-compress-literals
$ECHO "test : file removal"
$ZSTD -f --rm tmp

View File

@ -129,9 +129,21 @@ static param_value_t const uncompressed_literals_param_values[] = {
static config_t uncompressed_literals = {
.name = "uncompressed literals",
.cli_args = "-3 --no-compress-literals",
.param_values = PARAM_VALUES(uncompressed_literals_param_values),
};
static param_value_t const uncompressed_literals_opt_param_values[] = {
{.param = ZSTD_c_compressionLevel, .value = 19},
{.param = ZSTD_c_literalCompressionMode, .value = ZSTD_lcm_uncompressed},
};
static config_t uncompressed_literals_opt = {
.name = "uncompressed literals optimal",
.cli_args = "-19 --no-compress-literals",
.param_values = PARAM_VALUES(uncompressed_literals_opt_param_values),
};
static param_value_t const huffman_literals_param_values[] = {
{.param = ZSTD_c_compressionLevel, .value = -1},
{.param = ZSTD_c_literalCompressionMode, .value = ZSTD_lcm_huffman},
@ -139,6 +151,7 @@ static param_value_t const huffman_literals_param_values[] = {
static config_t huffman_literals = {
.name = "huffman literals",
.cli_args = "--fast=1 --compress-literals",
.param_values = PARAM_VALUES(huffman_literals_param_values),
};
@ -176,6 +189,7 @@ static config_t const* g_configs[] = {
&small_clog,
&explicit_params,
&uncompressed_literals,
&uncompressed_literals_opt,
&huffman_literals,
NULL,
};

View File

@ -175,8 +175,8 @@ static result_t compress_cctx_compress(
state->compressed.capacity,
input.data,
input.size,
state->dictionary.data,
state->dictionary.size,
config->use_dictionary ? state->dictionary.data : NULL,
config->use_dictionary ? state->dictionary.size : 0,
params);
else if (config->use_dictionary)
state->compressed.size = ZSTD_compress_usingDict(

View File

@ -14,6 +14,7 @@ silesia.tar, level 13, compress sim
silesia.tar, level 16, compress simple, 4381277
silesia.tar, level 19, compress simple, 4281514
silesia.tar, uncompressed literals, compress simple, 4875008
silesia.tar, uncompressed literals optimal, compress simple, 4281514
silesia.tar, huffman literals, compress simple, 6195462
silesia, level -5, compress cctx, 7152294
silesia, level -3, compress cctx, 6789969
@ -37,6 +38,7 @@ silesia, small hash log, compress cct
silesia, small chain log, compress cctx, 4931093
silesia, explicit params, compress cctx, 4813352
silesia, uncompressed literals, compress cctx, 4862377
silesia, uncompressed literals optimal, compress cctx, 4293262
silesia, huffman literals, compress cctx, 6191548
github, level -5, compress cctx, 232744
github, level -5 with dict, compress cctx, 47294
@ -66,14 +68,15 @@ github, level 16, compress cct
github, level 16 with dict, compress cctx, 37568
github, level 19, compress cctx, 133717
github, level 19 with dict, compress cctx, 37567
github, long distance mode, compress cctx, decompression error
github, multithreaded, compress cctx, decompression error
github, multithreaded long distance mode, compress cctx, decompression error
github, small window log, compress cctx, decompression error
github, small hash log, compress cctx, decompression error
github, small chain log, compress cctx, decompression error
github, explicit params, compress cctx, decompression error
github, long distance mode, compress cctx, 141473
github, multithreaded, compress cctx, 141473
github, multithreaded long distance mode, compress cctx, 141473
github, small window log, compress cctx, 141473
github, small hash log, compress cctx, 138943
github, small chain log, compress cctx, 139239
github, explicit params, compress cctx, 140924
github, uncompressed literals, compress cctx, 136397
github, uncompressed literals optimal, compress cctx, 133717
github, huffman literals, compress cctx, 176575
silesia, level -5, zstdcli, 7152342
silesia, level -3, zstdcli, 6790021
@ -96,6 +99,9 @@ silesia, small window log, zstdcli,
silesia, small hash log, zstdcli, 6554946
silesia, small chain log, zstdcli, 4931141
silesia, explicit params, zstdcli, 4815380
silesia, uncompressed literals, zstdcli, 5155472
silesia, uncompressed literals optimal, zstdcli, 4325475
silesia, huffman literals, zstdcli, 5341405
silesia.tar, level -5, zstdcli, 7161160
silesia.tar, level -3, zstdcli, 6789865
silesia.tar, level -1, zstdcli, 6196433
@ -118,6 +124,9 @@ silesia.tar, small window log, zstdcli,
silesia.tar, small hash log, zstdcli, 6587841
silesia.tar, small chain log, zstdcli, 4943259
silesia.tar, explicit params, zstdcli, 4839202
silesia.tar, uncompressed literals, zstdcli, 5158134
silesia.tar, uncompressed literals optimal, zstdcli, 4321098
silesia.tar, huffman literals, zstdcli, 5358479
github, level -5, zstdcli, 234744
github, level -5 with dict, zstdcli, 48718
github, level -3, zstdcli, 222611
@ -153,6 +162,9 @@ github, small window log, zstdcli,
github, small hash log, zstdcli, 137467
github, small chain log, zstdcli, 138314
github, explicit params, zstdcli, 136140
github, uncompressed literals, zstdcli, 169004
github, uncompressed literals optimal, zstdcli, 158824
github, huffman literals, zstdcli, 145457
silesia, level -5, advanced one pass, 7152294
silesia, level -3, advanced one pass, 6789969
silesia, level -1, advanced one pass, 6191548
@ -176,6 +188,7 @@ silesia, small hash log, advanced one
silesia, small chain log, advanced one pass, 4931093
silesia, explicit params, advanced one pass, 4815369
silesia, uncompressed literals, advanced one pass, 5155424
silesia, uncompressed literals optimal, advanced one pass, 4325427
silesia, huffman literals, advanced one pass, 5341356
silesia.tar, level -5, advanced one pass, 7160438
silesia.tar, level -3, advanced one pass, 6789024
@ -200,6 +213,7 @@ silesia.tar, small hash log, advanced one
silesia.tar, small chain log, advanced one pass, 4943255
silesia.tar, explicit params, advanced one pass, 4829974
silesia.tar, uncompressed literals, advanced one pass, 5157992
silesia.tar, uncompressed literals optimal, advanced one pass, 4321094
silesia.tar, huffman literals, advanced one pass, 5358079
github, level -5, advanced one pass, 232744
github, level -5 with dict, advanced one pass, 46718
@ -238,6 +252,7 @@ github, small hash log, advanced one
github, small chain log, advanced one pass, 136314
github, explicit params, advanced one pass, 137670
github, uncompressed literals, advanced one pass, 167004
github, uncompressed literals optimal, advanced one pass, 156824
github, huffman literals, advanced one pass, 143457
silesia, level -5, advanced one pass small out, 7152294
silesia, level -3, advanced one pass small out, 6789969
@ -262,6 +277,7 @@ silesia, small hash log, advanced one
silesia, small chain log, advanced one pass small out, 4931093
silesia, explicit params, advanced one pass small out, 4815369
silesia, uncompressed literals, advanced one pass small out, 5155424
silesia, uncompressed literals optimal, advanced one pass small out, 4325427
silesia, huffman literals, advanced one pass small out, 5341356
silesia.tar, level -5, advanced one pass small out, 7160438
silesia.tar, level -3, advanced one pass small out, 6789024
@ -286,6 +302,7 @@ silesia.tar, small hash log, advanced one
silesia.tar, small chain log, advanced one pass small out, 4943255
silesia.tar, explicit params, advanced one pass small out, 4829974
silesia.tar, uncompressed literals, advanced one pass small out, 5157992
silesia.tar, uncompressed literals optimal, advanced one pass small out, 4321094
silesia.tar, huffman literals, advanced one pass small out, 5358079
github, level -5, advanced one pass small out, 232744
github, level -5 with dict, advanced one pass small out, 46718
@ -324,6 +341,7 @@ github, small hash log, advanced one
github, small chain log, advanced one pass small out, 136314
github, explicit params, advanced one pass small out, 137670
github, uncompressed literals, advanced one pass small out, 167004
github, uncompressed literals optimal, advanced one pass small out, 156824
github, huffman literals, advanced one pass small out, 143457
silesia, level -5, advanced streaming, 7152294
silesia, level -3, advanced streaming, 6789973
@ -348,6 +366,7 @@ silesia, small hash log, advanced str
silesia, small chain log, advanced streaming, 4931093
silesia, explicit params, advanced streaming, 4815380
silesia, uncompressed literals, advanced streaming, 5155424
silesia, uncompressed literals optimal, advanced streaming, 4325427
silesia, huffman literals, advanced streaming, 5341357
silesia.tar, level -5, advanced streaming, 7160440
silesia.tar, level -3, advanced streaming, 6789026
@ -372,6 +391,7 @@ silesia.tar, small hash log, advanced str
silesia.tar, small chain log, advanced streaming, 4943260
silesia.tar, explicit params, advanced streaming, 4830002
silesia.tar, uncompressed literals, advanced streaming, 5157995
silesia.tar, uncompressed literals optimal, advanced streaming, 4321094
silesia.tar, huffman literals, advanced streaming, 5358083
github, level -5, advanced streaming, 232744
github, level -5 with dict, advanced streaming, 46718
@ -410,6 +430,7 @@ github, small hash log, advanced str
github, small chain log, advanced streaming, 136314
github, explicit params, advanced streaming, 137670
github, uncompressed literals, advanced streaming, 167004
github, uncompressed literals optimal, advanced streaming, 156824
github, huffman literals, advanced streaming, 143457
silesia, level -5, old streaming, 7152294
silesia, level -3, old streaming, 6789973
@ -427,6 +448,7 @@ silesia, level 16, old streamin
silesia, level 19, old streaming, 4293262
silesia, no source size, old streaming, 4862341
silesia, uncompressed literals, old streaming, 4862377
silesia, uncompressed literals optimal, old streaming, 4293262
silesia, huffman literals, old streaming, 6191549
silesia.tar, level -5, old streaming, 7160440
silesia.tar, level -3, old streaming, 6789026
@ -444,6 +466,7 @@ silesia.tar, level 16, old streamin
silesia.tar, level 19, old streaming, 4281514
silesia.tar, no source size, old streaming, 4875006
silesia.tar, uncompressed literals, old streaming, 4875010
silesia.tar, uncompressed literals optimal, old streaming, 4281514
silesia.tar, huffman literals, old streaming, 6195465
github, level -5, old streaming, 232744
github, level -5 with dict, old streaming, 46718
@ -475,4 +498,5 @@ github, level 19, old streamin
github, level 19 with dict, old streaming, 37576
github, no source size, old streaming, 141003
github, uncompressed literals, old streaming, 136397
github, uncompressed literals optimal, old streaming, 133717
github, huffman literals, old streaming, 176575

1 Data Config Method Total compressed size
14 silesia.tar level 16 compress simple 4381277
15 silesia.tar level 19 compress simple 4281514
16 silesia.tar uncompressed literals compress simple 4875008
17 silesia.tar uncompressed literals optimal compress simple 4281514
18 silesia.tar huffman literals compress simple 6195462
19 silesia level -5 compress cctx 7152294
20 silesia level -3 compress cctx 6789969
38 silesia small chain log compress cctx 4931093
39 silesia explicit params compress cctx 4813352
40 silesia uncompressed literals compress cctx 4862377
41 silesia uncompressed literals optimal compress cctx 4293262
42 silesia huffman literals compress cctx 6191548
43 github level -5 compress cctx 232744
44 github level -5 with dict compress cctx 47294
68 github level 16 with dict compress cctx 37568
69 github level 19 compress cctx 133717
70 github level 19 with dict compress cctx 37567
71 github long distance mode compress cctx decompression error 141473
72 github multithreaded compress cctx decompression error 141473
73 github multithreaded long distance mode compress cctx decompression error 141473
74 github small window log compress cctx decompression error 141473
75 github small hash log compress cctx decompression error 138943
76 github small chain log compress cctx decompression error 139239
77 github explicit params compress cctx decompression error 140924
78 github uncompressed literals compress cctx 136397
79 github uncompressed literals optimal compress cctx 133717
80 github huffman literals compress cctx 176575
81 silesia level -5 zstdcli 7152342
82 silesia level -3 zstdcli 6790021
99 silesia small hash log zstdcli 6554946
100 silesia small chain log zstdcli 4931141
101 silesia explicit params zstdcli 4815380
102 silesia uncompressed literals zstdcli 5155472
103 silesia uncompressed literals optimal zstdcli 4325475
104 silesia huffman literals zstdcli 5341405
105 silesia.tar level -5 zstdcli 7161160
106 silesia.tar level -3 zstdcli 6789865
107 silesia.tar level -1 zstdcli 6196433
124 silesia.tar small hash log zstdcli 6587841
125 silesia.tar small chain log zstdcli 4943259
126 silesia.tar explicit params zstdcli 4839202
127 silesia.tar uncompressed literals zstdcli 5158134
128 silesia.tar uncompressed literals optimal zstdcli 4321098
129 silesia.tar huffman literals zstdcli 5358479
130 github level -5 zstdcli 234744
131 github level -5 with dict zstdcli 48718
132 github level -3 zstdcli 222611
162 github small hash log zstdcli 137467
163 github small chain log zstdcli 138314
164 github explicit params zstdcli 136140
165 github uncompressed literals zstdcli 169004
166 github uncompressed literals optimal zstdcli 158824
167 github huffman literals zstdcli 145457
168 silesia level -5 advanced one pass 7152294
169 silesia level -3 advanced one pass 6789969
170 silesia level -1 advanced one pass 6191548
188 silesia small chain log advanced one pass 4931093
189 silesia explicit params advanced one pass 4815369
190 silesia uncompressed literals advanced one pass 5155424
191 silesia uncompressed literals optimal advanced one pass 4325427
192 silesia huffman literals advanced one pass 5341356
193 silesia.tar level -5 advanced one pass 7160438
194 silesia.tar level -3 advanced one pass 6789024
213 silesia.tar small chain log advanced one pass 4943255
214 silesia.tar explicit params advanced one pass 4829974
215 silesia.tar uncompressed literals advanced one pass 5157992
216 silesia.tar uncompressed literals optimal advanced one pass 4321094
217 silesia.tar huffman literals advanced one pass 5358079
218 github level -5 advanced one pass 232744
219 github level -5 with dict advanced one pass 46718
252 github small chain log advanced one pass 136314
253 github explicit params advanced one pass 137670
254 github uncompressed literals advanced one pass 167004
255 github uncompressed literals optimal advanced one pass 156824
256 github huffman literals advanced one pass 143457
257 silesia level -5 advanced one pass small out 7152294
258 silesia level -3 advanced one pass small out 6789969
277 silesia small chain log advanced one pass small out 4931093
278 silesia explicit params advanced one pass small out 4815369
279 silesia uncompressed literals advanced one pass small out 5155424
280 silesia uncompressed literals optimal advanced one pass small out 4325427
281 silesia huffman literals advanced one pass small out 5341356
282 silesia.tar level -5 advanced one pass small out 7160438
283 silesia.tar level -3 advanced one pass small out 6789024
302 silesia.tar small chain log advanced one pass small out 4943255
303 silesia.tar explicit params advanced one pass small out 4829974
304 silesia.tar uncompressed literals advanced one pass small out 5157992
305 silesia.tar uncompressed literals optimal advanced one pass small out 4321094
306 silesia.tar huffman literals advanced one pass small out 5358079
307 github level -5 advanced one pass small out 232744
308 github level -5 with dict advanced one pass small out 46718
341 github small chain log advanced one pass small out 136314
342 github explicit params advanced one pass small out 137670
343 github uncompressed literals advanced one pass small out 167004
344 github uncompressed literals optimal advanced one pass small out 156824
345 github huffman literals advanced one pass small out 143457
346 silesia level -5 advanced streaming 7152294
347 silesia level -3 advanced streaming 6789973
366 silesia small chain log advanced streaming 4931093
367 silesia explicit params advanced streaming 4815380
368 silesia uncompressed literals advanced streaming 5155424
369 silesia uncompressed literals optimal advanced streaming 4325427
370 silesia huffman literals advanced streaming 5341357
371 silesia.tar level -5 advanced streaming 7160440
372 silesia.tar level -3 advanced streaming 6789026
391 silesia.tar small chain log advanced streaming 4943260
392 silesia.tar explicit params advanced streaming 4830002
393 silesia.tar uncompressed literals advanced streaming 5157995
394 silesia.tar uncompressed literals optimal advanced streaming 4321094
395 silesia.tar huffman literals advanced streaming 5358083
396 github level -5 advanced streaming 232744
397 github level -5 with dict advanced streaming 46718
430 github small chain log advanced streaming 136314
431 github explicit params advanced streaming 137670
432 github uncompressed literals advanced streaming 167004
433 github uncompressed literals optimal advanced streaming 156824
434 github huffman literals advanced streaming 143457
435 silesia level -5 old streaming 7152294
436 silesia level -3 old streaming 6789973
448 silesia level 19 old streaming 4293262
449 silesia no source size old streaming 4862341
450 silesia uncompressed literals old streaming 4862377
451 silesia uncompressed literals optimal old streaming 4293262
452 silesia huffman literals old streaming 6191549
453 silesia.tar level -5 old streaming 7160440
454 silesia.tar level -3 old streaming 6789026
466 silesia.tar level 19 old streaming 4281514
467 silesia.tar no source size old streaming 4875006
468 silesia.tar uncompressed literals old streaming 4875010
469 silesia.tar uncompressed literals optimal old streaming 4281514
470 silesia.tar huffman literals old streaming 6195465
471 github level -5 old streaming 232744
472 github level -5 with dict old streaming 46718
498 github level 19 with dict old streaming 37576
499 github no source size old streaming 141003
500 github uncompressed literals old streaming 136397
501 github uncompressed literals optimal old streaming 133717
502 github huffman literals old streaming 176575