diff options
| author | Mattias Andrée <maandree@kth.se> | 2016-05-02 13:22:15 +0200 |
|---|---|---|
| committer | Mattias Andrée <maandree@kth.se> | 2016-05-02 13:22:15 +0200 |
| commit | 858dd62f18b2c1605d3c961bee51df944af43d4f (patch) | |
| tree | 1d80538ed21e33c1514214a6aef0a769cd04261c /bench | |
| parent | Update STATUS (diff) | |
| download | libzahl-858dd62f18b2c1605d3c961bee51df944af43d4f.tar.gz libzahl-858dd62f18b2c1605d3c961bee51df944af43d4f.tar.bz2 libzahl-858dd62f18b2c1605d3c961bee51df944af43d4f.tar.xz | |
benchmarking: add ability to choose cpu, and add 1D functions to benchmark-func
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to '')
| -rw-r--r-- | bench/benchmark-func.c | 38 | ||||
| -rw-r--r-- | bench/benchmark.h | 11 |
2 files changed, 45 insertions, 4 deletions
diff --git a/bench/benchmark-func.c b/bench/benchmark-func.c index 15af698..6c33d11 100644 --- a/bench/benchmark-func.c +++ b/bench/benchmark-func.c @@ -92,6 +92,29 @@ gettime(size_t m) #endif +#define FUNCTION_1D(NAME, INSTRUCTION, PREINSTRUCTION)\ + static void\ + NAME(z_t *as, z_t* bs, struct function *f)\ + {\ + size_t i, j;\ + PREINSTRUCTION;\ + i = f->measurements;\ + while (i--) {\ + (void)INSTRUCTION;\ + (void)INSTRUCTION;\ + j = f->runs;\ + TIC;\ + while (j--) {\ + (void)INSTRUCTION;\ + }\ + TOC;\ + measurements[i] = TICKS;\ + }\ + printf("%llu\n", gettime(f->measurements));\ + (void) as;\ + (void) bs;\ + } + #define FUNCTION_2D(NAME, INSTRUCTION, PREINSTRUCTION)\ static void\ NAME(z_t *as, z_t* bs, struct function *f)\ @@ -122,9 +145,15 @@ gettime(size_t m) (void) bs;\ } +#define FAST1D() 0, 0, 0, 0, 0, 0, 0, 0, 1000, M_MAX #define FAST2D(P) 1, 4097, 64, 0, 0, 0, P, 0, 1000, M_MAX #define SLOW2D(P) 1, 4097, 64, 0, 0, 0, P, 0, 10, 20 +#define LIST_1D_FUNCTIONS\ + X(pos_zseti, FAST1D(), zseti(temp, 1000000000LL),)\ + X(zseti, FAST1D(), zseti(temp, -1000000000LL),)\ + X(zsetu, FAST1D(), zsetu(temp, 1000000000ULL),) + #define LIST_2D_FUNCTIONS\ X(zset, FAST2D(FULL), zset(temp, *a),)\ X(zneg, FAST2D(FULL), zneg(temp, *a),)\ @@ -194,13 +223,16 @@ gettime(size_t m) zdivmod */ - +#define X(FN, A, F1, F2) FUNCTION_1D(bench_##FN, F1, F2) +LIST_1D_FUNCTIONS +#undef X #define X(FN, A, F1, F2) FUNCTION_2D(bench_##FN, F1, F2) LIST_2D_FUNCTIONS #undef X struct function functions[] = { #define X(FN, A, F1, F2) {#FN, bench_##FN, A}, +LIST_1D_FUNCTIONS LIST_2D_FUNCTIONS #undef X {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} @@ -291,9 +323,11 @@ main(int argc, char *argv[]) printf("3\n%zu %zu %zu\n%zu %zu %zu\n", fs->a_start, fs->a_end, fs->a_step, fs->b_start, fs->b_end, fs->b_step); - } else { + } else if (fs->a_end) { as = create_ints(fs->a_start, fs->a_end, fs->a_mode); printf("2\n%zu %zu %zu\n", fs->a_start, fs->a_end, fs->a_step); + } else { + printf("1\n"); } fs->f(as, bs, fs); diff --git a/bench/benchmark.h b/bench/benchmark.h index 92f9809..63ca1ff 100644 --- a/bench/benchmark.h +++ b/bench/benchmark.h @@ -3,6 +3,7 @@ # include <sched.h> #endif +#include <limits.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -21,6 +22,10 @@ # define LIBRARY_SUFFIX "" #endif +#ifndef USE_CPU +# define USE_CPU 0 +#endif + #ifndef CLOCK_MONOTONIC_RAW # define CLOCK_MONOTONIC_RAW CLOCK_MONOTONIC @@ -122,12 +127,14 @@ benchmark_init(void) FILE *f; char *line = 0; size_t size = 0; + char path[PATH_MAX]; # endif CPU_ZERO(&cpuset); - CPU_SET(0, &cpuset); + CPU_SET(USE_CPU, &cpuset); sched_setaffinity(getpid(), sizeof(cpuset), &cpuset); # if defined(USE_RDTSC) - f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq", "r"); + sprintf(path, "/sys/devices/system/cpu/cpu%i/cpufreq/cpuinfo_max_freq", USE_CPU); + f = fopen(path, "r"); if (getline(&line, &size, f) < 0) abort(); fclose(f); |
