diff --git a/tests/math_bench.cpp b/tests/math_bench.cpp index b461fe7..b2dd585 100644 --- a/tests/math_bench.cpp +++ b/tests/math_bench.cpp @@ -9,63 +9,60 @@ #include +typedef float (*MathFn)(float); + + +template +float mathTest(const char* _name) +{ + bx::WriterI* writer = bx::getStdOut(); + int64_t elapsed = -bx::getHPCounter(); + + float result = 0.0f; + const float max = 1389.0f; + + for (float xx = 0.0f; xx < max; xx += 0.1f) + { + result += mfn(xx); + } + + elapsed += bx::getHPCounter(); + bx::writePrintf(writer, "%-20s: %15f\n", _name, double(elapsed) ); + + return result; +} + void math_bench() { bx::WriterI* writer = bx::getStdOut(); bx::writePrintf(writer, "Math bench\n\n"); - float result = 0.0f; - float max = 1389.0f; + mathTest< ::sqrtf >("::sqrtf"); + mathTest("bx::sqrtRef"); + mathTest("bx::sqrtSimd"); + mathTest("bx::sqrt"); - { - int64_t elapsed = -bx::getHPCounter(); + bx::writePrintf(writer, "\n"); + mathTest< ::sinf >("::sinf"); + mathTest("bx::sin"); - result = 0.0f; - for (float xx = 0.0f; xx < max; xx += 0.1f) - { - result += ::sqrtf(xx); - } + bx::writePrintf(writer, "\n"); + mathTest< ::asinf >("::asinf"); + mathTest("bx::asin"); - elapsed += bx::getHPCounter(); - bx::writePrintf(writer, " ::sqrtf: %15f, %f\n", double(elapsed), result); - } + bx::writePrintf(writer, "\n"); + mathTest< ::cosf >("::cosf"); + mathTest("bx::cos"); - { - int64_t elapsed = -bx::getHPCounter(); + bx::writePrintf(writer, "\n"); + mathTest< ::acosf >("::acosf"); + mathTest("bx::acos"); - result = 0.0f; - for (float xx = 0.0f; xx < max; xx += 0.1f) - { - result += bx::sqrtRef(xx); - } + bx::writePrintf(writer, "\n"); + mathTest< ::tanf >("::tanf"); + mathTest("bx::tan"); - elapsed += bx::getHPCounter(); - bx::writePrintf(writer, " bx::sqrtRef: %15f, %f\n", double(elapsed), result); - } - - { - int64_t elapsed = -bx::getHPCounter(); - - result = 0.0f; - for (float xx = 0.0f; xx < max; xx += 0.1f) - { - result += bx::sqrtSimd(xx); - } - - elapsed += bx::getHPCounter(); - bx::writePrintf(writer, "bx::sqrtSimd: %15f, %f\n", double(elapsed), result); - } - - { - int64_t elapsed = -bx::getHPCounter(); - - result = 0.0f; - for (float xx = 0.0f; xx < max; xx += 0.1f) - { - result += bx::sqrt(xx); - } - - elapsed += bx::getHPCounter(); - bx::writePrintf(writer, " bx::sqrt: %15f, %f\n", double(elapsed), result); - } + bx::writePrintf(writer, "\n"); + mathTest< ::atanf >("::atanf"); + mathTest("bx::atan"); }