From 1077bb81416088b60455dc15fe6d9362aa9a5194 Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Wed, 28 Oct 2015 12:32:25 +0100 Subject: [PATCH] memory notation --- NEWS | 6 +++++ programs/Makefile | 2 +- programs/paramgrill.c | 54 +++++++++++++++++++++++++++++++------------ 3 files changed, 46 insertions(+), 16 deletions(-) diff --git a/NEWS b/NEWS index b09b624f5..8388dfceb 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,9 @@ +v0.2.2 +Fix : Visual Studio 2013 & 2015 release compilation, by Christophe Chevalier + +v0.2.2 +Fix : Read errors, advanced fuzzer tests, by Hanno Böck + v0.2.0 **Breaking format change** Faster decompression speed diff --git a/programs/Makefile b/programs/Makefile index 27e3e0e6a..047a0c45c 100644 --- a/programs/Makefile +++ b/programs/Makefile @@ -77,7 +77,7 @@ fuzzer32: $(ZSTDDIR)/zstd.c $(ZSTDDIR)/fse.c $(ZSTDDIR)/huff0.c $(ZSTDDIR)/legac $(CC) -m32 $(FLAGS) $^ -o $@$(EXT) paramgrill : $(ZSTDDIR)/zstdhc.c $(ZSTDDIR)/zstd.c $(ZSTDDIR)/fse.c $(ZSTDDIR)/huff0.c $(ZSTDDIR)/legacy/zstd_v01.c datagen.c xxhash.c paramgrill.c - $(CC) $(FLAGS) $^ -o $@$(EXT) + $(CC) $(FLAGS) $^ -lm -o $@$(EXT) datagen : datagen.c datagencli.c $(CC) $(FLAGS) $^ -o $@$(EXT) diff --git a/programs/paramgrill.c b/programs/paramgrill.c index 5c5a8264b..7e8e24bcf 100644 --- a/programs/paramgrill.c +++ b/programs/paramgrill.c @@ -52,6 +52,7 @@ #include /* stat64 */ #include /* stat64 */ #include /* strcmp */ +#include /* log */ /* Use ftime() if gettimeofday() is not available on your target */ #if defined(BMK_LEGACY_TIMER) @@ -425,7 +426,7 @@ static void BMK_printWinner(FILE* f, U32 cLevel, BMK_result_t result, ZSTD_HC_pa DISPLAY("\r%79s\r", ""); fprintf(f," {%3u,%3u,%3u,%3u }, ", params.windowLog, params.chainLog, params.hashLog, params.searchLog); fprintf(f, - "/* level %2u: R:%5.3f at %5.1f MB/s */ \n", + "/* level %2u */ /* R:%5.3f at %5.1f MB/s */ \n", cLevel, (double)srcSize / result.cSize, (double)result.cSpeed / 1000.); } @@ -451,6 +452,8 @@ static void BMK_printWinners2(FILE* f, const winnerInfo_t* winners, size_t srcSi for (cLevel=0; cLevel <= ZSTD_HC_MAX_CLEVEL; cLevel++) BMK_printWinner(f, cLevel, winners[cLevel].result, winners[cLevel].params, srcSize); + + fflush(f); } @@ -474,10 +477,32 @@ static int BMK_seed(winnerInfo_t* winners, ZSTD_HC_parameters params, for (cLevel = 0; cLevel <= ZSTD_HC_MAX_CLEVEL; cLevel++) { - if ( (testResult.cSpeed > g_cSpeedTarget[cLevel]) - && ((winners[cLevel].result.cSize==0) || (winners[cLevel].result.cSize > testResult.cSize)) ) + if ( (testResult.cSpeed > g_cSpeedTarget[cLevel]) && (winners[cLevel].result.cSize==0) ) + better = 1; /* first solution for this cLevel */ + + if ( (testResult.cSpeed > g_cSpeedTarget[cLevel]) && (testResult.cSize < winners[cLevel].result.cSize )) { + /* Validate solution is "good enough" */ + double W_ratioNote = log ( (double)srcSize / testResult.cSize); + double O_ratioNote = log ( (double)srcSize / winners[cLevel].result.cSize); + size_t W_DMemUsed = (1 << params.windowLog) + (16 KB); + size_t O_DMemUsed = (1 << winners[cLevel].params.windowLog) + (16 KB); + double W_DMemUsed_note = W_ratioNote * ( 18 + 2*cLevel) - log((double)W_DMemUsed); + double O_DMemUsed_note = O_ratioNote * ( 18 + 2*cLevel) - log((double)O_DMemUsed); + + size_t W_CMemUsed = (1 << params.windowLog) + 4 * (1 << params.hashLog) + 4 * (1 << params.chainLog); + size_t O_CMemUsed = (1 << winners[cLevel].params.windowLog) + 4 * (1 << winners[cLevel].params.hashLog) + 4 * (1 << winners[cLevel].params.chainLog); + double W_CMemUsed_note = W_ratioNote * ( 35 + 5*cLevel) - log((double)W_CMemUsed); + double O_CMemUsed_note = O_ratioNote * ( 35 + 5*cLevel) - log((double)O_CMemUsed); + + if (W_DMemUsed_note < O_DMemUsed_note) continue; /* uses too much Decompression memory for too little benefit */ + if (W_CMemUsed_note < O_CMemUsed_note) continue; /* uses too much memory for compression for too little benefit */ + better = 1; + } + + if (better) + { winners[cLevel].result = testResult; winners[cLevel].params = params; BMK_printWinner(stdout, cLevel, testResult, params, srcSize); @@ -594,7 +619,6 @@ static void BMK_benchMem(void* srcBuffer, size_t srcSize) ZSTD_HC_CCtx* ctx = ZSTD_HC_createCCtx(); ZSTD_HC_parameters params; winnerInfo_t winners[ZSTD_HC_MAX_CLEVEL+1]; - BMK_result_t testResult; int i; const char* rfName = "grillResults.txt"; FILE* f; @@ -602,6 +626,7 @@ static void BMK_benchMem(void* srcBuffer, size_t srcSize) if (g_singleRun) { + BMK_result_t testResult; BMK_benchParam(&testResult, srcBuffer, srcSize, ctx, g_params); DISPLAY("\n"); return; @@ -613,23 +638,22 @@ static void BMK_benchMem(void* srcBuffer, size_t srcSize) if (f==NULL) { DISPLAY("error opening %s \n", rfName); exit(1); } if (g_target) - g_cSpeedTarget[9] = g_target * 1000; + g_cSpeedTarget[1] = g_target * 1000; else { - /* baseline config for level 9 */ - params.windowLog = MIN(srcLog, 19); - params.chainLog = MIN(params.windowLog, 19); - params.hashLog = 19; - params.searchLog = MIN(params.chainLog, 9); + /* baseline config for level 1 */ + BMK_result_t testResult; + params = seedParams[1]; + params.windowLog = MIN(srcLog, params.windowLog); + params.chainLog = MIN(params.windowLog, params.chainLog); + params.searchLog = MIN(params.chainLog, params.searchLog); BMK_benchParam(&testResult, srcBuffer, srcSize, ctx, params); - g_cSpeedTarget[9] = (testResult.cSpeed * 15) >> 4; + g_cSpeedTarget[1] = (testResult.cSpeed * 15) >> 4; } - /* establish speed objectives (relative to level9) */ - g_cSpeedTarget[1] = g_cSpeedTarget[9] << 4; - g_cSpeedTarget[0] = (g_cSpeedTarget[1] * 181) >> 7; /* sqrt2 */ + /* establish speed objectives (relative to level 1) */ for (i=2; i> 8; + g_cSpeedTarget[i] = (g_cSpeedTarget[i-1] * 13) >> 4; /* populate initial solution */ { -- 2.47.2