mirror of
https://github.com/FEX-Emu/xxHash.git
synced 2025-02-03 21:22:43 +00:00
new test XXH64 unaligned
refactor internal benchmark
This commit is contained in:
parent
6a63377416
commit
68c1661a02
148
xxhsum.c
148
xxhsum.c
@ -219,118 +219,64 @@ static U64 BMK_GetFileSize(const char* infilename)
|
||||
return (U64)statbuf.st_size;
|
||||
}
|
||||
|
||||
typedef void (*hashFunction)(const void* buffer, size_t bufferSize);
|
||||
|
||||
static void localXXH32(const void* buffer, size_t bufferSize) { XXH32(buffer, bufferSize, 0); }
|
||||
|
||||
static void localXXH64(const void* buffer, size_t bufferSize) { XXH64(buffer, bufferSize, 0); }
|
||||
|
||||
static void BMK_benchHash(hashFunction h, const char* hName, const void* buffer, size_t bufferSize)
|
||||
{
|
||||
static const int nbh_perloop = 100;
|
||||
int iterationNb;
|
||||
double fastestH = 100000000.;
|
||||
|
||||
DISPLAY("\r%79s\r", ""); /* Clean display line */
|
||||
if (g_nbIterations<1) g_nbIterations=1;
|
||||
for (iterationNb = 1; iterationNb <= g_nbIterations; iterationNb++)
|
||||
{
|
||||
int nbHashes = 0;
|
||||
int milliTime;
|
||||
|
||||
DISPLAY("%1i-%-17.17s : %10i ->\r", iterationNb, hName, (int)bufferSize);
|
||||
|
||||
/* Timing loop */
|
||||
milliTime = BMK_GetMilliStart();
|
||||
while(BMK_GetMilliStart() == milliTime);
|
||||
milliTime = BMK_GetMilliStart();
|
||||
while(BMK_GetMilliSpan(milliTime) < TIMELOOP)
|
||||
{
|
||||
int i;
|
||||
for (i=0; i<nbh_perloop; i++)
|
||||
{
|
||||
h(buffer, bufferSize);
|
||||
}
|
||||
nbHashes += nbh_perloop;
|
||||
}
|
||||
milliTime = BMK_GetMilliSpan(milliTime);
|
||||
if ((double)milliTime < fastestH*nbHashes) fastestH = (double)milliTime/nbHashes;
|
||||
DISPLAY("%1i-%-17.17s : %10i -> %7.1f MB/s\r", iterationNb, hName, (int)bufferSize, (double)bufferSize / fastestH / 1000.);
|
||||
}
|
||||
DISPLAY("%-19.19s : %10i -> %7.1f MB/s \n", hName, (int)bufferSize, (double)bufferSize / fastestH / 1000.);
|
||||
}
|
||||
|
||||
|
||||
/* Note : buffer is supposed malloc'ed, hence aligned */
|
||||
static void BMK_benchMem(const void* buffer, size_t bufferSize)
|
||||
{
|
||||
static const int nbh_perloop = 100;
|
||||
|
||||
/* XXH32 bench */
|
||||
{
|
||||
int iterationNb;
|
||||
double fastestH = 100000000.;
|
||||
U32 hashResult = 0;
|
||||
|
||||
DISPLAY("\r%79s\r", ""); /* Clean display line */
|
||||
if (g_nbIterations<1) g_nbIterations=1;
|
||||
for (iterationNb = 1; iterationNb <= g_nbIterations; iterationNb++)
|
||||
{
|
||||
int nbHashes = 0;
|
||||
int milliTime;
|
||||
|
||||
DISPLAY("%1i-%-17.17s : %10i ->\r", iterationNb, "XXH32", (int)bufferSize);
|
||||
|
||||
/* Timing loop */
|
||||
milliTime = BMK_GetMilliStart();
|
||||
while(BMK_GetMilliStart() == milliTime);
|
||||
milliTime = BMK_GetMilliStart();
|
||||
while(BMK_GetMilliSpan(milliTime) < TIMELOOP)
|
||||
{
|
||||
int i;
|
||||
for (i=0; i<nbh_perloop; i++)
|
||||
{
|
||||
hashResult = XXH32(buffer, bufferSize, 0);
|
||||
}
|
||||
nbHashes += nbh_perloop;
|
||||
}
|
||||
milliTime = BMK_GetMilliSpan(milliTime);
|
||||
if ((double)milliTime < fastestH*nbHashes) fastestH = (double)milliTime/nbHashes;
|
||||
DISPLAY("%1i-%-17.17s : %10i -> %7.1f MB/s\r", iterationNb, "XXH32", (int)bufferSize, (double)bufferSize / fastestH / 1000.);
|
||||
}
|
||||
DISPLAY("%-19.19s : %10i -> %7.1f MB/s 0x%08X\n", "XXH32", (int)bufferSize, (double)bufferSize / fastestH / 1000., hashResult);
|
||||
}
|
||||
BMK_benchHash(localXXH32, "XXH32", buffer, bufferSize);
|
||||
|
||||
/* Bench XXH32 on Unaligned input */
|
||||
if (bufferSize>1)
|
||||
{
|
||||
int iterationNb;
|
||||
double fastestH = 100000000.;
|
||||
|
||||
DISPLAY("\r%79s\r", ""); /* Clean display line */
|
||||
for (iterationNb = 1; iterationNb <= g_nbIterations; iterationNb++)
|
||||
{
|
||||
int nbHashes = 0;
|
||||
int milliTime;
|
||||
const char* charPtr = (const char*)buffer;
|
||||
|
||||
DISPLAY("%1i-%-17.17s : %10i ->\r", iterationNb, "(unaligned)", (int)(bufferSize-1));
|
||||
/* timing loop */
|
||||
milliTime = BMK_GetMilliStart();
|
||||
while(BMK_GetMilliStart() == milliTime);
|
||||
milliTime = BMK_GetMilliStart();
|
||||
while(BMK_GetMilliSpan(milliTime) < TIMELOOP)
|
||||
{
|
||||
int i;
|
||||
for (i=0; i<nbh_perloop; i++)
|
||||
{
|
||||
XXH32(charPtr+1, bufferSize-1, 0);
|
||||
}
|
||||
nbHashes += nbh_perloop;
|
||||
}
|
||||
milliTime = BMK_GetMilliSpan(milliTime);
|
||||
if ((double)milliTime < fastestH*nbHashes) fastestH = (double)milliTime/nbHashes;
|
||||
DISPLAY("%1i-%-17.17s : %10i -> %7.1f MB/s\r", iterationNb, "XXH32 (unaligned)", (int)(bufferSize-1), (double)(bufferSize-1) / fastestH / 1000.);
|
||||
}
|
||||
DISPLAY("%-19.19s : %10i -> %7.1f MB/s \n", "XXH32 (unaligned)", (int)(bufferSize-1), (double)(bufferSize-1) / fastestH / 1000.);
|
||||
}
|
||||
BMK_benchHash(localXXH32, "XXH32 unaligned", ((const char*)buffer)+1, bufferSize-1);
|
||||
|
||||
/* Bench XXH64 */
|
||||
{
|
||||
int iterationNb;
|
||||
double fastestH = 100000000.;
|
||||
unsigned long long h64 = 0;
|
||||
BMK_benchHash(localXXH64, "XXH64", buffer, bufferSize);
|
||||
|
||||
DISPLAY("\r%79s\r", ""); /* Clean display line */
|
||||
for (iterationNb = 1; iterationNb <= g_nbIterations; iterationNb++)
|
||||
{
|
||||
int nbHashes = 0;
|
||||
int milliTime;
|
||||
|
||||
DISPLAY("%1i-%-17.17s : %10i ->\r", iterationNb, "XXH64", (int)bufferSize);
|
||||
|
||||
/* Timing loop */
|
||||
milliTime = BMK_GetMilliStart();
|
||||
while(BMK_GetMilliStart() == milliTime);
|
||||
milliTime = BMK_GetMilliStart();
|
||||
while(BMK_GetMilliSpan(milliTime) < TIMELOOP)
|
||||
{
|
||||
int i;
|
||||
for (i=0; i<nbh_perloop; i++)
|
||||
{
|
||||
h64 = XXH64(buffer, bufferSize, 0);
|
||||
}
|
||||
nbHashes+=nbh_perloop;
|
||||
}
|
||||
milliTime = BMK_GetMilliSpan(milliTime);
|
||||
if ((double)milliTime < fastestH*nbHashes) fastestH = (double)milliTime/nbHashes;
|
||||
DISPLAY("%1i-%-17.17s : %10i -> %7.1f MB/s\r", iterationNb, "XXH64", (int)bufferSize, (double)bufferSize / fastestH / 1000.);
|
||||
}
|
||||
{
|
||||
DISPLAY("%-19.19s : %10i -> %7.1f MB/s 0x", "XXH64", (int)bufferSize, (double)bufferSize / fastestH / 1000.);
|
||||
DISPLAY("%08X%08X", (U32)(h64 >> 32), (U32)h64);
|
||||
DISPLAY("\n");
|
||||
}
|
||||
}
|
||||
/* Bench XXH64 on Unaligned input */
|
||||
if (bufferSize>1)
|
||||
BMK_benchHash(localXXH64, "XXH64 unaligned", ((const char*)buffer)+1, bufferSize-1);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user