// // Lol Engine — Benchmark program // // Copyright © 2005—2015 Sam Hocevar // // This program is free software. It comes without any warranty, to // the extent permitted by applicable law. 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 the WTFPL Task Force. // See http://www.wtfpl.net/ for more details. // #if HAVE_CONFIG_H # include "config.h" #endif #include #include 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.Get(); for (size_t i = 0; i < REAL_TABLE_SIZE; i++) { real tmp = fib1 + fib2; fib1 = fib2; fib2 = tmp; } result[0] += timer.Get(); real fact = 1.0; timer.Get(); for (size_t i = 0; i < REAL_TABLE_SIZE; i++) fact = fact * real(1.0 + i); result[1] += timer.Get(); real invfact = 1.0; timer.Get(); for (size_t i = 0; i < REAL_TABLE_SIZE; i++) invfact = invfact / real(1.0 + i); result[2] += timer.Get(); timer.Get(); for (size_t i = 0; i < REAL_TABLE_SIZE / 128; i++) sin(real(0.01 * i)); result[3] += timer.Get() * 128; timer.Get(); for (size_t i = 0; i < REAL_TABLE_SIZE / 128; i++) exp((real)(int)(i - REAL_TABLE_SIZE / 256)); result[4] += timer.Get() * 128; } for (size_t i = 0; i < sizeof(result) / sizeof(*result); i++) result[i] *= 1e9f / (REAL_TABLE_SIZE * REAL_RUNS); msg::info(" ns/elem\n"); msg::info("real = real + real %7.3f\n", result[0]); msg::info("real = real * real %7.3f\n", result[1]); msg::info("real = real / real %7.3f\n", result[2]); msg::info("real = sin(real) %7.3f\n", result[3]); msg::info("real = exp(real) %7.3f\n", result[4]); }