aboutsummaryrefslogtreecommitdiffstats
path: root/bench/benchmark-zrand.c
blob: b5c3b5b490c09126000021fe657508a765efe68a (plain) (blame)
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
#include "util.h"


#define BENCHMARK(INSTRUCTION, FAST)\
	do {\
		i = FAST ? 1000000L : 1000L;\
		TIC;\
		while (i--) {\
			INSTRUCTION;\
		}\
		TOC;\
		printf("%s: %s %s\n",\
		       #INSTRUCTION, STIME, FAST ? "µs" : "ms");\
	} while (0)


int
main(int argc, char *argv[])
{
	z_t r, n;
	jmp_buf jmp;
	size_t i;

	benchmark_init();

	if (setjmp(jmp)) {
		zperror(argv[0]);
		return 1;
	}
	zsetup(jmp);
	zinit(r);
	zinit(n);

	zsetu(n, 1);
	zlsh(n, n, 64000L - 1L);
	zset(r, n);

	BENCHMARK(zrand(r, FAST_RANDOM, MODUNIFORM, n), 0);
	BENCHMARK(zrand(r, LIBC_RAND_RANDOM, MODUNIFORM, n), 0);
	BENCHMARK(zrand(r, LIBC_RANDOM_RANDOM, MODUNIFORM, n), 0);
	BENCHMARK(zrand(r, LIBC_RAND48_RANDOM, MODUNIFORM, n), 0);

	zfree(r);
	zfree(n);
	zunsetup();
	return 0;
	(void) argc;
}