summaryrefslogtreecommitdiff
path: root/SpeedTest.cpp
blob: dbfadcb80e3da225b8f0a66f4256adce48505a97 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include "SpeedTest.h"

#include "Random.h"

#include <stdio.h>  // for printf
#include <intrin.h> // for __rdtsc

//-----------------------------------------------------------------------------
// 256k blocks seem to give the best results.

void BulkSpeedTest ( pfHash hash )
{
	const int trials = 9999;
	const int blocksize = 256 * 1024;

	printf("Bulk speed test - %d-byte keys\n",blocksize);

	char * block = new char[blocksize + 16];

	rand_p(block,blocksize+16);

	uint32_t temp[16];

	for(int align = 0; align < 8; align++)
	{
		double bestbpc = 0;

		for(int itrial = 0; itrial < trials; itrial++)
		{
			__int64 begin,end;

			begin = __rdtsc();

			hash(block + align,blocksize,itrial,temp);

			end = __rdtsc();

			blackhole(temp[0]);

			double cycles = double(end-begin);
			double bpc = double(blocksize) / cycles;
			if(bpc > bestbpc) bestbpc = bpc;
		}

		double bestbps = (bestbpc * 3000000000.0 / 1048576.0);
		printf("Alignment %2d - %6.3f bytes/cycle - %7.2f MiB/sec @ 3 ghz\n",align,bestbpc,bestbps);
	}

	delete [] block;
}