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