diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2024-05-14 14:02:58 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2024-05-14 14:02:58 +0000 |
commit | 131ea0000a6dec7f200d2ef208a4cc30b440d7ce (patch) | |
tree | 6ab8e45947c60a5e567efbff0203a9da483f83b4 | |
parent | 7258c6419b540564f46a5f743f8a25d2ee977b4a (diff) |
Avoid possible compiler optimisation.
-rw-r--r-- | searchlib/src/tests/tensor/distance_functions/distance_functions_benchmark.cpp | 50 |
1 files changed, 32 insertions, 18 deletions
diff --git a/searchlib/src/tests/tensor/distance_functions/distance_functions_benchmark.cpp b/searchlib/src/tests/tensor/distance_functions/distance_functions_benchmark.cpp index f633ea05a5a..15d6040a11a 100644 --- a/searchlib/src/tests/tensor/distance_functions/distance_functions_benchmark.cpp +++ b/searchlib/src/tests/tensor/distance_functions/distance_functions_benchmark.cpp @@ -5,7 +5,7 @@ #include <vespa/searchlib/tensor/distance_functions.h> #include <vespa/searchlib/tensor/distance_function_factory.h> #include <vespa/searchlib/tensor/mips_distance_transform.h> -#include <vespa/vespalib/util/time.h> +#include <vespa/vespalib/util/benchmark_timer.h> #include <vespa/vespalib/util/classname.h> using namespace search::tensor; @@ -16,27 +16,40 @@ using search::attribute::DistanceMetric; size_t npos = std::string::npos; -void run_calc(size_t iterations, TypedCells b, const BoundDistanceFunction & df) __attribute_noinline__; -void run_calc_with_limit(size_t iterations, TypedCells b, const BoundDistanceFunction & df) __attribute_noinline__; +double run_calc(size_t iterations, TypedCells b, const BoundDistanceFunction & df) __attribute_noinline__; +double run_calc_with_limit(size_t iterations, TypedCells b, const BoundDistanceFunction & df) __attribute_noinline__; -void +double run_calc(size_t iterations, TypedCells b, const BoundDistanceFunction & df) { - vespalib::steady_time start = vespalib::steady_clock::now(); - for (size_t i(0); i < iterations; i++) { - df.calc(b); + vespalib::BenchmarkTimer timer(1.0); + double min_result = std::numeric_limits<double>::max(); + while (timer.has_budget()) { + timer.before(); + for (size_t i(0); i < iterations; i++) { + min_result = std::min(df.calc(b), min_result); + } + timer.after(); } - vespalib::duration used = vespalib::steady_clock::now() - start; - printf("%s::calc: Time used = %1.3f\n", vespalib::getClassName(df).c_str(), vespalib::to_s(used)); + printf("%s::calc: Time used = %1.3f, min_result=%3.3f\n", + vespalib::getClassName(df).c_str(), timer.min_time(), min_result); + return min_result; } -void +double run_calc_with_limit(size_t iterations, TypedCells b, const BoundDistanceFunction & df) { - vespalib::steady_time start = vespalib::steady_clock::now(); - for (size_t i(0); i < iterations; i++) { - df.calc_with_limit(b, std::numeric_limits<double>::max()); + vespalib::BenchmarkTimer timer(1.0); + double min_result = std::numeric_limits<double>::max(); + while (timer.has_budget()) { + timer.before(); + for (size_t i(0); i < iterations; i++) { + min_result = std::min(df.calc_with_limit(b, std::numeric_limits<double>::max()), min_result); + } + timer.after(); } - vespalib::duration used = vespalib::steady_clock::now() - start; - printf("%s::calc_with_limit: Time used = %1.3f\n", vespalib::getClassName(df).c_str(), vespalib::to_s(used)); + + printf("%s::calc_with_limit: Time used = %1.3f, min_result=%3.3f\n", + vespalib::getClassName(df).c_str(), timer.min_time(), min_result); + return min_result; } template<typename T> @@ -54,8 +67,9 @@ void benchmark(size_t iterations, size_t elems, const DistanceFunctionFactory & } TypedCells a_cells(av), b_cells(bv); - run_calc(iterations, b_cells, *df.for_query_vector(a_cells)); - run_calc_with_limit(iterations, b_cells, *df.for_query_vector(a_cells)); + double calc_result = run_calc(iterations, b_cells, *df.for_query_vector(a_cells)); + double calc_with_limit_result = run_calc_with_limit(iterations, b_cells, *df.for_query_vector(a_cells)); + assert(calc_result == calc_with_limit_result); } template<typename T> @@ -112,4 +126,4 @@ main(int argc, char *argv[]) { benchmark(num_iterations, num_elems, dist_functions, data_types); return 0; -}
\ No newline at end of file +} |