Add prefetchCDictTables CCtxParam
This commit is contained in:
@@ -576,6 +576,11 @@ ZSTD_bounds ZSTD_cParam_getBounds(ZSTD_cParameter param)
|
|||||||
bounds.upperBound = 1;
|
bounds.upperBound = 1;
|
||||||
return bounds;
|
return bounds;
|
||||||
|
|
||||||
|
case ZSTD_c_prefetchCDictTables:
|
||||||
|
bounds.lowerBound = (int)ZSTD_ps_auto;
|
||||||
|
bounds.upperBound = (int)ZSTD_ps_disable;
|
||||||
|
return bounds;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
bounds.error = ERROR(parameter_unsupported);
|
bounds.error = ERROR(parameter_unsupported);
|
||||||
return bounds;
|
return bounds;
|
||||||
@@ -640,6 +645,7 @@ static int ZSTD_isUpdateAuthorized(ZSTD_cParameter param)
|
|||||||
case ZSTD_c_useBlockSplitter:
|
case ZSTD_c_useBlockSplitter:
|
||||||
case ZSTD_c_useRowMatchFinder:
|
case ZSTD_c_useRowMatchFinder:
|
||||||
case ZSTD_c_deterministicRefPrefix:
|
case ZSTD_c_deterministicRefPrefix:
|
||||||
|
case ZSTD_c_prefetchCDictTables:
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -695,6 +701,7 @@ size_t ZSTD_CCtx_setParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, int value)
|
|||||||
case ZSTD_c_useBlockSplitter:
|
case ZSTD_c_useBlockSplitter:
|
||||||
case ZSTD_c_useRowMatchFinder:
|
case ZSTD_c_useRowMatchFinder:
|
||||||
case ZSTD_c_deterministicRefPrefix:
|
case ZSTD_c_deterministicRefPrefix:
|
||||||
|
case ZSTD_c_prefetchCDictTables:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default: RETURN_ERROR(parameter_unsupported, "unknown parameter");
|
default: RETURN_ERROR(parameter_unsupported, "unknown parameter");
|
||||||
@@ -921,6 +928,11 @@ size_t ZSTD_CCtxParams_setParameter(ZSTD_CCtx_params* CCtxParams,
|
|||||||
CCtxParams->deterministicRefPrefix = !!value;
|
CCtxParams->deterministicRefPrefix = !!value;
|
||||||
return CCtxParams->deterministicRefPrefix;
|
return CCtxParams->deterministicRefPrefix;
|
||||||
|
|
||||||
|
case ZSTD_c_prefetchCDictTables:
|
||||||
|
BOUNDCHECK(ZSTD_c_prefetchCDictTables, value);
|
||||||
|
CCtxParams->prefetchCDictTables = (ZSTD_paramSwitch_e)value;
|
||||||
|
return CCtxParams->prefetchCDictTables;
|
||||||
|
|
||||||
default: RETURN_ERROR(parameter_unsupported, "unknown parameter");
|
default: RETURN_ERROR(parameter_unsupported, "unknown parameter");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1053,6 +1065,9 @@ size_t ZSTD_CCtxParams_getParameter(
|
|||||||
case ZSTD_c_deterministicRefPrefix:
|
case ZSTD_c_deterministicRefPrefix:
|
||||||
*value = (int)CCtxParams->deterministicRefPrefix;
|
*value = (int)CCtxParams->deterministicRefPrefix;
|
||||||
break;
|
break;
|
||||||
|
case ZSTD_c_prefetchCDictTables:
|
||||||
|
*value = (int)CCtxParams->prefetchCDictTables;
|
||||||
|
break;
|
||||||
default: RETURN_ERROR(parameter_unsupported, "unknown parameter");
|
default: RETURN_ERROR(parameter_unsupported, "unknown parameter");
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2913,6 +2928,7 @@ static size_t ZSTD_buildSeqStore(ZSTD_CCtx* zc, const void* src, size_t srcSize)
|
|||||||
zc->appliedParams.useRowMatchFinder,
|
zc->appliedParams.useRowMatchFinder,
|
||||||
dictMode);
|
dictMode);
|
||||||
ms->ldmSeqStore = NULL;
|
ms->ldmSeqStore = NULL;
|
||||||
|
ms->prefetchCDictTables = zc->appliedParams.prefetchCDictTables == ZSTD_ps_enable;
|
||||||
lastLLSize = blockCompressor(ms, &zc->seqStore, zc->blockState.nextCBlock->rep, src, srcSize);
|
lastLLSize = blockCompressor(ms, &zc->seqStore, zc->blockState.nextCBlock->rep, src, srcSize);
|
||||||
}
|
}
|
||||||
{ const BYTE* const lastLiterals = (const BYTE*)src + srcSize - lastLLSize;
|
{ const BYTE* const lastLiterals = (const BYTE*)src + srcSize - lastLLSize;
|
||||||
|
|||||||
@@ -235,6 +235,7 @@ struct ZSTD_matchState_t {
|
|||||||
const ZSTD_matchState_t* dictMatchState;
|
const ZSTD_matchState_t* dictMatchState;
|
||||||
ZSTD_compressionParameters cParams;
|
ZSTD_compressionParameters cParams;
|
||||||
const rawSeqStore_t* ldmSeqStore;
|
const rawSeqStore_t* ldmSeqStore;
|
||||||
|
int prefetchCDictTables; /* TODO document */
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -331,6 +332,9 @@ struct ZSTD_CCtx_params_s {
|
|||||||
|
|
||||||
/* Internal use, for createCCtxParams() and freeCCtxParams() only */
|
/* Internal use, for createCCtxParams() and freeCCtxParams() only */
|
||||||
ZSTD_customMem customMem;
|
ZSTD_customMem customMem;
|
||||||
|
|
||||||
|
/* TODO document */
|
||||||
|
ZSTD_paramSwitch_e prefetchCDictTables;
|
||||||
}; /* typedef'd to ZSTD_CCtx_params within "zstd.h" */
|
}; /* typedef'd to ZSTD_CCtx_params within "zstd.h" */
|
||||||
|
|
||||||
#define COMPRESS_SEQUENCES_WORKSPACE_SIZE (sizeof(unsigned) * (MaxSeq + 2))
|
#define COMPRESS_SEQUENCES_WORKSPACE_SIZE (sizeof(unsigned) * (MaxSeq + 2))
|
||||||
|
|||||||
@@ -345,6 +345,13 @@ size_t ZSTD_compressBlock_doubleFast_dictMatchState_generic(
|
|||||||
/* if a dictionary is attached, it must be within window range */
|
/* if a dictionary is attached, it must be within window range */
|
||||||
assert(ms->window.dictLimit + (1U << cParams->windowLog) >= endIndex);
|
assert(ms->window.dictLimit + (1U << cParams->windowLog) >= endIndex);
|
||||||
|
|
||||||
|
if (ms->prefetchCDictTables) {
|
||||||
|
size_t const hashTableSize = ((size_t)1) << dictCParams->hashLog;
|
||||||
|
size_t const chainTableSize = ((size_t)1) << dictCParams->chainLog;
|
||||||
|
PREFETCH_AREA(dictHashLong, hashTableSize * sizeof(U32))
|
||||||
|
PREFETCH_AREA(dictHashSmall, chainTableSize * sizeof(U32))
|
||||||
|
}
|
||||||
|
|
||||||
/* init */
|
/* init */
|
||||||
ip += (dictAndPrefixLength == 0);
|
ip += (dictAndPrefixLength == 0);
|
||||||
|
|
||||||
|
|||||||
@@ -500,6 +500,11 @@ size_t ZSTD_compressBlock_fast_dictMatchState_generic(
|
|||||||
* when translating a dict index into a local index */
|
* when translating a dict index into a local index */
|
||||||
assert(prefixStartIndex >= (U32)(dictEnd - dictBase));
|
assert(prefixStartIndex >= (U32)(dictEnd - dictBase));
|
||||||
|
|
||||||
|
if (ms->prefetchCDictTables) {
|
||||||
|
size_t const hashTableSize = ((size_t)1) << dictCParams->hashLog;
|
||||||
|
PREFETCH_AREA(dictHashTable, hashTableSize * sizeof(U32))
|
||||||
|
}
|
||||||
|
|
||||||
/* init */
|
/* init */
|
||||||
DEBUGLOG(5, "ZSTD_compressBlock_fast_dictMatchState_generic");
|
DEBUGLOG(5, "ZSTD_compressBlock_fast_dictMatchState_generic");
|
||||||
ip0 += (dictAndPrefixLength == 0);
|
ip0 += (dictAndPrefixLength == 0);
|
||||||
|
|||||||
+6
-1
@@ -421,6 +421,7 @@ typedef enum {
|
|||||||
* ZSTD_c_validateSequences
|
* ZSTD_c_validateSequences
|
||||||
* ZSTD_c_useBlockSplitter
|
* ZSTD_c_useBlockSplitter
|
||||||
* ZSTD_c_useRowMatchFinder
|
* ZSTD_c_useRowMatchFinder
|
||||||
|
* ZSTD_c_prefetchCDictTables
|
||||||
* Because they are not stable, it's necessary to define ZSTD_STATIC_LINKING_ONLY to access them.
|
* Because they are not stable, it's necessary to define ZSTD_STATIC_LINKING_ONLY to access them.
|
||||||
* note : never ever use experimentalParam? names directly;
|
* note : never ever use experimentalParam? names directly;
|
||||||
* also, the enums values themselves are unstable and can still change.
|
* also, the enums values themselves are unstable and can still change.
|
||||||
@@ -439,7 +440,8 @@ typedef enum {
|
|||||||
ZSTD_c_experimentalParam12=1009,
|
ZSTD_c_experimentalParam12=1009,
|
||||||
ZSTD_c_experimentalParam13=1010,
|
ZSTD_c_experimentalParam13=1010,
|
||||||
ZSTD_c_experimentalParam14=1011,
|
ZSTD_c_experimentalParam14=1011,
|
||||||
ZSTD_c_experimentalParam15=1012
|
ZSTD_c_experimentalParam15=1012,
|
||||||
|
ZSTD_c_experimentalParam16=1013
|
||||||
} ZSTD_cParameter;
|
} ZSTD_cParameter;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -1954,6 +1956,9 @@ ZSTDLIB_STATIC_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const vo
|
|||||||
*/
|
*/
|
||||||
#define ZSTD_c_deterministicRefPrefix ZSTD_c_experimentalParam15
|
#define ZSTD_c_deterministicRefPrefix ZSTD_c_experimentalParam15
|
||||||
|
|
||||||
|
/* TODO document */
|
||||||
|
#define ZSTD_c_prefetchCDictTables ZSTD_c_experimentalParam16
|
||||||
|
|
||||||
/*! ZSTD_CCtx_getParameter() :
|
/*! ZSTD_CCtx_getParameter() :
|
||||||
* Get the requested compression parameter value, selected by enum ZSTD_cParameter,
|
* Get the requested compression parameter value, selected by enum ZSTD_cParameter,
|
||||||
* and store it into int* value.
|
* and store it into int* value.
|
||||||
|
|||||||
Reference in New Issue
Block a user