Skip to content

Commit

Permalink
Clean-up Benchmark_Context and hide implementation details
Browse files Browse the repository at this point in the history
  • Loading branch information
cz4rs committed Feb 6, 2023
1 parent 1b2d07a commit 9126797
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 64 deletions.
45 changes: 39 additions & 6 deletions core/perf_test/Benchmark_Context.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,17 +44,50 @@

#include <Benchmark_Context.hpp>

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
68 changes: 10 additions & 58 deletions core/perf_test/Benchmark_Context.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 9126797

Please sign in to comment.