Skip to content

Commit f478f4c

Browse files
committed
Bugfix and new features for largeNbDicts benchmark
1 parent 4b24ebd commit f478f4c

File tree

2 files changed

+42
-34
lines changed

2 files changed

+42
-34
lines changed

contrib/largeNbDicts/README.md

+16-8
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,20 @@ Command line :
1414
```
1515
largeNbDicts [Options] filename(s)
1616
17-
Options :
18-
-r : recursively load all files in subdirectories (default: off)
19-
-B# : split input into blocks of size # (default: no split)
20-
-# : use compression level # (default: 3)
21-
-D # : use # as a dictionary (default: create one)
22-
-i# : nb benchmark rounds (default: 6)
23-
--nbDicts=# : set nb of dictionaries to # (default: one per block)
24-
-h : help (this text)
17+
Options :
18+
-z : benchmark compression (default)
19+
-d : benchmark decompression
20+
-r : recursively load all files in subdirectories (default: off)
21+
-B# : split input into blocks of size # (default: no split)
22+
-# : use compression level # (default: 3)
23+
-D # : use # as a dictionary (default: create one)
24+
-i# : nb benchmark rounds (default: 6)
25+
--nbBlocks=#: use # blocks for bench (default: one per file)
26+
--nbDicts=# : create # dictionaries for bench (default: one per block)
27+
-h : help (this text)
28+
29+
Advanced Options (see zstd.h for documentation) :
30+
--dedicated-dict-search
31+
--dict-content-type=#
32+
--dict-attach-pref=#
2533
```

contrib/largeNbDicts/largeNbDicts.c

+26-26
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
#define BLOCKSIZE_DEFAULT 0 /* no slicing into blocks */
4040
#define DICTSIZE (4 KB)
4141
#define CLEVEL_DEFAULT 3
42+
#define DICT_ATTACH_METHOD ZSTD_dlm_byCopy
4243

4344
#define BENCH_TIME_DEFAULT_S 6
4445
#define RUN_TIME_DEFAULT_MS 1000
@@ -156,19 +157,6 @@ createDictionaryBuffer(const char* dictionaryName,
156157
}
157158
}
158159

159-
static ZSTD_CDict* createCDictForDedicatedDictSearch(const void* dict, size_t dictSize, int compressionLevel)
160-
{
161-
ZSTD_CCtx_params* params = ZSTD_createCCtxParams();
162-
ZSTD_CCtxParams_init(params, compressionLevel);
163-
ZSTD_CCtxParams_setParameter(params, ZSTD_c_enableDedicatedDictSearch, 1);
164-
ZSTD_CCtxParams_setParameter(params, ZSTD_c_compressionLevel, compressionLevel);
165-
166-
ZSTD_CDict* cdict = ZSTD_createCDict_advanced2(dict, dictSize, ZSTD_dlm_byCopy, ZSTD_dct_auto, params, ZSTD_defaultCMem);
167-
168-
ZSTD_freeCCtxParams(params);
169-
return cdict;
170-
}
171-
172160
/*! BMK_loadFiles() :
173161
* Loads `buffer`, with content from files listed within `fileNamesTable`.
174162
* Fills `buffer` entirely.
@@ -461,14 +449,12 @@ static void freeCDictCollection(cdict_collection_t cdictc)
461449
}
462450

463451
/* returns .buffers=NULL if operation fails */
464-
static cdict_collection_t createCDictCollection(const void* dictBuffer, size_t dictSize, size_t nbCDict, int cLevel, int dedicatedDictSearch)
452+
static cdict_collection_t createCDictCollection(const void* dictBuffer, size_t dictSize, size_t nbCDict, ZSTD_dictContentType_e dictContentType, ZSTD_CCtx_params* cctxParams)
465453
{
466454
ZSTD_CDict** const cdicts = malloc(nbCDict * sizeof(ZSTD_CDict*));
467455
if (cdicts==NULL) return kNullCDictCollection;
468456
for (size_t dictNb=0; dictNb < nbCDict; dictNb++) {
469-
cdicts[dictNb] = dedicatedDictSearch ?
470-
createCDictForDedicatedDictSearch(dictBuffer, dictSize, cLevel) :
471-
ZSTD_createCDict(dictBuffer, dictSize, cLevel);
457+
cdicts[dictNb] = ZSTD_createCDict_advanced2(dictBuffer, dictSize, DICT_ATTACH_METHOD, dictContentType, cctxParams, ZSTD_defaultCMem);
472458
CONTROL(cdicts[dictNb] != NULL);
473459
}
474460
cdict_collection_t cdictc;
@@ -735,7 +721,7 @@ int bench(const char** fileNameTable, unsigned nbFiles,
735721
size_t blockSize, int clevel,
736722
unsigned nbDictMax, unsigned nbBlocks,
737723
unsigned nbRounds, int benchCompression,
738-
int dedicatedDictSearch)
724+
ZSTD_dictContentType_e dictContentType, ZSTD_CCtx_params* cctxParams)
739725
{
740726
int result = 0;
741727

@@ -786,13 +772,11 @@ int bench(const char** fileNameTable, unsigned nbFiles,
786772
/* dictionary determination */
787773
buffer_t const dictBuffer = createDictionaryBuffer(dictionary,
788774
srcs.buffer.ptr,
789-
srcs.slices.capacities, srcs.slices.nbSlices,
775+
srcSlices.capacities, srcSlices.nbSlices,
790776
DICTSIZE);
791777
CONTROL(dictBuffer.ptr != NULL);
792778

793-
ZSTD_CDict* const cdict = dedicatedDictSearch ?
794-
createCDictForDedicatedDictSearch(dictBuffer.ptr, dictBuffer.size, clevel) :
795-
ZSTD_createCDict(dictBuffer.ptr, dictBuffer.size, clevel);
779+
ZSTD_CDict* const cdict = ZSTD_createCDict_advanced2(dictBuffer.ptr, dictBuffer.size, DICT_ATTACH_METHOD, dictContentType, cctxParams, ZSTD_defaultCMem);
796780
CONTROL(cdict != NULL);
797781

798782
size_t const cTotalSizeNoDict = compressBlocks(NULL, dstSlices, srcSlices, NULL, clevel);
@@ -815,14 +799,14 @@ int bench(const char** fileNameTable, unsigned nbFiles,
815799

816800
unsigned const nbDicts = nbDictMax ? nbDictMax : nbBlocks;
817801

818-
cdict_collection_t const cdictionaries = createCDictCollection(dictBuffer.ptr, dictBuffer.size, nbDicts, clevel, dedicatedDictSearch);
802+
cdict_collection_t const cdictionaries = createCDictCollection(dictBuffer.ptr, dictBuffer.size, nbDicts, dictContentType, cctxParams);
819803
CONTROL(cdictionaries.cdicts != NULL);
820804

821805
ddict_collection_t const ddictionaries = createDDictCollection(dictBuffer.ptr, dictBuffer.size, nbDicts);
822806
CONTROL(ddictionaries.ddicts != NULL);
823807

824808
if (benchCompression) {
825-
size_t const dictMem = ZSTD_estimateCDictSize(dictBuffer.size, ZSTD_dlm_byCopy);
809+
size_t const dictMem = ZSTD_estimateCDictSize(dictBuffer.size, DICT_ATTACH_METHOD);
826810
size_t const allDictMem = dictMem * nbDicts;
827811
DISPLAYLEVEL(3, "generating %u dictionaries, using %.1f MB of memory \n",
828812
nbDicts, (double)allDictMem / (1 MB));
@@ -836,7 +820,7 @@ int bench(const char** fileNameTable, unsigned nbFiles,
836820

837821
freeBufferCollection(resultCollection);
838822
} else {
839-
size_t const dictMem = ZSTD_estimateDDictSize(dictBuffer.size, ZSTD_dlm_byCopy);
823+
size_t const dictMem = ZSTD_estimateDDictSize(dictBuffer.size, DICT_ATTACH_METHOD);
840824
size_t const allDictMem = dictMem * nbDicts;
841825
DISPLAYLEVEL(3, "generating %u dictionaries, using %.1f MB of memory \n",
842826
nbDicts, (double)allDictMem / (1 MB));
@@ -927,6 +911,11 @@ int usage(const char* exeName)
927911
DISPLAY ("--nbBlocks=#: use # blocks for bench (default: one per file) \n");
928912
DISPLAY ("--nbDicts=# : create # dictionaries for bench (default: one per block) \n");
929913
DISPLAY ("-h : help (this text) \n");
914+
DISPLAY (" \n");
915+
DISPLAY ("Advanced Options (see zstd.h for documentation) : \n");
916+
DISPLAY ("--dedicated-dict-search\n");
917+
DISPLAY ("--dict-content-type=#\n");
918+
DISPLAY ("--dict-attach-pref=#\n");
930919
return 0;
931920
}
932921

@@ -956,6 +945,8 @@ int main (int argc, const char** argv)
956945
size_t blockSize = BLOCKSIZE_DEFAULT;
957946
unsigned nbDicts = 0; /* determine nbDicts automatically: 1 dictionary per block */
958947
unsigned nbBlocks = 0; /* determine nbBlocks automatically, from source and blockSize */
948+
ZSTD_dictContentType_e dictContentType = ZSTD_dct_auto;
949+
ZSTD_dictAttachPref_e dictAttachPref = ZSTD_dictDefaultAttach;
959950

960951
for (int argNb = 1; argNb < argc ; argNb++) {
961952
const char* argument = argv[argNb];
@@ -972,6 +963,8 @@ int main (int argc, const char** argv)
972963
if (longCommandWArg(&argument, "--nbBlocks=")) { nbBlocks = readU32FromChar(&argument); continue; }
973964
if (longCommandWArg(&argument, "--clevel=")) { cLevel = (int)readU32FromChar(&argument); continue; }
974965
if (longCommandWArg(&argument, "--dedicated-dict-search")) { dedicatedDictSearch = 1; continue; }
966+
if (longCommandWArg(&argument, "--dict-content-type=")) { dictContentType = (int)readU32FromChar(&argument); continue; }
967+
if (longCommandWArg(&argument, "--dict-attach-pref=")) { dictAttachPref = (int)readU32FromChar(&argument); continue; }
975968
if (longCommandWArg(&argument, "-")) { cLevel = (int)readU32FromChar(&argument); continue; }
976969
/* anything that's not a command is a filename */
977970
nameTable[nameIdx++] = argument;
@@ -989,10 +982,17 @@ int main (int argc, const char** argv)
989982
nameTable = NULL; /* UTIL_createFileNamesTable() takes ownership of nameTable */
990983
}
991984

992-
int result = bench(filenameTable->fileNames, (unsigned)filenameTable->tableSize, dictionary, blockSize, cLevel, nbDicts, nbBlocks, nbRounds, benchCompression, dedicatedDictSearch);
985+
ZSTD_CCtx_params* cctxParams = ZSTD_createCCtxParams();
986+
ZSTD_CCtxParams_init(cctxParams, cLevel);
987+
ZSTD_CCtxParams_setParameter(cctxParams, ZSTD_c_enableDedicatedDictSearch, dedicatedDictSearch);
988+
ZSTD_CCtxParams_setParameter(cctxParams, ZSTD_c_nbWorkers, 0);
989+
ZSTD_CCtxParams_setParameter(cctxParams, ZSTD_c_forceAttachDict, dictAttachPref);
990+
991+
int result = bench(filenameTable->fileNames, (unsigned)filenameTable->tableSize, dictionary, blockSize, cLevel, nbDicts, nbBlocks, nbRounds, benchCompression, dictContentType, cctxParams);
993992

994993
UTIL_freeFileNamesTable(filenameTable);
995994
free(nameTable);
995+
ZSTD_freeCCtxParams(cctxParams);
996996

997997
return result;
998998
}

0 commit comments

Comments
 (0)