From 9126797fe287b94832ec8f07bdfcc930492ae2d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cezary=20Skrzy=C5=84ski?= Date: Mon, 19 Sep 2022 12:20:24 +0200 Subject: [PATCH] Clean-up Benchmark_Context and hide implementation details --- core/perf_test/Benchmark_Context.cpp | 45 +++++++++++++++--- core/perf_test/Benchmark_Context.hpp | 68 ++++------------------------ 2 files changed, 49 insertions(+), 64 deletions(-) diff --git a/core/perf_test/Benchmark_Context.cpp b/core/perf_test/Benchmark_Context.cpp index ebca0964cf..7cb0079fd9 100644 --- a/core/perf_test/Benchmark_Context.cpp +++ b/core/perf_test/Benchmark_Context.cpp @@ -44,17 +44,50 @@ #include -namespace Test { +namespace KokkosBenchmark { /** - * \brief Mark the label as a figure of merit. + * \brief Remove unwanted spaces and colon signs from input string. In case of + * invalid input it will return an empty string. */ -std::string benchmark_fom(const std::string& label) { return "FOM: " + label; } +std::string remove_unwanted_characters(const std::string& str) { + auto from = str.find_first_not_of(" :"); + auto to = str.find_last_not_of(" :"); -void add_benchmark_context(bool verbose) { + if (from == std::string::npos || to == std::string::npos) { + return ""; + } + + // return extracted part of string without unwanted spaces and colon signs + return str.substr(from, to + 1); +} + +/** + * \brief Extract all key:value pairs from kokkos configuration and add it to + * the benchmark context + */ +void add_kokkos_configuration(bool verbose) { std::ostringstream msg; Kokkos::print_configuration(msg, verbose); - benchmark::AddCustomContext("Kokkos configuration", msg.str()); + + // Iterate over lines returned from kokkos and extract key:value pairs + std::stringstream ss{msg.str()}; + for (std::string line; std::getline(ss, line, '\n');) { + auto found = line.find_first_of(':'); + if (found != std::string::npos) { + auto val = remove_unwanted_characters(line.substr(found + 1)); + // Ignore line without value, for example a category name + if (!val.empty()) { + benchmark::AddCustomContext( + remove_unwanted_characters(line.substr(0, found)), val); + } + } + } +} + +void add_benchmark_context(bool verbose) { + // Add Kokkos configuration to benchmark context data + add_kokkos_configuration(verbose); } -} // namespace Test +} // namespace KokkosBenchmark diff --git a/core/perf_test/Benchmark_Context.hpp b/core/perf_test/Benchmark_Context.hpp index af61f0c014..55d95d9395 100644 --- a/core/perf_test/Benchmark_Context.hpp +++ b/core/perf_test/Benchmark_Context.hpp @@ -34,64 +34,16 @@ namespace KokkosBenchmark { -std::string benchmark_fom(const std::string& label); - -/// \brief Remove unwanted spaces and colon signs from input string. In case of -/// invalid input it will return an empty string. -std::string remove_unwanted_characters(std::string str) { - auto from = str.find_first_not_of(" :"); - auto to = str.find_last_not_of(" :"); - - if (from == std::string::npos || to == std::string::npos) { - return ""; - } - - // return extracted part of string without unwanted spaces and colon signs - return str.substr(from, to + 1); -} - -/// \brief Extract all key:value pairs from kokkos configuration and add it to -/// the benchmark context -void add_kokkos_configuration(bool verbose) { - std::ostringstream msg; - Kokkos::print_configuration(msg, verbose); - - // Iterate over lines returned from kokkos and extract key:value pairs - std::stringstream ss{msg.str()}; - for (std::string line; std::getline(ss, line, '\n');) { - auto found = line.find_first_of(':'); - if (found != std::string::npos) { - auto val = remove_unwanted_characters(line.substr(found + 1)); - // Ignore line without value, for example a category name - if (!val.empty()) { - benchmark::AddCustomContext( - remove_unwanted_characters(line.substr(0, found)), val); - } - } - } -} - -/// \brief Add all data related to git to benchmark context -void add_git_info() { - if (!Kokkos::Impl::GIT_BRANCH.empty()) { - benchmark::AddCustomContext("GIT_BRANCH", Kokkos::Impl::GIT_BRANCH); - benchmark::AddCustomContext("GIT_COMMIT_HASH", - Kokkos::Impl::GIT_COMMIT_HASH); - benchmark::AddCustomContext("GIT_CLEAN_STATUS", - Kokkos::Impl::GIT_CLEAN_STATUS); - benchmark::AddCustomContext("GIT_COMMIT_DESCRIPTION", - Kokkos::Impl::GIT_COMMIT_DESCRIPTION); - benchmark::AddCustomContext("GIT_COMMIT_DATE", - Kokkos::Impl::GIT_COMMIT_DATE); - } -} - -/// \brief Gather all context information and add it to benchmark context data -void add_benchmark_context(bool verbose = false) { - // Add Kokkos configuration to benchmark context data - add_kokkos_configuration(verbose); - // Add git information to benchmark context data - add_git_info(); +/** + * \brief Gather all context information and add it to benchmark context data + */ +void add_benchmark_context(bool verbose = false); + +/** + * \brief Mark the label as a figure of merit. + */ +inline std::string benchmark_fom(const std::string& label) { + return "FOM: " + label; } } // namespace KokkosBenchmark