Skip to content

Commit 71921e5

Browse files
authored
Merge pull request #2983 from facebook/minLitPricev2
[opt] minor compression ratio improvement
2 parents 330c97d + 5595aec commit 71921e5

File tree

2 files changed

+16
-13
lines changed

2 files changed

+16
-13
lines changed

lib/compress/zstd_opt.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -255,11 +255,14 @@ static U32 ZSTD_rawLiteralsCost(const BYTE* const literals, U32 const litLength,
255255
return (litLength*6) * BITCOST_MULTIPLIER; /* 6 bit per literal - no statistic used */
256256

257257
/* dynamic statistics */
258-
{ U32 price = litLength * optPtr->litSumBasePrice;
258+
{ U32 price = optPtr->litSumBasePrice * litLength;
259+
U32 const litPriceMax = optPtr->litSumBasePrice - BITCOST_MULTIPLIER;
259260
U32 u;
261+
assert(optPtr->litSumBasePrice >= BITCOST_MULTIPLIER);
260262
for (u=0; u < litLength; u++) {
261-
assert(WEIGHT(optPtr->litFreq[literals[u]], optLevel) <= optPtr->litSumBasePrice); /* literal cost should never be negative */
262-
price -= WEIGHT(optPtr->litFreq[literals[u]], optLevel);
263+
U32 litPrice = WEIGHT(optPtr->litFreq[literals[u]], optLevel);
264+
if (UNLIKELY(litPrice > litPriceMax)) litPrice = litPriceMax;
265+
price -= litPrice;
263266
}
264267
return price;
265268
}

tests/regression/results.csv

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ silesia, level 7, compress
4646
silesia, level 9, compress cctx, 4543018
4747
silesia, level 13, compress cctx, 4493990
4848
silesia, level 16, compress cctx, 4359864
49-
silesia, level 19, compress cctx, 4296880
49+
silesia, level 19, compress cctx, 4296686
5050
silesia, long distance mode, compress cctx, 4842075
5151
silesia, multithreaded, compress cctx, 4842075
5252
silesia, multithreaded long distance mode, compress cctx, 4842075
@@ -55,7 +55,7 @@ silesia, small hash log, compress
5555
silesia, small chain log, compress cctx, 4912197
5656
silesia, explicit params, compress cctx, 4794052
5757
silesia, uncompressed literals, compress cctx, 4842075
58-
silesia, uncompressed literals optimal, compress cctx, 4296880
58+
silesia, uncompressed literals optimal, compress cctx, 4296686
5959
silesia, huffman literals, compress cctx, 6172178
6060
silesia, multithreaded with advanced params, compress cctx, 4842075
6161
github, level -5, compress cctx, 204411
@@ -110,7 +110,7 @@ silesia, level 7, zstdcli,
110110
silesia, level 9, zstdcli, 4543066
111111
silesia, level 13, zstdcli, 4494038
112112
silesia, level 16, zstdcli, 4359912
113-
silesia, level 19, zstdcli, 4296928
113+
silesia, level 19, zstdcli, 4296734
114114
silesia, long distance mode, zstdcli, 4833785
115115
silesia, multithreaded, zstdcli, 4842123
116116
silesia, multithreaded long distance mode, zstdcli, 4833785
@@ -249,7 +249,7 @@ silesia, level 12 row 1, advanced
249249
silesia, level 12 row 2, advanced one pass, 4503116
250250
silesia, level 13, advanced one pass, 4493990
251251
silesia, level 16, advanced one pass, 4359864
252-
silesia, level 19, advanced one pass, 4296880
252+
silesia, level 19, advanced one pass, 4296686
253253
silesia, no source size, advanced one pass, 4842075
254254
silesia, long distance mode, advanced one pass, 4833710
255255
silesia, multithreaded, advanced one pass, 4842075
@@ -567,7 +567,7 @@ silesia, level 12 row 1, advanced
567567
silesia, level 12 row 2, advanced one pass small out, 4503116
568568
silesia, level 13, advanced one pass small out, 4493990
569569
silesia, level 16, advanced one pass small out, 4359864
570-
silesia, level 19, advanced one pass small out, 4296880
570+
silesia, level 19, advanced one pass small out, 4296686
571571
silesia, no source size, advanced one pass small out, 4842075
572572
silesia, long distance mode, advanced one pass small out, 4833710
573573
silesia, multithreaded, advanced one pass small out, 4842075
@@ -885,7 +885,7 @@ silesia, level 12 row 1, advanced
885885
silesia, level 12 row 2, advanced streaming, 4503116
886886
silesia, level 13, advanced streaming, 4493990
887887
silesia, level 16, advanced streaming, 4359864
888-
silesia, level 19, advanced streaming, 4296880
888+
silesia, level 19, advanced streaming, 4296686
889889
silesia, no source size, advanced streaming, 4842039
890890
silesia, long distance mode, advanced streaming, 4833710
891891
silesia, multithreaded, advanced streaming, 4842075
@@ -1195,10 +1195,10 @@ silesia, level 7, old stre
11951195
silesia, level 9, old streaming, 4543018
11961196
silesia, level 13, old streaming, 4493990
11971197
silesia, level 16, old streaming, 4359864
1198-
silesia, level 19, old streaming, 4296880
1198+
silesia, level 19, old streaming, 4296686
11991199
silesia, no source size, old streaming, 4842039
12001200
silesia, uncompressed literals, old streaming, 4842075
1201-
silesia, uncompressed literals optimal, old streaming, 4296880
1201+
silesia, uncompressed literals optimal, old streaming, 4296686
12021202
silesia, huffman literals, old streaming, 6179294
12031203
silesia.tar, level -5, old streaming, 7043687
12041204
silesia.tar, level -3, old streaming, 6671317
@@ -1297,7 +1297,7 @@ silesia, level 7, old stre
12971297
silesia, level 9, old streaming advanced, 4543018
12981298
silesia, level 13, old streaming advanced, 4493990
12991299
silesia, level 16, old streaming advanced, 4359864
1300-
silesia, level 19, old streaming advanced, 4296880
1300+
silesia, level 19, old streaming advanced, 4296686
13011301
silesia, no source size, old streaming advanced, 4842039
13021302
silesia, long distance mode, old streaming advanced, 4842075
13031303
silesia, multithreaded, old streaming advanced, 4842075
@@ -1307,7 +1307,7 @@ silesia, small hash log, old stre
13071307
silesia, small chain log, old streaming advanced, 4912197
13081308
silesia, explicit params, old streaming advanced, 4795452
13091309
silesia, uncompressed literals, old streaming advanced, 4842075
1310-
silesia, uncompressed literals optimal, old streaming advanced, 4296880
1310+
silesia, uncompressed literals optimal, old streaming advanced, 4296686
13111311
silesia, huffman literals, old streaming advanced, 6179294
13121312
silesia, multithreaded with advanced params, old streaming advanced, 4842075
13131313
silesia.tar, level -5, old streaming advanced, 7043687

0 commit comments

Comments
 (0)