I just did a short test, intel skylake i7, gcc 5.4. Only modified your example.c a bit like this:
#include <assert.h>
#include "clhash.h"
int main() {
void * random = get_random_key_for_clhash(UINT64_C(0x23a23cf5033c3c81),UINT64_C(0xb3816f6a2c68e530));
int i;
for (i = 0; i < 10000000; i++)
{
uint64_t hashvalue1 = clhash(random,"my dog0123456789", 12);
uint64_t hashvalue2 = clhash(random,"my cat0123456789", 12);
uint64_t hashvalue3 = clhash(random,"my dog0123456789", 12);
}
// assert(hashvalue1 == hashvalue3);
// assert(hashvalue1 != hashvalue2);// very likely to be true
free(random);
return 0;
}
Tested for string size 6, 7, 8, 12. For 8 byte key I get this:
make example
time ./example
real 0m0.152s
user 0m0.148s
sys 0m0.000s
For the other sizes something like
$ time ./example
real 0m0.493s
user 0m0.492s
sys 0m0.000s
So for really high performance, we are supposed to pad our data and use multiples of 8 for size?
From figure 1 in your paper I had the impression that its would work smooth fast for sizes >= 8 at least.
https://arxiv.org/abs/1503.03465
May there be a bug in recent code?