diff --git a/src/Benchmark/VectorT.cpp b/src/Benchmark/VectorT.cpp index 6ee3c143..aef6cea1 100644 --- a/src/Benchmark/VectorT.cpp +++ b/src/Benchmark/VectorT.cpp @@ -14,13 +14,27 @@ #define MYBENCHMARK(NAME) BENCHMARK(NAME) #define MYBENCHMARK_TEMPLATE(NAME, TYPE) BENCHMARK_TEMPLATE(NAME, TYPE) +template +static inline +typename std::enable_if::type +testVec() { + return Vec(1.1, 1.2, 1.3); +} + +template +static inline +typename std::enable_if::type +testVec() { + return Vec(1.1, 1.2, 1.3, 1.4); +} + template static void ASSEMBLE(BMPREFIX, Vec_add_compare)(benchmark::State& state) { - Vec v1(0, 0, 0); - Vec v2(1000, 1000, 1000); + Vec v1(0.0); + Vec v2(1000.0); while (state.KeepRunning()) { - v1 += Vec(1.1, 1.2, 1.3); - v2 -= Vec(1.1, 1.2, 1.3); + v1 += testVec(); + v2 -= testVec(); if (v1 == v2) { v1 -= v2; v2 += v1; @@ -33,14 +47,16 @@ static void ASSEMBLE(BMPREFIX, Vec_add_compare)(benchmark::State& state) { MYBENCHMARK_TEMPLATE (ASSEMBLE(BMPREFIX, Vec_add_compare), OpenMesh::Vec3d); MYBENCHMARK_TEMPLATE (ASSEMBLE(BMPREFIX, Vec_add_compare), OpenMesh::Vec3f); +MYBENCHMARK_TEMPLATE (ASSEMBLE(BMPREFIX, Vec_add_compare), OpenMesh::Vec4d); +MYBENCHMARK_TEMPLATE (ASSEMBLE(BMPREFIX, Vec_add_compare), OpenMesh::Vec4f); template static void ASSEMBLE(BMPREFIX, Vec_cross_product)(benchmark::State& state) { - Vec v1(0, 0, 0); - Vec v2(1000, 1000, 1000); + Vec v1(0.0); + Vec v2(1000.0); while (state.KeepRunning()) { - v1 += Vec(1.1, 1.2, 1.3); - v2 -= Vec(1.1, 1.2, 1.3); + v1 += testVec(); + v2 -= testVec(); v1 = (v1 % v2); } // Just so nothing gets optimized away. @@ -53,12 +69,12 @@ MYBENCHMARK_TEMPLATE (ASSEMBLE(BMPREFIX, Vec_cross_product), OpenMesh::Vec3f); template static void ASSEMBLE(BMPREFIX, Vec_scalar_product)(benchmark::State& state) { - Vec v1(0, 0, 0); - Vec v2(1000, 1000, 1000); + Vec v1(0.0); + Vec v2(1000.0); double acc = 0; while (state.KeepRunning()) { - v1 += Vec(1.1, 1.2, 1.3); - v2 -= Vec(1.1, 1.2, 1.3); + v1 += testVec(); + v2 -= testVec(); acc += (v1 | v2); } // Otherwise GCC will optimize everything away. @@ -68,13 +84,15 @@ static void ASSEMBLE(BMPREFIX, Vec_scalar_product)(benchmark::State& state) { MYBENCHMARK_TEMPLATE (ASSEMBLE(BMPREFIX, Vec_scalar_product), OpenMesh::Vec3d); MYBENCHMARK_TEMPLATE (ASSEMBLE(BMPREFIX, Vec_scalar_product), OpenMesh::Vec3f); +MYBENCHMARK_TEMPLATE (ASSEMBLE(BMPREFIX, Vec_scalar_product), OpenMesh::Vec4d); +MYBENCHMARK_TEMPLATE (ASSEMBLE(BMPREFIX, Vec_scalar_product), OpenMesh::Vec4f); template static void ASSEMBLE(BMPREFIX, Vec_norm)(benchmark::State& state) { - Vec v1(0, 0, 0); + Vec v1(0.0); double acc = 0; while (state.KeepRunning()) { - v1 += Vec(1.1, 1.2, 1.3); + v1 += testVec(); acc += v1.norm(); } // Otherwise GCC will optimize everything away. @@ -84,3 +102,5 @@ static void ASSEMBLE(BMPREFIX, Vec_norm)(benchmark::State& state) { MYBENCHMARK_TEMPLATE (ASSEMBLE(BMPREFIX, Vec_norm), OpenMesh::Vec3d); MYBENCHMARK_TEMPLATE (ASSEMBLE(BMPREFIX, Vec_norm), OpenMesh::Vec3f); +MYBENCHMARK_TEMPLATE (ASSEMBLE(BMPREFIX, Vec_norm), OpenMesh::Vec4d); +MYBENCHMARK_TEMPLATE (ASSEMBLE(BMPREFIX, Vec_norm), OpenMesh::Vec4f);