| @@ -25,7 +25,8 @@ testsuite_LDFLAGS = $(top_builddir)/src/liblol.a @LOL_LIBS@ @PIPI_LIBS@ | |||||
| testsuite_DEPENDENCIES = $(top_builddir)/src/liblol.a | testsuite_DEPENDENCIES = $(top_builddir)/src/liblol.a | ||||
| benchsuite_SOURCES = benchsuite.cpp \ | benchsuite_SOURCES = benchsuite.cpp \ | ||||
| benchmark/matrix.cpp benchmark/half.cpp benchmark/trig.cpp | |||||
| benchmark/matrix.cpp benchmark/half.cpp benchmark/trig.cpp \ | |||||
| benchmark/real.cpp | |||||
| benchsuite_CPPFLAGS = @LOL_CFLAGS@ @PIPI_CFLAGS@ | benchsuite_CPPFLAGS = @LOL_CFLAGS@ @PIPI_CFLAGS@ | ||||
| benchsuite_LDFLAGS = $(top_builddir)/src/liblol.a @LOL_LIBS@ @PIPI_LIBS@ | benchsuite_LDFLAGS = $(top_builddir)/src/liblol.a @LOL_LIBS@ @PIPI_LIBS@ | ||||
| benchsuite_DEPENDENCIES = $(top_builddir)/src/liblol.a | benchsuite_DEPENDENCIES = $(top_builddir)/src/liblol.a | ||||
| @@ -0,0 +1,69 @@ | |||||
| // | |||||
| // Lol Engine - Benchmark program | |||||
| // | |||||
| // Copyright: (c) 2005-2011 Sam Hocevar <sam@hocevar.net> | |||||
| // This program is free software; you can redistribute it and/or | |||||
| // modify it under the terms of the Do What The Fuck You Want To | |||||
| // Public License, Version 2, as published by Sam Hocevar. See | |||||
| // http://sam.zoy.org/projects/COPYING.WTFPL for more details. | |||||
| // | |||||
| #if defined HAVE_CONFIG_H | |||||
| # include "config.h" | |||||
| #endif | |||||
| #include <cstdio> | |||||
| #include "core.h" | |||||
| using namespace std; | |||||
| using namespace lol; | |||||
| static size_t const REAL_TABLE_SIZE = 10000; | |||||
| static size_t const REAL_RUNS = 50; | |||||
| void bench_real(int mode) | |||||
| { | |||||
| float result[12] = { 0.0f }; | |||||
| Timer timer; | |||||
| for (size_t run = 0; run < REAL_RUNS; run++) | |||||
| { | |||||
| switch (mode) | |||||
| { | |||||
| case 1: | |||||
| break; | |||||
| } | |||||
| real fib1 = 1.0, fib2 = 1.0; | |||||
| timer.GetMs(); | |||||
| for (size_t i = 0; i < REAL_TABLE_SIZE; i++) | |||||
| { | |||||
| real tmp = fib1 + fib2; | |||||
| fib1 = fib2; | |||||
| fib2 = tmp; | |||||
| } | |||||
| result[0] += timer.GetMs(); | |||||
| real fact = 1.0; | |||||
| timer.GetMs(); | |||||
| for (size_t i = 0; i < REAL_TABLE_SIZE; i++) | |||||
| fact = fact * real(1.0 + i); | |||||
| result[1] += timer.GetMs(); | |||||
| real invfact = 1.0; | |||||
| timer.GetMs(); | |||||
| for (size_t i = 0; i < REAL_TABLE_SIZE; i++) | |||||
| invfact = invfact / real(1.0 + i); | |||||
| result[2] += timer.GetMs(); | |||||
| } | |||||
| for (size_t i = 0; i < sizeof(result) / sizeof(*result); i++) | |||||
| result[i] *= 1000000.0f / (REAL_TABLE_SIZE * REAL_RUNS); | |||||
| Log::Info(" ns/elem\n"); | |||||
| Log::Info("real = real + real %7.3f\n", result[0]); | |||||
| Log::Info("real = real * real %7.3f\n", result[1]); | |||||
| Log::Info("real = real / real %7.3f\n", result[2]); | |||||
| } | |||||
| @@ -23,12 +23,18 @@ | |||||
| using namespace std; | using namespace std; | ||||
| using namespace lol; | using namespace lol; | ||||
| void bench_real(int mode); | |||||
| void bench_trig(int mode); | void bench_trig(int mode); | ||||
| void bench_matrix(int mode); | void bench_matrix(int mode); | ||||
| void bench_half(int mode); | void bench_half(int mode); | ||||
| int main(int argc, char **argv) | int main(int argc, char **argv) | ||||
| { | { | ||||
| Log::Info("-----------------------\n"); | |||||
| Log::Info(" High precision floats\n"); | |||||
| Log::Info("-----------------------\n"); | |||||
| bench_real(1); | |||||
| Log::Info("--------------------------\n"); | Log::Info("--------------------------\n"); | ||||
| Log::Info(" Trigonometry [-1e5, 1e5]\n"); | Log::Info(" Trigonometry [-1e5, 1e5]\n"); | ||||
| Log::Info("--------------------------\n"); | Log::Info("--------------------------\n"); | ||||