diff options
| author | Mattias Andrée <maandree@kth.se> | 2016-03-27 18:03:57 +0200 |
|---|---|---|
| committer | Mattias Andrée <maandree@kth.se> | 2016-03-27 18:03:57 +0200 |
| commit | f6106595fd75379982d487196162bea6a6ca0795 (patch) | |
| tree | bea3ebf13a4c7439805c0526801d5583a0cc065e /bench | |
| parent | zrand: add DEFAULT_RANDOM and FASTEST_RANDOM (diff) | |
| download | libzahl-f6106595fd75379982d487196162bea6a6ca0795.tar.gz libzahl-f6106595fd75379982d487196162bea6a6ca0795.tar.bz2 libzahl-f6106595fd75379982d487196162bea6a6ca0795.tar.xz | |
Add rand(3), lrand(3), and random(3) to zrand
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'bench')
| -rw-r--r-- | bench/benchmark-zrand.c | 63 | ||||
| -rw-r--r-- | bench/benchmark.c | 4 |
2 files changed, 65 insertions, 2 deletions
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 <time.h> +#include <stdio.h> + +#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); |
