diff options
| author | Hunter Kvalevog <hunter@kvog.sh> | 2026-04-03 20:49:17 -0500 |
|---|---|---|
| committer | Hunter Kvalevog <hunter@kvog.sh> | 2026-04-03 20:49:17 -0500 |
| commit | f58bfac1cd6d9789ed0f878058179c8b4adb8b23 (patch) | |
| tree | c2867fe91cc0a7596aec9ca9ba9130e3d6d2a645 /yuvbench/yuvbench.c | |
| parent | f409e568ef60940d5dfb2c3479d43dd19882f780 (diff) | |
Diffstat (limited to 'yuvbench/yuvbench.c')
| -rw-r--r-- | yuvbench/yuvbench.c | 47 |
1 files changed, 34 insertions, 13 deletions
diff --git a/yuvbench/yuvbench.c b/yuvbench/yuvbench.c index 3a92371..669c339 100644 --- a/yuvbench/yuvbench.c +++ b/yuvbench/yuvbench.c @@ -3,6 +3,14 @@ #define KBENCH_IMPLEMENTATION #include "kbench.h" +#include <math.h> + +static int cmp_double(const void* a, const void* b) +{ + double da = *(const double*)a, db = *(const double*)b; + return (da > db) - (da < db); +} + #ifdef YUVBENCH_ACCELERATE Backend yuvbench_accelerate(void); #endif @@ -15,6 +23,9 @@ Backend yuvbench_libyuv(void); #ifdef YUVBENCH_SWSCALE Backend yuvbench_swscale(void); #endif +#ifdef YUVBENCH_CLAUDE +Backend yuvbench_claude(void); +#endif static struct { @@ -70,21 +81,27 @@ static void run_backend(Backend b) b.deinit_fn(&ctx); } - double ts_min = -1.0f; - double ts_max = -1.0f; - double ts_avg = 0.0f; + // Sort for percentiles + qsort(tests_table, tests, sizeof(double), cmp_double); + + double ts_min = tests_table[0]; + double ts_max = tests_table[tests - 1]; + double ts_p50 = tests_table[tests / 2]; + double ts_p95 = tests_table[(int)(tests * 0.95)]; + double ts_p99 = tests_table[(int)(tests * 0.99)]; + double ts_avg = 0.0; + for (int i = 0; i < tests; ++i) ts_avg += tests_table[i] / (double)tests; + double ts_var = 0.0; for (int i = 0; i < tests; ++i) { - if (ts_min < 0 || tests_table[i] < ts_min) { - ts_min = tests_table[i]; - } - if (ts_max < 0 || tests_table[i] > ts_max) { - ts_max = tests_table[i]; - } - ts_avg += (tests_table[i] / (double)tests); + double d = tests_table[i] - ts_avg; + ts_var += d * d / (double)tests; } - printf(" min result: %fms\n", ts_min * 1000.0f); - printf(" max result: %fms\n", ts_max * 1000.0f); - printf(" avg result: %fms\n", ts_avg * 1000.0f); + double ts_stddev = sqrt(ts_var); + + #define MS(t) ((t) * 1000.0) + printf(" min %8.3fms p50 %8.3fms p95 %8.3fms p99 %8.3fms max %8.3fms avg %8.3fms σ %7.3fms\n", + MS(ts_min), MS(ts_p50), MS(ts_p95), MS(ts_p99), MS(ts_max), MS(ts_avg), MS(ts_stddev)); + #undef MS if (G.show) { @@ -204,4 +221,8 @@ int main(int argc, char** argv) printf("YUVBENCH_SWSCALE\n"); run_backend(yuvbench_swscale()); #endif +#ifdef YUVBENCH_CLAUDE + printf("YUVBENCH_CLAUDE\n"); + run_backend(yuvbench_claude()); +#endif } |