Jelajahi Sumber

Added more math benchmarks.

Branimir Karadžić 8 tahun lalu
induk
melakukan
4b676b011c
1 mengubah file dengan 40 tambahan dan 43 penghapusan
  1. 40 43
      tests/math_bench.cpp

+ 40 - 43
tests/math_bench.cpp

@@ -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");
 }