]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
small blocks params
authorYann Collet <yann.collet.73@gmail.com>
Mon, 9 Nov 2015 15:38:17 +0000 (16:38 +0100)
committerYann Collet <yann.collet.73@gmail.com>
Mon, 9 Nov 2015 15:38:17 +0000 (16:38 +0100)
Makefile
NEWS
lib/zstd.h
lib/zstd_internal.h
lib/zstdhc.c
lib/zstdhc_static.h
programs/Makefile
programs/fuzzer.c
programs/paramgrill.c
programs/zstdcli.c

index 2003da90cf247f64d3704c3328f4cf147e9bdaf6..cea6cb60cc88b4613fc1aa7a49843ae1da0f2654 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -32,7 +32,7 @@
 # ################################################################
 
 # Version number
-export VERSION := 0.3.5
+export VERSION := 0.3.6
 
 PRGDIR  = programs
 ZSTDDIR = lib
diff --git a/NEWS b/NEWS
index a5e18c12dcbafa077a5144ed360fbed4975e250f..0b635d8037a95857f60b546d0e4f7a48d9b7bb81 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,6 @@
+v0.3.6
+small blocks params
+
 v0.3.5
 minor generic compression improvements
 
index b13400ecd4193b68a6f2b60720b44ef0dbd1dc7c..8143788537506a89e5e5d5729b24effaf33f49fa 100644 (file)
@@ -48,7 +48,7 @@ extern "C" {
 ***************************************/
 #define ZSTD_VERSION_MAJOR    0    /* for breaking interface changes  */
 #define ZSTD_VERSION_MINOR    3    /* for new (non-breaking) interface capabilities */
-#define ZSTD_VERSION_RELEASE  5    /* for tweaks, bug-fixes, or development */
+#define ZSTD_VERSION_RELEASE  6    /* for tweaks, bug-fixes, or development */
 #define ZSTD_VERSION_NUMBER  (ZSTD_VERSION_MAJOR *100*100 + ZSTD_VERSION_MINOR *100 + ZSTD_VERSION_RELEASE)
 unsigned ZSTD_versionNumber (void);
 
index dffa1fe684a469ca7e91ce607b7b8912c6d149e1..d606e23dc04035a9cfb7b059dfa2cf1a2f03acaa 100644 (file)
@@ -226,6 +226,14 @@ static const U32 g_searchStrength = 8;
 */
 MEM_STATIC void ZSTD_storeSeq(seqStore_t* seqStorePtr, size_t litLength, const BYTE* literals, size_t offsetCode, size_t matchCode)
 {
+#if 0
+    static const BYTE* g_start = NULL;
+    if (g_start==NULL) g_start = literals;
+    if (literals - g_start == 8695)
+    printf("pos %6u : %3u literals & match %3u bytes at distance %6u \n",
+           (U32)(literals - g_start), (U32)litLength, (U32)matchCode+4, (U32)offsetCode);
+#endif
+
     /* copy Literals */
     ZSTD_wildcopy(seqStorePtr->lit, literals, litLength);
     seqStorePtr->lit += litLength;
index cfc098ac539c4582d857ad0d99b4d4c4bdbf07b8..866db183712e066cfdd7bad1cd57a36bf1a52085 100644 (file)
@@ -954,9 +954,10 @@ size_t ZSTD_HC_compressBegin_advanced(ZSTD_HC_CCtx* ctx,
 
 size_t ZSTD_HC_compressBegin(ZSTD_HC_CCtx* ctx, void* dst, size_t maxDstSize, int compressionLevel)
 {
+    int tableID = 1;
     if (compressionLevel<=0) compressionLevel = 1;
     if (compressionLevel > ZSTD_HC_MAX_CLEVEL) compressionLevel = ZSTD_HC_MAX_CLEVEL;
-    return ZSTD_HC_compressBegin_advanced(ctx, dst, maxDstSize, ZSTD_HC_defaultParameters[compressionLevel]);
+    return ZSTD_HC_compressBegin_advanced(ctx, dst, maxDstSize, ZSTD_HC_defaultParameters[tableID][compressionLevel]);
 }
 
 
@@ -1016,9 +1017,10 @@ size_t ZSTD_HC_compress_advanced (ZSTD_HC_CCtx* ctx,
 
 size_t ZSTD_HC_compressCCtx (ZSTD_HC_CCtx* ctx, void* dst, size_t maxDstSize, const void* src, size_t srcSize, int compressionLevel)
 {
+    const int tableID = (srcSize > 128 KB);
     if (compressionLevel<=1) return ZSTD_compress(dst, maxDstSize, src, srcSize);   /* fast mode */
     if (compressionLevel > ZSTD_HC_MAX_CLEVEL) compressionLevel = ZSTD_HC_MAX_CLEVEL;
-    return ZSTD_HC_compress_advanced(ctx, dst, maxDstSize, src, srcSize, ZSTD_HC_defaultParameters[compressionLevel]);
+    return ZSTD_HC_compress_advanced(ctx, dst, maxDstSize, src, srcSize, ZSTD_HC_defaultParameters[tableID][compressionLevel]);
 }
 
 size_t ZSTD_HC_compress(void* dst, size_t maxDstSize, const void* src, size_t srcSize, int compressionLevel)
index f96d4055eff7680783d60fe8d72180c0d4fce3e1..534f2a01188f0e18210657a33c7914011f12a4db 100644 (file)
@@ -99,7 +99,32 @@ size_t ZSTD_HC_compressEnd(ZSTD_HC_CCtx* ctx, void* dst, size_t maxDstSize);
 *  Pre-defined compression levels
 ***************************************/
 #define ZSTD_HC_MAX_CLEVEL 20
-static const ZSTD_HC_parameters ZSTD_HC_defaultParameters[ZSTD_HC_MAX_CLEVEL+1] = {
+static const ZSTD_HC_parameters ZSTD_HC_defaultParameters[2][ZSTD_HC_MAX_CLEVEL+1] = {
+{   /* for <= 128 KB */
+    /* W,  C,  H,  S,  L, strat */
+    { 17, 12, 12,  1,  4, ZSTD_HC_fast    },  /* level  0 - never used */
+    { 17, 12, 13,  1,  6, ZSTD_HC_fast    },  /* level  1 */
+    { 17, 15, 16,  1,  5, ZSTD_HC_fast    },  /* level  2 */
+    { 17, 16, 17,  1,  5, ZSTD_HC_fast    },  /* level  3 */
+    { 17, 13, 15,  2,  4, ZSTD_HC_greedy  },  /* level  4 */
+    { 17, 15, 17,  3,  4, ZSTD_HC_greedy  },  /* level  5 */
+    { 17, 14, 17,  3,  4, ZSTD_HC_lazy    },  /* level  6 */
+    { 17, 16, 17,  4,  4, ZSTD_HC_lazy    },  /* level  7 */
+    { 17, 16, 17,  4,  4, ZSTD_HC_lazy2   },  /* level  8 */
+    { 17, 17, 16,  5,  4, ZSTD_HC_lazy2   },  /* level  9 */
+    { 17, 17, 16,  6,  4, ZSTD_HC_lazy2   },  /* level 10 */
+    { 17, 17, 16,  7,  4, ZSTD_HC_lazy2   },  /* level 11 */
+    { 17, 17, 16,  8,  4, ZSTD_HC_lazy2   },  /* level 12 */
+    { 17, 17, 16,  9,  4, ZSTD_HC_lazy2   },  /* level 13 */
+    { 17, 18, 16,  5,  4, ZSTD_HC_btlazy2 },  /* level 14 */
+    { 17, 18, 16,  6,  4, ZSTD_HC_btlazy2 },  /* level 15 */
+    { 17, 18, 16,  7,  4, ZSTD_HC_btlazy2 },  /* level 16 */
+    { 17, 18, 16,  8,  4, ZSTD_HC_btlazy2 },  /* level 17 */
+    { 17, 18, 16,  9,  4, ZSTD_HC_btlazy2 },  /* level 18 */
+    { 17, 18, 16, 10,  4, ZSTD_HC_btlazy2 },  /* level 19 */
+    { 17, 18, 18, 12,  4, ZSTD_HC_btlazy2 },   /* level 20 */
+},
+{   /* for > 128 KB */
     /* W,  C,  H,  S,  L, strat */
     { 18, 12, 12,  1,  4, ZSTD_HC_fast    },  /* level  0 - never used */
     { 18, 14, 14,  1,  7, ZSTD_HC_fast    },  /* level  1 - in fact redirected towards zstd fast */
@@ -122,6 +147,7 @@ static const ZSTD_HC_parameters ZSTD_HC_defaultParameters[ZSTD_HC_MAX_CLEVEL+1]
     { 25, 24, 23,  5,  5, ZSTD_HC_btlazy2 },  /* level 18 */
     { 25, 26, 23,  5,  5, ZSTD_HC_btlazy2 },  /* level 19 */
     { 26, 27, 24,  6,  5, ZSTD_HC_btlazy2 },  /* level 20 */
+}
 };
 
 
index ea51bbf7fe3d27e48c7864ea328c46fe75071174..472222c4b025e6b6b356a2ecc7aa85a6e2371907 100644 (file)
@@ -30,7 +30,7 @@
 # fullbench32: Same as fullbench, but forced to compile in 32-bits mode
 # ##########################################################################
 
-VERSION?= 0.3.5
+VERSION?= 0.3.6
 
 DESTDIR?=
 PREFIX ?= /usr/local
index ba402e71a34157ddb29218048fa0eb24b9ef5ab0..7458bba8d9e5d967918bedfe68c407456e20f46c 100644 (file)
@@ -355,7 +355,7 @@ int fuzzerTests(U32 seed, U32 nbTests, unsigned startTest, double compressibilit
         dSize = ZSTD_decompress(dstBuffer, sampleSize + dSupSize, cBuffer, cSize);
         CHECK(dSize != sampleSize, "ZSTD_decompress failed (%s) (srcSize : %u ; cSize : %u)", ZSTD_getErrorName(dSize), (U32)sampleSize, (U32)cSize);
         crcDest = XXH64(dstBuffer, sampleSize, 0);
-        CHECK(crcOrig != crcDest, "dstBuffer corrupted (pos %u / %u)", (U32)findDiff(srcBuffer+sampleStart, dstBuffer, sampleSize), (U32)sampleSize);
+        CHECK(crcOrig != crcDest, "decompression result corrupted (pos %u / %u)", (U32)findDiff(srcBuffer+sampleStart, dstBuffer, sampleSize), (U32)sampleSize);
 
         /* truncated src decompression test */
         {
index eb265e22df6e917bc88eae4e2b2c6ab04529204d..90cfdd775e4bbc60162130e7b9dbd3b3bfda98bb 100644 (file)
@@ -122,7 +122,7 @@ static U32 g_rand = 1;
 static U32 g_singleRun = 0;
 static U32 g_target = 0;
 static U32 g_noSeed = 0;
-static const ZSTD_HC_parameters* g_seedParams = ZSTD_HC_defaultParameters;
+static const ZSTD_HC_parameters* g_seedParams = ZSTD_HC_defaultParameters[0];
 static ZSTD_HC_parameters g_params = { 0, 0, 0, 0, 0, ZSTD_HC_greedy };
 
 void BMK_SetNbIterations(int nbLoops)
@@ -703,12 +703,13 @@ static void BMK_benchMem(void* srcBuffer, size_t srcSize)
     int i;
     const char* rfName = "grillResults.txt";
     FILE* f;
-    const U32 srcLog = BMK_highbit((U32)( (g_blockSize ? g_blockSize : srcSize) -1))+1;
+    const size_t blockSize = g_blockSize ? g_blockSize : srcSize;
+    const U32 srcLog = BMK_highbit((U32)(blockSize-1))+1;
 
     if (g_singleRun)
     {
         BMK_result_t testResult;
-        ZSTD_HC_validateParams(&g_params, g_blockSize ? g_blockSize : srcSize);
+        ZSTD_HC_validateParams(&g_params, blockSize);
         BMK_benchParam(&testResult, srcBuffer, srcSize, ctx, g_params);
         DISPLAY("\n");
         return;
@@ -725,12 +726,13 @@ static void BMK_benchMem(void* srcBuffer, size_t srcSize)
     {
         /* baseline config for level 1 */
         BMK_result_t testResult;
-        params.windowLog = MIN(srcLog, 18);
+        params.windowLog = 18;
         params.hashLog = 14;
         params.contentLog = 1;
         params.searchLog = 1;
         params.searchLength = 7;
         params.strategy = ZSTD_HC_fast;
+        ZSTD_HC_validateParams(&params, blockSize);
         BMK_benchParam(&testResult, srcBuffer, srcSize, ctx, params);
         g_cSpeedTarget[1] = (testResult.cSpeed * 15) >> 4;
     }
@@ -741,7 +743,9 @@ static void BMK_benchMem(void* srcBuffer, size_t srcSize)
 
     /* populate initial solution */
     {
+        const int tableID = (blockSize > 128 KB);
         const int maxSeeds = g_noSeed ? 1 : ZSTD_HC_MAX_CLEVEL;
+        g_seedParams = ZSTD_HC_defaultParameters[tableID];
         for (i=1; i<=maxSeeds; i++)
         {
             const U32 btPlus = (params.strategy == ZSTD_HC_btlazy2);
index c9946c4deea6578c74d7069a713341f888a0f62e..65b235500fb9ddf4e2cdf6f892633073a09584c5 100644 (file)
@@ -70,7 +70,7 @@
 **************************************/
 #define COMPRESSOR_NAME "zstd command line interface"
 #ifndef ZSTD_VERSION
-#  define ZSTD_VERSION "v0.3.5"
+#  define ZSTD_VERSION "v0.3.6"
 #endif
 #define AUTHOR "Yann Collet"
 #define WELCOME_MESSAGE "*** %s %i-bits %s, by %s (%s) ***\n", COMPRESSOR_NAME, (int)(sizeof(void*)*8), ZSTD_VERSION, AUTHOR, __DATE__