diff options
author | Mitya Selivanov <automainint@guattari.tech> | 2023-03-26 18:55:32 +0200 |
---|---|---|
committer | Mitya Selivanov <automainint@guattari.tech> | 2023-03-26 18:55:32 +0200 |
commit | b17726fe51a1c7c1eccaef2e90cbab7ee022557f (patch) | |
tree | 35592b87b30feacbdf12819b808679d6d4b51057 | |
parent | 6b911aca700eebcbff4e7369b117731a8f3e2a71 (diff) | |
download | kit-b17726fe51a1c7c1eccaef2e90cbab7ee022557f.zip |
[benchmarks] DO_NOT_OPTIMIZE macro
-rw-r--r-- | source/kit_test/bench.h | 9 | ||||
-rw-r--r-- | source/test/unittests/foo.bench.c | 16 |
2 files changed, 23 insertions, 2 deletions
diff --git a/source/kit_test/bench.h b/source/kit_test/bench.h index 131d89d..6c701bb 100644 --- a/source/kit_test/bench.h +++ b/source/kit_test/bench.h @@ -73,12 +73,21 @@ void kit_bench_register(char const *name, char const *file, kit_bench_end_fn_(kit_bench_index_); \ } +/* FIXME + */ +#define KIT_DO_NOT_OPTIMIZE(x) \ + do { \ + volatile void *bench_ptr_ = &(x); \ + (void) bench_ptr_; \ + } while (0) + int kit_run_benchmarks(int argc, char **argv); #ifndef KIT_DISABLE_SHORT_NAMES # define BENCHMARK KIT_BENCHMARK # define BENCHMARK_BEGIN KIT_BENCHMARK_BEGIN # define BENCHMARK_END KIT_BENCHMARK_END +# define DO_NOT_OPTIMIZE KIT_DO_NOT_OPTIMIZE # define bench_register kit_bench_register # define run_benchmarks kit_run_benchmarks diff --git a/source/test/unittests/foo.bench.c b/source/test/unittests/foo.bench.c index 531f1d8..a3d5c18 100644 --- a/source/test/unittests/foo.bench.c +++ b/source/test/unittests/foo.bench.c @@ -1,11 +1,23 @@ #define KIT_BENCH_FILE foo #include "../../kit_test/bench.h" +struct test_foo_ { + double f; +}; + BENCHMARK("foo") { BENCHMARK_BEGIN; { - volatile int x = 0; - for (int i = 0; i < 200000; i++) x++; + int x = 0; + struct test_foo_ f = { 0. }; + + for (int i = 0; i < 100000; i++) { + x += (1 << 1); + x ^= i; + f.f += 0.1; + } + DO_NOT_OPTIMIZE(x); + DO_NOT_OPTIMIZE(f); } BENCHMARK_END; } |