diff options
| -rw-r--r-- | bench/src/Bench.c | 33 | ||||
| -rw-r--r-- | bench/tests/BenchVec.c | 139 | ||||
| -rw-r--r-- | bench/tests/BenchVec3f.c | 33 |
3 files changed, 159 insertions, 46 deletions
diff --git a/bench/src/Bench.c b/bench/src/Bench.c index 613cdbb..07d3236 100644 --- a/bench/src/Bench.c +++ b/bench/src/Bench.c @@ -4,6 +4,9 @@ #include <stdio.h> +#define BATCH_ITERS 1024 + + struct BH_Bench { struct BH_Bench *next; @@ -63,25 +66,29 @@ void BH_BenchAdd(const char *name, int BH_BenchIter(BH_Bench *state) { - if (state->started) - { - int64_t millis; + int64_t millis; - state->iterations++; - millis = BH_TimerMilliseconds(timer); - - if (millis > 1000 && state->iterations > 10) - { - printf("%s\t%f ips\n", state->name, state->iterations / (millis / 1000.0f)); - return 0; - } - } - else + if (!state->started) { state->started = 1; + state->iterations = 0; BH_TimerRestart(timer); + return 1; } + state->iterations++; + if (state->iterations & (BATCH_ITERS - 1)) + return 1; + + millis = BH_TimerMilliseconds(timer); + if (millis > 1000 || state->iterations > 1000000000) + { + float ips, ns; + ips = state->iterations / (millis / 1000.0f); + ns = (millis * 1000000.0) / state->iterations; + printf("%s\t%.2f ips (%.2f ns)\n", state->name, ips, ns); + return 0; + } return 1; } diff --git a/bench/tests/BenchVec.c b/bench/tests/BenchVec.c new file mode 100644 index 0000000..e760748 --- /dev/null +++ b/bench/tests/BenchVec.c @@ -0,0 +1,139 @@ +#include <BH/Bench.h> + +#include <BH/Math/Vec2i.h> +#include <BH/Math/Vec3i.h> +#include <BH/Math/Vec4i.h> +#include <BH/Math/Vec2f.h> +#include <BH/Math/Vec3f.h> +#include <BH/Math/Vec4f.h> +#include <stdlib.h> + + +BH_BENCH_TEST(Vec2i) +{ + int a[2], b[2]; + + a[0] = (rand() % 100); + a[1] = (rand() % 100); + + b[0] = (rand() % 100); + b[1] = (rand() % 100); + + while (BH_BenchIter(state)) + { + BH_Vec2iAdd(a, b, a); + } +} + + +BH_BENCH_TEST(Vec3i) +{ + int a[3], b[3]; + + a[0] = (rand() % 100); + a[1] = (rand() % 100); + a[2] = (rand() % 100); + + b[0] = (rand() % 100); + b[1] = (rand() % 100); + b[2] = (rand() % 100); + + while (BH_BenchIter(state)) + { + BH_Vec3iAdd(a, b, a); + } +} + + +BH_BENCH_TEST(Vec4i) +{ + int a[4], b[4]; + + a[0] = (rand() % 100); + a[1] = (rand() % 100); + a[2] = (rand() % 100); + a[3] = (rand() % 100); + + b[0] = (rand() % 100); + b[1] = (rand() % 100); + b[2] = (rand() % 100); + b[3] = (rand() % 100); + + while (BH_BenchIter(state)) + { + BH_Vec4iAdd(a, b, a); + } +} + + +BH_BENCH_TEST(Vec2f) +{ + float a[2], b[2]; + + a[0] = (rand() % 100) / 200.0; + a[1] = (rand() % 100) / 200.0; + + b[0] = (rand() % 100) / 200.0; + b[1] = (rand() % 100) / 200.0; + + while (BH_BenchIter(state)) + { + BH_Vec2fAdd(a, b, a); + } +} + + +BH_BENCH_TEST(Vec3f) +{ + float a[3], b[3]; + + a[0] = (rand() % 100) / 200.0; + a[1] = (rand() % 100) / 200.0; + a[2] = (rand() % 100) / 200.0; + + b[0] = (rand() % 100) / 200.0; + b[1] = (rand() % 100) / 200.0; + b[2] = (rand() % 100) / 200.0; + + while (BH_BenchIter(state)) + { + BH_Vec3fAdd(a, b, a); + } +} + + +BH_BENCH_TEST(Vec4f) +{ + float a[4], b[4]; + + a[0] = (rand() % 100) / 200.0; + a[1] = (rand() % 100) / 200.0; + a[2] = (rand() % 100) / 200.0; + a[3] = (rand() % 100) / 200.0; + + b[0] = (rand() % 100) / 200.0; + b[1] = (rand() % 100) / 200.0; + b[2] = (rand() % 100) / 200.0; + b[3] = (rand() % 100) / 200.0; + + while (BH_BenchIter(state)) + { + BH_Vec4fAdd(a, b, a); + } +} + + +int main(int argc, char **argv) +{ + BH_UNUSED(argc); + BH_UNUSED(argv); + + BH_BENCH_ADD(Vec2i); + BH_BENCH_ADD(Vec3i); + BH_BENCH_ADD(Vec4i); + BH_BENCH_ADD(Vec2f); + BH_BENCH_ADD(Vec3f); + BH_BENCH_ADD(Vec4f); + + return BH_BenchRun(); +} diff --git a/bench/tests/BenchVec3f.c b/bench/tests/BenchVec3f.c deleted file mode 100644 index d4c0840..0000000 --- a/bench/tests/BenchVec3f.c +++ /dev/null @@ -1,33 +0,0 @@ -#include <BH/Bench.h> -#include <BH/Math/Vec3f.h> -#include <stdlib.h> - - -BH_BENCH_TEST(Vec3f) -{ - float a[3], b[3]; - - a[0] = (rand() % 100) / 200.0; - a[1] = (rand() % 100) / 200.0; - a[2] = (rand() % 100) / 200.0; - - b[0] = (rand() % 100) / 200.0; - b[1] = (rand() % 100) / 200.0; - b[2] = (rand() % 100) / 200.0; - - while (BH_BenchIter(state)) - { - BH_Vec3fAdd(a, b, a); - } -} - - -int main(int argc, char **argv) -{ - BH_UNUSED(argc); - BH_UNUSED(argv); - - BH_BENCH_ADD(Vec3f); - - return BH_BenchRun(); -} |
