new variant, sampling by 11
This commit is contained in:
@@ -4507,8 +4507,10 @@ static size_t ZSTD_optimalBlockSize(ZSTD_CCtx* cctx, const void* src, size_t src
|
|||||||
/* dynamic splitting has a cpu cost for analysis,
|
/* dynamic splitting has a cpu cost for analysis,
|
||||||
* due to that cost it's only used for higher levels */
|
* due to that cost it's only used for higher levels */
|
||||||
if (strat >= ZSTD_btopt)
|
if (strat >= ZSTD_btopt)
|
||||||
return ZSTD_splitBlock(src, srcSize, blockSizeMax, split_lvl2, cctx->tmpWorkspace, cctx->tmpWkspSize);
|
return ZSTD_splitBlock(src, srcSize, blockSizeMax, split_lvl3, cctx->tmpWorkspace, cctx->tmpWkspSize);
|
||||||
if (strat >= ZSTD_lazy2)
|
if (strat >= ZSTD_lazy2)
|
||||||
|
return ZSTD_splitBlock(src, srcSize, blockSizeMax, split_lvl2, cctx->tmpWorkspace, cctx->tmpWkspSize);
|
||||||
|
if (strat >= ZSTD_greedy)
|
||||||
return ZSTD_splitBlock(src, srcSize, blockSizeMax, split_lvl1, cctx->tmpWorkspace, cctx->tmpWkspSize);
|
return ZSTD_splitBlock(src, srcSize, blockSizeMax, split_lvl1, cctx->tmpWorkspace, cctx->tmpWkspSize);
|
||||||
/* blind split strategy
|
/* blind split strategy
|
||||||
* heuristic value, tested as being "generally better".
|
* heuristic value, tested as being "generally better".
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ FORCE_INLINE_TEMPLATE void addEvents_generic(Fingerprint* fp, const void* src, s
|
|||||||
|
|
||||||
ZSTD_GEN_ADDEVENTS_SAMPLE(1)
|
ZSTD_GEN_ADDEVENTS_SAMPLE(1)
|
||||||
ZSTD_GEN_ADDEVENTS_SAMPLE(5)
|
ZSTD_GEN_ADDEVENTS_SAMPLE(5)
|
||||||
|
ZSTD_GEN_ADDEVENTS_SAMPLE(11)
|
||||||
|
|
||||||
|
|
||||||
typedef void (*addEvents_f)(Fingerprint* fp, const void* src, size_t srcSize);
|
typedef void (*addEvents_f)(Fingerprint* fp, const void* src, size_t srcSize);
|
||||||
@@ -173,9 +174,12 @@ size_t ZSTD_splitBlock(const void* src, size_t srcSize,
|
|||||||
size_t blockSizeMax, ZSTD_SplitBlock_strategy_e splitStrat,
|
size_t blockSizeMax, ZSTD_SplitBlock_strategy_e splitStrat,
|
||||||
void* workspace, size_t wkspSize)
|
void* workspace, size_t wkspSize)
|
||||||
{
|
{
|
||||||
if (splitStrat == split_lvl2)
|
if (splitStrat == split_lvl3)
|
||||||
return ZSTD_splitBlock_byChunks(src, srcSize, blockSizeMax, ADDEVENTS_RATE(1), workspace, wkspSize);
|
return ZSTD_splitBlock_byChunks(src, srcSize, blockSizeMax, ADDEVENTS_RATE(1), workspace, wkspSize);
|
||||||
|
|
||||||
|
if (splitStrat == split_lvl2)
|
||||||
|
return ZSTD_splitBlock_byChunks(src, srcSize, blockSizeMax, ADDEVENTS_RATE(5), workspace, wkspSize);
|
||||||
|
|
||||||
assert(splitStrat == split_lvl1);
|
assert(splitStrat == split_lvl1);
|
||||||
return ZSTD_splitBlock_byChunks(src, srcSize, blockSizeMax, ADDEVENTS_RATE(5), workspace, wkspSize);
|
return ZSTD_splitBlock_byChunks(src, srcSize, blockSizeMax, ADDEVENTS_RATE(11), workspace, wkspSize);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef enum { split_lvl1, split_lvl2 } ZSTD_SplitBlock_strategy_e;
|
typedef enum { split_lvl1, split_lvl2, split_lvl3 } ZSTD_SplitBlock_strategy_e;
|
||||||
|
|
||||||
#define ZSTD_SLIPBLOCK_WORKSPACESIZE 8208
|
#define ZSTD_SLIPBLOCK_WORKSPACESIZE 8208
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user