Skip to content

Commit b7b7edb

Browse files
authored
Merge pull request #3161 from embg/largeNbDictsImprovements
[contrib] largeNbDicts bugfix + improvements
2 parents b944db0 + 2436405 commit b7b7edb

File tree

1 file changed

+33
-12
lines changed

1 file changed

+33
-12
lines changed

contrib/largeNbDicts/largeNbDicts.c

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -577,11 +577,12 @@ typedef struct {
577577
cdict_collection_t dictionaries;
578578
} compressInstructions;
579579

580-
compressInstructions createCompressInstructions(cdict_collection_t dictionaries)
580+
compressInstructions createCompressInstructions(cdict_collection_t dictionaries, ZSTD_CCtx_params* cctxParams)
581581
{
582582
compressInstructions ci;
583583
ci.cctx = ZSTD_createCCtx();
584584
CONTROL(ci.cctx != NULL);
585+
ZSTD_CCtx_setParametersUsingCCtxParams(ci.cctx, cctxParams);
585586
ci.nbDicts = dictionaries.nbCDict;
586587
ci.dictNb = 0;
587588
ci.dictionaries = dictionaries;
@@ -622,10 +623,10 @@ size_t compress(const void* src, size_t srcSize, void* dst, size_t dstCapacity,
622623
compressInstructions* const ci = (compressInstructions*) payload;
623624
(void)dstCapacity;
624625

625-
ZSTD_compress_usingCDict(ci->cctx,
626-
dst, srcSize,
627-
src, srcSize,
628-
ci->dictionaries.cdicts[ci->dictNb]);
626+
ZSTD_CCtx_refCDict(ci->cctx, ci->dictionaries.cdicts[ci->dictNb]);
627+
ZSTD_compress2(ci->cctx,
628+
dst, srcSize,
629+
src, srcSize);
629630

630631
ci->dictNb = ci->dictNb + 1;
631632
if (ci->dictNb >= ci->nbDicts) ci->dictNb = 0;
@@ -654,9 +655,11 @@ static int benchMem(slice_collection_t dstBlocks,
654655
slice_collection_t srcBlocks,
655656
ddict_collection_t ddictionaries,
656657
cdict_collection_t cdictionaries,
657-
unsigned nbRounds, int benchCompression)
658+
unsigned nbRounds, int benchCompression,
659+
const char* exeName, ZSTD_CCtx_params* cctxParams)
658660
{
659661
assert(dstBlocks.nbSlices == srcBlocks.nbSlices);
662+
if (benchCompression) assert(cctxParams);
660663

661664
unsigned const ms_per_round = RUN_TIME_DEFAULT_MS;
662665
unsigned const total_time_ms = nbRounds * ms_per_round;
@@ -667,7 +670,7 @@ static int benchMem(slice_collection_t dstBlocks,
667670
BMK_createTimedFnState(total_time_ms, ms_per_round);
668671

669672
decompressInstructions di = createDecompressInstructions(ddictionaries);
670-
compressInstructions ci = createCompressInstructions(cdictionaries);
673+
compressInstructions ci = createCompressInstructions(cdictionaries, cctxParams);
671674
void* payload = benchCompression ? (void*)&ci : (void*)&di;
672675
BMK_benchParams_t const bp = {
673676
.benchFn = benchCompression ? compress : decompress,
@@ -703,6 +706,23 @@ static int benchMem(slice_collection_t dstBlocks,
703706
}
704707
DISPLAY("\n");
705708

709+
char* csvFileName = malloc(strlen(exeName) + 5);
710+
strcpy(csvFileName, exeName);
711+
strcat(csvFileName, ".csv");
712+
FILE* csvFile = fopen(csvFileName, "r");
713+
if (!csvFile) {
714+
csvFile = fopen(csvFileName, "wt");
715+
assert(csvFile);
716+
fprintf(csvFile, "%s\n", exeName);
717+
} else {
718+
fclose(csvFile);
719+
csvFile = fopen(csvFileName, "at");
720+
assert(csvFile);
721+
}
722+
fprintf(csvFile, "%.1f\n", bestSpeed);
723+
fclose(csvFile);
724+
free(csvFileName);
725+
706726
freeDecompressInstructions(di);
707727
freeCompressInstructions(ci);
708728
BMK_freeTimedFnState(benchState);
@@ -721,7 +741,8 @@ int bench(const char** fileNameTable, unsigned nbFiles,
721741
size_t blockSize, int clevel,
722742
unsigned nbDictMax, unsigned nbBlocks,
723743
unsigned nbRounds, int benchCompression,
724-
ZSTD_dictContentType_e dictContentType, ZSTD_CCtx_params* cctxParams)
744+
ZSTD_dictContentType_e dictContentType, ZSTD_CCtx_params* cctxParams,
745+
const char* exeName)
725746
{
726747
int result = 0;
727748

@@ -806,7 +827,7 @@ int bench(const char** fileNameTable, unsigned nbFiles,
806827
CONTROL(ddictionaries.ddicts != NULL);
807828

808829
if (benchCompression) {
809-
size_t const dictMem = ZSTD_estimateCDictSize(dictBuffer.size, DICT_LOAD_METHOD);
830+
size_t const dictMem = ZSTD_sizeof_CDict(cdictionaries.cdicts[0]);
810831
size_t const allDictMem = dictMem * nbDicts;
811832
DISPLAYLEVEL(3, "generating %u dictionaries, using %.1f MB of memory \n",
812833
nbDicts, (double)allDictMem / (1 MB));
@@ -816,7 +837,7 @@ int bench(const char** fileNameTable, unsigned nbFiles,
816837
buffer_collection_t resultCollection = createBufferCollection_fromSliceCollection(srcSlices);
817838
CONTROL(resultCollection.buffer.ptr != NULL);
818839

819-
result = benchMem(dstSlices, resultCollection.slices, ddictionaries, cdictionaries, nbRounds, benchCompression);
840+
result = benchMem(dstSlices, resultCollection.slices, ddictionaries, cdictionaries, nbRounds, benchCompression, exeName, cctxParams);
820841

821842
freeBufferCollection(resultCollection);
822843
} else {
@@ -830,7 +851,7 @@ int bench(const char** fileNameTable, unsigned nbFiles,
830851
buffer_collection_t resultCollection = createBufferCollection_fromSliceCollectionSizes(srcSlices);
831852
CONTROL(resultCollection.buffer.ptr != NULL);
832853

833-
result = benchMem(resultCollection.slices, dstSlices, ddictionaries, cdictionaries, nbRounds, benchCompression);
854+
result = benchMem(resultCollection.slices, dstSlices, ddictionaries, cdictionaries, nbRounds, benchCompression, exeName, NULL);
834855

835856
freeBufferCollection(resultCollection);
836857
}
@@ -988,7 +1009,7 @@ int main (int argc, const char** argv)
9881009
ZSTD_CCtxParams_setParameter(cctxParams, ZSTD_c_nbWorkers, 0);
9891010
ZSTD_CCtxParams_setParameter(cctxParams, ZSTD_c_forceAttachDict, dictAttachPref);
9901011

991-
int result = bench(filenameTable->fileNames, (unsigned)filenameTable->tableSize, dictionary, blockSize, cLevel, nbDicts, nbBlocks, nbRounds, benchCompression, dictContentType, cctxParams);
1012+
int result = bench(filenameTable->fileNames, (unsigned)filenameTable->tableSize, dictionary, blockSize, cLevel, nbDicts, nbBlocks, nbRounds, benchCompression, dictContentType, cctxParams, exeName);
9921013

9931014
UTIL_freeFileNamesTable(filenameTable);
9941015
free(nameTable);

0 commit comments

Comments
 (0)