From f6106595fd75379982d487196162bea6a6ca0795 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Sun, 27 Mar 2016 18:03:57 +0200 Subject: Add rand(3), lrand(3), and random(3) to zrand MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- bench/benchmark-zrand.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++ bench/benchmark.c | 4 ++-- 2 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 bench/benchmark-zrand.c (limited to 'bench') diff --git a/bench/benchmark-zrand.c b/bench/benchmark-zrand.c new file mode 100644 index 0000000..a7e9fb4 --- /dev/null +++ b/bench/benchmark-zrand.c @@ -0,0 +1,63 @@ +#include +#include + +#include "../zahl.h" + + +#ifndef CLOCK_MONOTONIC_RAW +# define CLOCK_MONOTONIC_RAW CLOCK_MONOTONIC +#endif + + +#define BENCHMARK(INSTRUCTION, FAST)\ + do {\ + i = FAST ? 1000000L : 1000L;\ + clock_gettime(CLOCK_MONOTONIC_RAW, &start);\ + while (i--) {\ + INSTRUCTION;\ + }\ + clock_gettime(CLOCK_MONOTONIC_RAW, &end);\ + end.tv_sec -= start.tv_sec;\ + end.tv_nsec -= start.tv_nsec;\ + if (end.tv_nsec < 0) {\ + end.tv_nsec += 1000000000L;\ + end.tv_sec -= 1;\ + }\ + printf("%s: %lli.%09li %s\n",\ + #INSTRUCTION,\ + (long long int)(end.tv_sec), end.tv_nsec,\ + FAST ? "µs" : "ms");\ + } while (0) + + +int +main(int argc, char *argv[]) +{ + struct timespec start, end; + z_t r, n; + jmp_buf jmp; + size_t i; + + 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; +} diff --git a/bench/benchmark.c b/bench/benchmark.c index d756db8..68084f2 100644 --- a/bench/benchmark.c +++ b/bench/benchmark.c @@ -117,8 +117,8 @@ main(int argc, char *argv[]) BENCHMARK(zsets(c, "5495468234592964023447280368442884381000481887"), 0); BENCHMARK(zstr_length(a, 10), 0); BENCHMARK(zstr(a, buf), 0); - BENCHMARK(zrand(c, FAST_RANDOM, QUASIUNIFORM, a), 0); - BENCHMARK(zrand(c, FAST_RANDOM, UNIFORM, a), 0); + BENCHMARK(zrand(c, DEFAULT_RANDOM, QUASIUNIFORM, a), 0); + BENCHMARK(zrand(c, DEFAULT_RANDOM, UNIFORM, a), 0); BENCHMARK(zptest(d, a, 5), 0); BENCHMARK(zsave(a, buf), 1); BENCHMARK(zload(a, buf), 1); -- cgit v1.2.3-70-g09d2