faster init for multi-files bench

This commit is contained in:
Yann Collet
2015-12-16 03:01:03 +01:00
parent 6c8b925ab9
commit 7061135d33
+16 -11
View File
@@ -217,7 +217,7 @@ typedef size_t (*compressor_t) (void* dst, size_t maxDstSize, const void* src, s
static int BMK_benchMem(const void* srcBuffer, size_t srcSize, static int BMK_benchMem(const void* srcBuffer, size_t srcSize,
const char* displayName, int cLevel, const char* displayName, int cLevel,
const char** fileNames, U32 nbFiles) const size_t* fileSizes, U32 nbFiles)
{ {
const size_t blockSize = (g_blockSize ? g_blockSize : srcSize) + (!srcSize); /* avoid div by 0 */ const size_t blockSize = (g_blockSize ? g_blockSize : srcSize) + (!srcSize); /* avoid div by 0 */
const U32 maxNbBlocks = (U32) ((srcSize + (blockSize-1)) / blockSize) + nbFiles; const U32 maxNbBlocks = (U32) ((srcSize + (blockSize-1)) / blockSize) + nbFiles;
@@ -244,9 +244,8 @@ static int BMK_benchMem(const void* srcBuffer, size_t srcSize,
char* resPtr = (char*)resultBuffer; char* resPtr = (char*)resultBuffer;
for (fileNb=0; fileNb<nbFiles; fileNb++) for (fileNb=0; fileNb<nbFiles; fileNb++)
{ {
U64 fileSize = (nbFiles>=2) ? BMK_getFileSize(fileNames[fileNb]) : srcSize; size_t remaining = fileSizes[fileNb];
size_t remaining = (size_t)fileSize; U32 nbBlocksforThisFile = (U32)((remaining + (blockSize-1)) / blockSize);
U32 nbBlocksforThisFile = (U32)((fileSize + (blockSize-1)) / blockSize);
U32 blockEnd = nbBlocks + nbBlocksforThisFile; U32 blockEnd = nbBlocks + nbBlocksforThisFile;
for ( ; nbBlocks<blockEnd; nbBlocks++) for ( ; nbBlocks<blockEnd; nbBlocks++)
{ {
@@ -376,16 +375,16 @@ static size_t BMK_findMaxMem(U64 requiredMem)
static void BMK_benchCLevel(void* srcBuffer, size_t benchedSize, static void BMK_benchCLevel(void* srcBuffer, size_t benchedSize,
const char* displayName, int cLevel, const char* displayName, int cLevel,
const char** fileNamesTable, unsigned nbFiles) const size_t* fileSizes, unsigned nbFiles)
{ {
if (cLevel < 0) if (cLevel < 0)
{ {
int l; int l;
for (l=1; l <= -cLevel; l++) for (l=1; l <= -cLevel; l++)
BMK_benchMem(srcBuffer, benchedSize, displayName, l, fileNamesTable, nbFiles); BMK_benchMem(srcBuffer, benchedSize, displayName, l, fileSizes, nbFiles);
return; return;
} }
BMK_benchMem(srcBuffer, benchedSize, displayName, cLevel, fileNamesTable, nbFiles); BMK_benchMem(srcBuffer, benchedSize, displayName, cLevel, fileSizes, nbFiles);
} }
static U64 BMK_getTotalFileSize(const char** fileNamesTable, unsigned nbFiles) static U64 BMK_getTotalFileSize(const char** fileNamesTable, unsigned nbFiles)
@@ -397,7 +396,9 @@ static U64 BMK_getTotalFileSize(const char** fileNamesTable, unsigned nbFiles)
return total; return total;
} }
static void BMK_loadFiles(void* buffer, size_t bufferSize, const char** fileNamesTable, unsigned nbFiles) static void BMK_loadFiles(void* buffer, size_t bufferSize,
size_t* fileSizes,
const char** fileNamesTable, unsigned nbFiles)
{ {
BYTE* buff = (BYTE*)buffer; BYTE* buff = (BYTE*)buffer;
size_t pos = 0; size_t pos = 0;
@@ -414,6 +415,7 @@ static void BMK_loadFiles(void* buffer, size_t bufferSize, const char** fileName
readSize = fread(buff+pos, 1, (size_t)fileSize, f); readSize = fread(buff+pos, 1, (size_t)fileSize, f);
if (readSize != (size_t)fileSize) EXM_THROW(11, "could not read %s", fileNamesTable[n]); if (readSize != (size_t)fileSize) EXM_THROW(11, "could not read %s", fileNamesTable[n]);
pos += readSize; pos += readSize;
fileSizes[n] = fileSize;
fclose(f); fclose(f);
} }
} }
@@ -422,6 +424,7 @@ static void BMK_benchFileTable(const char** fileNamesTable, unsigned nbFiles, in
{ {
void* srcBuffer; void* srcBuffer;
size_t benchedSize; size_t benchedSize;
size_t* fileSizes;
U64 totalSizeToLoad = BMK_getTotalFileSize(fileNamesTable, nbFiles); U64 totalSizeToLoad = BMK_getTotalFileSize(fileNamesTable, nbFiles);
char mfName[20] = {0}; char mfName[20] = {0};
const char* displayName = NULL; const char* displayName = NULL;
@@ -432,20 +435,22 @@ static void BMK_benchFileTable(const char** fileNamesTable, unsigned nbFiles, in
if (benchedSize < totalSizeToLoad) if (benchedSize < totalSizeToLoad)
DISPLAY("Not enough memory; testing %u MB only...\n", (U32)(benchedSize >> 20)); DISPLAY("Not enough memory; testing %u MB only...\n", (U32)(benchedSize >> 20));
srcBuffer = malloc(benchedSize); srcBuffer = malloc(benchedSize);
fileSizes = malloc(nbFiles * sizeof(size_t));
if (!srcBuffer) EXM_THROW(12, "not enough memory"); if (!srcBuffer) EXM_THROW(12, "not enough memory");
/* Load input buffer */ /* Load input buffer */
BMK_loadFiles(srcBuffer, benchedSize, fileNamesTable, nbFiles); BMK_loadFiles(srcBuffer, benchedSize, fileSizes, fileNamesTable, nbFiles);
/* Bench */ /* Bench */
snprintf (mfName, sizeof(mfName), " %u files", nbFiles); snprintf (mfName, sizeof(mfName), " %u files", nbFiles);
if (nbFiles > 1) displayName = mfName; if (nbFiles > 1) displayName = mfName;
else displayName = fileNamesTable[0]; else displayName = fileNamesTable[0];
BMK_benchCLevel(srcBuffer, benchedSize, displayName, cLevel, fileNamesTable, nbFiles); BMK_benchCLevel(srcBuffer, benchedSize, displayName, cLevel, fileSizes, nbFiles);
/* clean up */ /* clean up */
free(srcBuffer); free(srcBuffer);
free(fileSizes);
} }
@@ -463,7 +468,7 @@ static void BMK_syntheticTest(int cLevel, double compressibility)
/* Bench */ /* Bench */
snprintf (name, sizeof(name), "Synthetic %2u%%", (unsigned)(compressibility*100)); snprintf (name, sizeof(name), "Synthetic %2u%%", (unsigned)(compressibility*100));
BMK_benchCLevel(srcBuffer, benchedSize, name, cLevel, NULL, 1); BMK_benchCLevel(srcBuffer, benchedSize, name, cLevel, &benchedSize, 1);
/* clean up */ /* clean up */
free(srcBuffer); free(srcBuffer);