From: Steinar H. Gunderson Date: Sun, 11 Jan 2009 18:33:32 +0000 (+0100) Subject: Measure CPU seconds instead of wall time, and move the timing functions into a X-Git-Url: https://git.sesse.net/?p=fjl;a=commitdiff_plain;h=4b87e80c1ee4dd6a5d5c13e7b4321a956f53378f Measure CPU seconds instead of wall time, and move the timing functions into a separate module. --- diff --git a/Makefile b/Makefile index 926fa57..c3e6ff7 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,10 @@ CC=gcc CFLAGS=-std=gnu99 -O2 -msse4.1 -g -Wall -Wextra -LDFLAGS=-lm +LDFLAGS=-lm -lrt all: tests -UNSTUFF_TEST_OBJS=unstuff.o unstuff_test.o +UNSTUFF_TEST_OBJS=unstuff.o unstuff_test.o benchmark.o unstuff_test: $(UNSTUFF_TEST_OBJS) $(CC) $(LDFLAGS) -o $@ $(UNSTUFF_TEST_OBJS) @@ -20,7 +20,7 @@ BYTESOURCE_TEST_OBJS=bytesource.o choice.o unstuff.o bytesource_test.o bytesource_test: $(BYTESOURCE_TEST_OBJS) $(CC) $(LDFLAGS) -o $@ $(BYTESOURCE_TEST_OBJS) -IDCT_TEST_OBJS=idct.o idct_test.o +IDCT_TEST_OBJS=idct.o idct_test.o benchmark.o idct_test: $(IDCT_TEST_OBJS) $(CC) $(LDFLAGS) -o $@ $(IDCT_TEST_OBJS) diff --git a/idct_test.c b/idct_test.c index e35a17b..cf2556b 100644 --- a/idct_test.c +++ b/idct_test.c @@ -3,9 +3,8 @@ #include #include #include -#include -#include +#include "benchmark.h" #include "idct.h" // Generate random coefficients in the range [-15..15]. @@ -99,17 +98,14 @@ void test_performance(idct_func_t* idct) quant[i] = 1; } - struct timeval start, now; - gettimeofday(&start, NULL); + start_benchmark_timer(); for (unsigned i = 0; i < num_runs; ++i) { (*idct)(coeff, quant, output); } - gettimeofday(&now, NULL); - - double diff = timediff(&start, &now); - printf("%u runs in %.2f seconds = %.2f IDCTs/sec\n", + double diff = stop_benchmark_timer(); + printf("%u runs in %.2f CPU seconds = %.2f IDCTs/sec\n", num_runs, diff, num_runs / diff); } diff --git a/unstuff_test.c b/unstuff_test.c index 863aef5..a5bf92d 100644 --- a/unstuff_test.c +++ b/unstuff_test.c @@ -1,9 +1,8 @@ #include #include #include -#include -#include +#include "benchmark.h" #include "unstuff.h" void test_basic_unstuff(unstuff_func_t* unstuff) @@ -67,12 +66,6 @@ void gen_random_stuffed_data(uint8_t* dst, size_t len) } } -double timediff(const struct timeval* a, const struct timeval* b) -{ - return (double)(b->tv_sec - a->tv_sec) + - (double)(b->tv_usec - a->tv_usec) * 1e-6; -} - void test_performance(unstuff_func_t* unstuff) { const size_t len = 4096; @@ -81,19 +74,16 @@ void test_performance(unstuff_func_t* unstuff) uint8_t src[len], dst[len]; gen_random_stuffed_data(src, len); - struct timeval start, now; - gettimeofday(&start, NULL); + start_benchmark_timer(); for (unsigned i = 0; i < num_runs; ++i) { int ret = unstuff(dst, src, len); assert(ret != -1); } - gettimeofday(&now, NULL); - - double diff = timediff(&start, &now); + double diff = stop_benchmark_timer(); double mb_sec = (len * num_runs) / (1048576.0 * diff); - printf("%u runs with %zu bytes in %.2f seconds = %.2f MB/sec\n", + printf("%u runs with %zu bytes in %.2f CPU seconds = %.2f MB/sec\n", num_runs, len, diff, mb_sec); }