Add more benchmarks, add subcount option

This commit is contained in:
2025-10-13 11:17:11 +03:00
parent 35b2e71753
commit 3f7b872f0f
20 changed files with 1479 additions and 22 deletions

285
bench/tests/BenchMat4f.c Normal file
View File

@@ -0,0 +1,285 @@
#include <BH/Bench.h>
#include <BH/Math/Mat4f.h>
static float matA[16] =
{
1.0f, 0.2f, 0.0f, 0.0f,
0.1f, 1.5f, 0.3f, 0.0f,
0.0f, 0.0f, 2.0f, 0.0f,
1.0f, 2.0f, 3.0f, 1.0f
};
static float matB[16] =
{
0.9f, 0.0f, 0.1f, 0.0f,
0.0f, 1.1f, 0.0f, 0.0f,
0.2f, 0.3f, 0.8f, 0.0f,
0.5f, 1.0f, 1.5f, 1.0f
};
static float outMat[16];
static float outInv[16];
static float vec4[4] = {1.0f, 2.0f, 3.0f, 1.0f};
static float vec3[3] = {4.0f, 5.0f, 6.0f};
static float outVec4[4];
static float outVec3[3];
static float quat[4] = {0.707f, 0.0f, 0.0f, 0.707f};
static float axis[3] = {0.577f, 0.577f, 0.577f};
static float camPos[3] = {0.0f, 0.0f, 5.0f};
static float camAt[3] = {0.0f, 0.0f, 0.0f};
static float camUp[3] = {0.0f, 1.0f, 0.0f};
BH_BENCH_TEST(Identity)
{
while (BH_BenchIter(state))
{
BH_Mat4fIdentity(outMat);
BH_BenchDoNotOptimize(outMat);
}
}
BH_BENCH_TEST(Add)
{
while (BH_BenchIter(state))
{
BH_Mat4fAdd(matA, matB, outMat);
BH_BenchDoNotOptimize(outMat);
}
}
BH_BENCH_TEST(Sub)
{
while (BH_BenchIter(state))
{
BH_Mat4fSub(matA, matB, outMat);
BH_BenchDoNotOptimize(outMat);
}
}
BH_BENCH_TEST(Mul)
{
while (BH_BenchIter(state))
{
BH_Mat4fMul(matA, matB, outMat);
BH_BenchDoNotOptimize(outMat);
}
}
BH_BENCH_TEST(Scale)
{
while (BH_BenchIter(state))
{
BH_Mat4fScale(matA, 1.5f, outMat);
BH_BenchDoNotOptimize(outMat);
}
}
BH_BENCH_TEST(Transpose)
{
while (BH_BenchIter(state))
{
BH_Mat4fTranspose(matA, outMat);
BH_BenchDoNotOptimize(outMat);
}
}
BH_BENCH_TEST(Trace)
{
while (BH_BenchIter(state))
{
float trace;
trace = BH_Mat4fTrace(matA);
BH_BenchDoNotOptimize(trace);
}
}
BH_BENCH_TEST(Det)
{
while (BH_BenchIter(state))
{
float det;
det = BH_Mat4fDet(matA);
BH_BenchDoNotOptimize(det);
}
}
BH_BENCH_TEST(Inverse)
{
while (BH_BenchIter(state))
{
int result;
result = BH_Mat4fInverse(matA, outInv);
BH_BenchDoNotOptimize(result);
BH_BenchDoNotOptimize(outInv);
}
}
BH_BENCH_TEST(FromScale)
{
while (BH_BenchIter(state))
{
BH_Mat4fFromScale(2.0f, 3.0f, 4.0f, outMat);
BH_BenchDoNotOptimize(outMat);
}
}
BH_BENCH_TEST(FromTranslation)
{
while (BH_BenchIter(state))
{
BH_Mat4fFromTranslation(1.0f, -1.0f, 2.5f, outMat);
BH_BenchDoNotOptimize(outMat);
}
}
BH_BENCH_TEST(FromRotationX)
{
while (BH_BenchIter(state))
{
BH_Mat4fFromRotationX(0.7854f, outMat);
BH_BenchDoNotOptimize(outMat);
}
}
BH_BENCH_TEST(FromRotationY)
{
while (BH_BenchIter(state))
{
BH_Mat4fFromRotationY(0.7854f, outMat);
BH_BenchDoNotOptimize(outMat);
}
}
BH_BENCH_TEST(FromRotationZ)
{
while (BH_BenchIter(state))
{
BH_Mat4fFromRotationZ(0.7854f, outMat);
BH_BenchDoNotOptimize(outMat);
}
}
BH_BENCH_TEST(FromAxis)
{
while (BH_BenchIter(state))
{
BH_Mat4fFromAxis(axis, 1.0472f, outMat);
BH_BenchDoNotOptimize(outMat);
}
}
BH_BENCH_TEST(FromEuler)
{
while (BH_BenchIter(state))
{
BH_Mat4fFromEuler(0.3f, 0.4f, 0.5f, outMat);
BH_BenchDoNotOptimize(outMat);
}
}
BH_BENCH_TEST(FromQuat4f)
{
while (BH_BenchIter(state))
{
BH_Mat4fFromQuat4f(quat, outMat);
BH_BenchDoNotOptimize(outMat);
}
}
BH_BENCH_TEST(FromOrtho)
{
while (BH_BenchIter(state))
{
BH_Mat4fFromOrtho(-4.0f, 4.0f, -3.0f, 3.0f, 0.1f, 100.0f, outMat);
BH_BenchDoNotOptimize(outMat);
}
}
BH_BENCH_TEST(FromFrustum)
{
while (BH_BenchIter(state))
{
BH_Mat4fFromFrustum(60.0f, 1.77f, 0.1f, 100.0f, outMat);
BH_BenchDoNotOptimize(outMat);
}
}
BH_BENCH_TEST(FromLookAt)
{
while (BH_BenchIter(state))
{
BH_Mat4fFromLookAt(camPos, camAt, camUp, outMat);
BH_BenchDoNotOptimize(outMat);
}
}
BH_BENCH_TEST(ApplyVec4f)
{
while (BH_BenchIter(state))
{
BH_Mat4fApplyVec4f(matA, vec4, outVec4);
BH_BenchDoNotOptimize(outVec4);
}
}
BH_BENCH_TEST(ApplyVec3f)
{
while (BH_BenchIter(state))
{
BH_Mat4fApplyVec3f(matA, vec3, outVec3);
BH_BenchDoNotOptimize(outVec3);
}
}
int main(int argc, char **argv)
{
BH_UNUSED(argc);
BH_UNUSED(argv);
BH_BENCH_ADD(Identity);
BH_BENCH_ADD(Add);
BH_BENCH_ADD(Sub);
BH_BENCH_ADD(Mul);
BH_BENCH_ADD(Scale);
BH_BENCH_ADD(Transpose);
BH_BENCH_ADD(Trace);
BH_BENCH_ADD(Det);
BH_BENCH_ADD(Inverse);
BH_BENCH_ADD(FromScale);
BH_BENCH_ADD(FromTranslation);
BH_BENCH_ADD(FromRotationX);
BH_BENCH_ADD(FromRotationY);
BH_BENCH_ADD(FromRotationZ);
BH_BENCH_ADD(FromAxis);
BH_BENCH_ADD(FromEuler);
BH_BENCH_ADD(FromQuat4f);
BH_BENCH_ADD(FromOrtho);
BH_BENCH_ADD(FromFrustum);
BH_BENCH_ADD(FromLookAt);
BH_BENCH_ADD(ApplyVec4f);
BH_BENCH_ADD(ApplyVec3f);
return BH_BenchRun();
}