From: inikep Date: Wed, 23 Mar 2016 14:53:38 +0000 (+0100) Subject: hashLog3 added to ZSTD_CCtx X-Git-Tag: v0.6.0^2~17^2~17^2~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7adceef9748ddb1e4a6b956dbb35b6fc66ddb8c9;p=thirdparty%2Fzstd.git hashLog3 added to ZSTD_CCtx --- diff --git a/lib/zstd_compress.c b/lib/zstd_compress.c index 28a7a1c3c..2e62ec2c4 100644 --- a/lib/zstd_compress.c +++ b/lib/zstd_compress.c @@ -96,6 +96,7 @@ struct ZSTD_CCtx_s U32 lowLimit; /* below that point, no more data */ U32 nextToUpdate; /* index from which to continue dictionary update */ U32 nextToUpdate3; /* index from which to continue dictionary update */ + U32 hashLog3; /* dispatch table : larger == faster, more memory */ U32 loadedDictEnd; U32 stage; ZSTD_parameters params; @@ -187,7 +188,7 @@ static size_t ZSTD_resetCCtx_advanced (ZSTD_CCtx* zc, const size_t tokenSpace = blockSize + 8*maxNbSeq; const size_t contentSize = (params.strategy == ZSTD_fast) ? 0 : (1 << params.contentLog); const size_t hSize = 1 << params.hashLog; - const size_t h3Size = (params.searchLength==3) ? (1 << HASHLOG3) : 0; + const size_t h3Size = (zc->hashLog3) ? 1 << zc->hashLog3 : 0; const size_t tableSpace = (contentSize + hSize + h3Size) * sizeof(U32); /* Check if workSpace is large enough, alloc a new one if needed */ @@ -252,12 +253,13 @@ size_t ZSTD_copyCCtx(ZSTD_CCtx* dstCCtx, const ZSTD_CCtx* srcCCtx) { if (srcCCtx->stage!=0) return ERROR(stage_wrong); + dstCCtx->hashLog3 = srcCCtx->hashLog3; /* must be before ZSTD_resetCCtx_advanced */ ZSTD_resetCCtx_advanced(dstCCtx, srcCCtx->params); /* copy tables */ { const size_t contentSize = (srcCCtx->params.strategy == ZSTD_fast) ? 0 : (1 << srcCCtx->params.contentLog); const size_t hSize = 1 << srcCCtx->params.hashLog; - const size_t h3Size = (srcCCtx->params.searchLength == 3) ? (1 << HASHLOG3) : 0; + const size_t h3Size = (srcCCtx->hashLog3) ? 1 << srcCCtx->hashLog3 : 0; const size_t tableSpace = (contentSize + hSize + h3Size) * sizeof(U32); memcpy(dstCCtx->workSpace, srcCCtx->workSpace, tableSpace); } @@ -310,7 +312,7 @@ static void ZSTD_reduceIndex (ZSTD_CCtx* zc, const U32 reducerValue) { const U32 contentSize = (zc->params.strategy == ZSTD_fast) ? 0 : (1 << zc->params.contentLog); ZSTD_reduceTable(zc->contentTable, contentSize, reducerValue); } - { const U32 h3Size = (zc->params.searchLength == 3) ? (1 << HASHLOG3) : 0; + { const U32 h3Size = (zc->hashLog3) ? 1 << zc->hashLog3 : 0; ZSTD_reduceTable(zc->hashTable3, h3Size, reducerValue); } } @@ -2185,7 +2187,11 @@ size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* zc, const void* dict, size_t dictSize, ZSTD_parameters params) { +// printf("windowLog=%d hashLog=%d\n", params.windowLog, params.hashLog); ZSTD_validateParams(¶ms); + zc->hashLog3 = (params.searchLength==3) ? ZSTD_HASHLOG3 : 0; +// if (zc->hashLog3 > params.windowLog) zc->hashLog3 = params.windowLog; +// printf("windowLog=%d hashLog=%d hashLog3=%d \n", params.windowLog, params.hashLog, zc->hashLog3); { size_t const errorCode = ZSTD_resetCCtx_advanced(zc, params); if (ZSTD_isError(errorCode)) return errorCode; } diff --git a/lib/zstd_decompress.c b/lib/zstd_decompress.c index c90b88552..ef99175e8 100644 --- a/lib/zstd_decompress.c +++ b/lib/zstd_decompress.c @@ -149,7 +149,7 @@ size_t ZSTD_decompressBegin(ZSTD_DCtx* dctx) dctx->hufTableX4[0] = HufLog; dctx->flagStaticTables = 0; dctx->fParams.mml = MINMATCH; /* overwritten by frame but forces ZSTD_btopt to MINMATCH in block mode */ - ZSTD_LOG_BLOCK("%p: ZSTD_decompressBegin searchLength=%d\n", dctx->base, dctx->params.searchLength); + ZSTD_LOG_BLOCK("%p: ZSTD_decompressBegin searchLength=%d\n", dctx->base, dctx->fParams.mml); return 0; } @@ -845,7 +845,7 @@ static size_t ZSTD_decompressBlock_internal(ZSTD_DCtx* dctx, if (srcSize >= ZSTD_BLOCKSIZE_MAX) return ERROR(srcSize_wrong); - ZSTD_LOG_BLOCK("%p: ZSTD_decompressBlock_internal searchLength=%d\n", dctx->base, dctx->params.searchLength); + ZSTD_LOG_BLOCK("%p: ZSTD_decompressBlock_internal searchLength=%d\n", dctx->base, dctx->fParams.mml); /* Decode literals sub-block */ litCSize = ZSTD_decodeLiteralsBlock(dctx, src, srcSize); @@ -953,7 +953,7 @@ size_t ZSTD_decompress_usingDict(ZSTD_DCtx* dctx, const void* dict, size_t dictSize) { ZSTD_decompressBegin_usingDict(dctx, dict, dictSize); - ZSTD_LOG_BLOCK("%p: ZSTD_decompressBegin_usingDict searchLength=%d\n", dctx->base, dctx->params.searchLength); + ZSTD_LOG_BLOCK("%p: ZSTD_decompressBegin_usingDict searchLength=%d\n", dctx->base, dctx->fParams.mml); ZSTD_checkContinuity(dctx, dst); return ZSTD_decompressFrame(dctx, dst, dstCapacity, src, srcSize); } diff --git a/lib/zstd_internal.h b/lib/zstd_internal.h index ba350c4f6..3b68654e3 100644 --- a/lib/zstd_internal.h +++ b/lib/zstd_internal.h @@ -51,9 +51,7 @@ * Common constants ***************************************/ #define ZSTD_OPT_DEBUG 0 // 1 = tableID=0; 3 = price func tests; 5 = check encoded sequences; 9 = full logs -#if defined(ZSTD_OPT_DEBUG) && ZSTD_OPT_DEBUG>0 - #include -#endif +#include #if defined(ZSTD_OPT_DEBUG) && ZSTD_OPT_DEBUG>=9 #define ZSTD_LOG_PARSER(...) printf(__VA_ARGS__) #define ZSTD_LOG_ENCODE(...) printf(__VA_ARGS__) @@ -99,7 +97,6 @@ typedef enum { bt_compressed, bt_raw, bt_rle, bt_end } blockType_t; #define MINMATCH 4 #define REPCODE_STARTVALUE 1 -#define HASHLOG3 17 #define Litbits 8 #define MLbits 7 diff --git a/lib/zstd_opt.h b/lib/zstd_opt.h index b8c9d67a5..e20379c11 100644 --- a/lib/zstd_opt.h +++ b/lib/zstd_opt.h @@ -196,17 +196,18 @@ MEM_STATIC void ZSTD_updatePrice(seqStore_t* seqStorePtr, U32 litLength, const B static U32 ZSTD_insertAndFindFirstIndexHash3 (ZSTD_CCtx* zc, const BYTE* ip) { U32* const hashTable3 = zc->hashTable3; + U32 const hashLog3 = zc->hashLog3; const BYTE* const base = zc->base; const U32 target = (U32)(ip - base); U32 idx = zc->nextToUpdate3; while(idx < target) { - hashTable3[ZSTD_hash3Ptr(base+idx, HASHLOG3)] = idx; + hashTable3[ZSTD_hash3Ptr(base+idx, hashLog3)] = idx; idx++; } zc->nextToUpdate3 = target; - return hashTable3[ZSTD_hash3Ptr(ip, HASHLOG3)]; + return hashTable3[ZSTD_hash3Ptr(ip, hashLog3)]; } diff --git a/lib/zstd_static.h b/lib/zstd_static.h index 4ae771fde..d41bc841f 100644 --- a/lib/zstd_static.h +++ b/lib/zstd_static.h @@ -63,6 +63,7 @@ extern "C" { #define ZSTD_CONTENTLOG_MIN 4 #define ZSTD_HASHLOG_MAX 28 #define ZSTD_HASHLOG_MIN 12 +#define ZSTD_HASHLOG3 17 #define ZSTD_SEARCHLOG_MAX (ZSTD_CONTENTLOG_MAX-1) #define ZSTD_SEARCHLOG_MIN 1 #define ZSTD_SEARCHLENGTH_MAX 7 diff --git a/programs/bench.c b/programs/bench.c index 84380400d..d3e9c1f1d 100644 --- a/programs/bench.c +++ b/programs/bench.c @@ -288,7 +288,15 @@ static int BMK_benchMem(const void* srcBuffer, size_t srcSize, for (nbLoops = 0 ; BMK_clockSpan(clockStart) < clockLoop ; nbLoops++) { U32 blockNb; +#if 0 ZSTD_compressBegin_usingDict(refCtx, dictBuffer, dictBufferSize, cLevel); +#else + ZSTD_parameters params = ZSTD_getParams(cLevel, dictBufferSize ? dictBufferSize : blockSize); + // printf("cLevel=%d dictBufferSize=%d srcSize=%d params.srcSize=%d \n", cLevel, (int)dictBufferSize, (int)blockTable[0].srcSize, (int)params.srcSize); + params.srcSize = 0; + ZSTD_compressBegin_advanced(refCtx, dictBuffer, dictBufferSize, params); +#endif + for (blockNb=0; blockNb