fixed benchmark autogen
parent
0338635e93
commit
d062f1379c
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue