fixed benchmark autogen

dev
Yann Collet 2015-12-01 01:31:17 +01:00
parent 0338635e93
commit d062f1379c
4 changed files with 14 additions and 76 deletions

View File

@ -54,14 +54,15 @@
/* Use ftime() if gettimeofday() is not available */ /* Use ftime() if gettimeofday() is not available */
#if defined(BMK_LEGACY_TIMER) #if defined(BMK_LEGACY_TIMER)
# include <sys/timeb.h> /* timeb, ftime */ # include <sys/timeb.h> /* timeb, ftime */
#else #else
# include <sys/time.h> /* gettimeofday */ # include <sys/time.h> /* gettimeofday */
#endif #endif
#include "mem.h" #include "mem.h"
#include "zstd.h" #include "zstd.h"
#include "xxhash.h" #include "xxhash.h"
#include "datagen.h" /* RDG_genBuffer */
/* ************************************* /* *************************************
@ -82,12 +83,10 @@
#define MB *(1 <<20) #define MB *(1 <<20)
#define GB *(1U<<30) #define GB *(1U<<30)
static const size_t maxMemory = sizeof(size_t)==4 ? (2 GB - 64 MB) : (size_t)(1ULL << ((sizeof(size_t)*8)-31)); static const size_t maxMemory = (sizeof(size_t)==4) ? (2 GB - 64 MB) : (size_t)(1ULL << ((sizeof(size_t)*8)-31));
#define DEFAULT_CHUNKSIZE (4 MB) #define DEFAULT_CHUNKSIZE (4 MB)
static U32 g_compressibilityDefault = 50; static U32 g_compressibilityDefault = 50;
static U32 prime1 = 2654435761U;
static U32 prime2 = 2246822519U;
/* ************************************* /* *************************************
@ -158,62 +157,6 @@ static int BMK_GetMilliSpan( int nTimeStart )
} }
/* ********************************************************
* Data generator
**********************************************************/
/* will hopefully be converted into ROL instruction by compiler */
static U32 BMK_rotl32(unsigned val32, unsigned nbBits) { return((val32 << nbBits) | (val32 >> (32 - nbBits))); }
static U32 BMK_rand(U32* src)
{
U32 rand32 = *src;
rand32 *= prime1;
rand32 += prime2;
rand32 = BMK_rotl32(rand32, 13);
*src = rand32;
return rand32 >> 9;
}
#define BMK_RAND15BITS ( BMK_rand(&seed) & 0x7FFF)
#define BMK_RANDLENGTH ((BMK_rand(&seed) & 3) ? (BMK_rand(&seed) % 15) : (BMK_rand(&seed) % 510) + 15)
#define BMK_RANDCHAR (BYTE)((BMK_rand(&seed) & 63) + '0')
static void BMK_datagen(void* buffer, size_t bufferSize, double proba, U32 seed)
{
BYTE* BBuffer = (BYTE*)buffer;
unsigned pos = 0;
U32 P32 = (U32)(32768 * proba);
/* First Byte */
BBuffer[pos++] = BMK_RANDCHAR;
while (pos < bufferSize)
{
/* Select : Literal (noise) or copy (within 64K) */
if (BMK_RAND15BITS < P32)
{
/* Match */
size_t match, end;
unsigned length = BMK_RANDLENGTH + 4;
unsigned offset = BMK_RAND15BITS + 1;
if (offset > pos) offset = pos;
match = pos - offset;
end = pos + length;
if (end > bufferSize) end = bufferSize;
while (pos < end) BBuffer[pos++] = BBuffer[match++];
}
else
{
/* Literal */
size_t end;
unsigned length = BMK_RANDLENGTH;
end = pos + length;
if (end > bufferSize) end = bufferSize;
while (pos < end) BBuffer[pos++] = BMK_RANDCHAR;
}
}
}
/* ******************************************************** /* ********************************************************
* Bench functions * Bench functions
**********************************************************/ **********************************************************/
@ -283,7 +226,7 @@ static int BMK_benchMem(void* srcBuffer, size_t srcSize, const char* fileName, i
} }
/* warmimg up memory */ /* warmimg up memory */
BMK_datagen(compressedBuffer, maxCompressedSize, 0.10, 1); RDG_genBuffer(compressedBuffer, maxCompressedSize, 0.10, 0.50, 1);
/* Bench */ /* Bench */
{ {
@ -481,7 +424,7 @@ static int BMK_syntheticTest(int cLevel, double compressibility)
} }
/* Fill input buffer */ /* Fill input buffer */
BMK_datagen(srcBuffer, benchedSize, compressibility, 0); RDG_genBuffer(srcBuffer, benchedSize, compressibility, 0.0, 0);
/* Bench */ /* Bench */
#ifdef _MSC_VER #ifdef _MSC_VER

View File

@ -173,6 +173,7 @@ void RDG_genBlock(void* buffer, size_t buffSize, size_t prefixSize, double match
U32 repeatOffset = (RDG_rand(seed) & 15) == 2; U32 repeatOffset = (RDG_rand(seed) & 15) == 2;
if (repeatOffset) offset = prevOffset; if (repeatOffset) offset = prevOffset;
if (offset > pos) offset = (U32)pos; if (offset > pos) offset = (U32)pos;
prevOffset = offset;
match = pos - offset; match = pos - offset;
d = pos + length; d = pos + length;
if (d > buffSize) d = buffSize; if (d > buffSize) d = buffSize;

View File

@ -28,7 +28,7 @@
void RDG_genStdout(unsigned long long size, double matchProba, double litProba, unsigned seed); void RDG_genStdout(unsigned long long size, double matchProba, double litProba, unsigned seed);
void RDG_genBuffer(void* buffer, size_t size, double matchProba, double litProba, unsigned seed); void RDG_genBuffer(void* buffer, size_t size, double matchProba, double litProba, unsigned seed);
/* RDG_genBuffer /*!RDG_genBuffer
Generate 'size' bytes of compressible data into 'buffer'. Generate 'size' bytes of compressible data into 'buffer'.
Compressibility can be controlled using 'matchProba', which is floating point value between 0 and 1. Compressibility can be controlled using 'matchProba', which is floating point value between 0 and 1.
'LitProba' is optional, it affect variability of individual bytes. If litProba==0.0, default value will be used. 'LitProba' is optional, it affect variability of individual bytes. If litProba==0.0, default value will be used.

View File

@ -182,19 +182,13 @@ int main(int argCount, const char** argv)
displayOut = stderr; displayOut = stderr;
/* Pick out basename component. Don't rely on stdlib because of conflicting behavior. */ /* Pick out basename component. Don't rely on stdlib because of conflicting behavior. */
for (i = (int)strlen(programName); i > 0; i--) for (i = (int)strlen(programName); i > 0; i--) { if (programName[i] == '/') { i++; break; } }
{
if (programName[i] == '/') { i++; break; }
}
programName += i; programName += i;
/* zstdcat preset behavior */ /* preset behaviors */
if (!strcmp(programName, ZSTD_UNZSTD)) decode=1;
if (!strcmp(programName, ZSTD_CAT)) { decode=1; forceStdout=1; displayLevel=1; outFileName=stdoutmark; } if (!strcmp(programName, ZSTD_CAT)) { decode=1; forceStdout=1; displayLevel=1; outFileName=stdoutmark; }
/* unzstd preset behavior */
if (!strcmp(programName, ZSTD_UNZSTD))
decode=1;
/* command switches */ /* command switches */
for(i=1; i<argCount; i++) for(i=1; i<argCount; i++)
{ {
@ -325,15 +319,15 @@ int main(int argCount, const char** argv)
/* Welcome message (if verbose) */ /* Welcome message (if verbose) */
DISPLAYLEVEL(3, WELCOME_MESSAGE); DISPLAYLEVEL(3, WELCOME_MESSAGE);
/* Check if benchmark is selected */
if (bench) { BMK_benchFiles(argv+fileNameStart, nbFiles, cLevel*rangeBench); goto _end; }
/* No input filename ==> use stdin */ /* No input filename ==> use stdin */
if(!inFileName) { inFileName=stdinmark; } if(!inFileName) { inFileName=stdinmark; }
/* Check if input defined as console; trigger an error in this case */ /* Check if input defined as console; trigger an error in this case */
if (!strcmp(inFileName, stdinmark) && IS_CONSOLE(stdin) ) return badusage(programName); if (!strcmp(inFileName, stdinmark) && IS_CONSOLE(stdin) ) return badusage(programName);
/* Check if benchmark is selected */
if (bench) { BMK_benchFiles(argv+fileNameStart, nbFiles, cLevel*rangeBench); goto _end; }
/* No output filename ==> try to select one automatically (when possible) */ /* No output filename ==> try to select one automatically (when possible) */
while (!outFileName) while (!outFileName)
{ {