-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #41 from CExA-project/add-benchmark
Add benchmark
- Loading branch information
Showing
21 changed files
with
908 additions
and
33 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
//@HEADER | ||
// ************************************************************************ | ||
// | ||
// Kokkos v. 4.0 | ||
// Copyright (2022) National Technology & Engineering | ||
// Solutions of Sandia, LLC (NTESS). | ||
// | ||
// Under the terms of Contract DE-NA0003525 with NTESS, | ||
// the U.S. Government retains certain rights in this software. | ||
// | ||
// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://kokkos.org/LICENSE for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//@HEADER | ||
|
||
#ifndef KOKKOSFFT_VERSION_INFO_HPP | ||
#define KOKKOSFFT_VERSION_INFO_HPP | ||
|
||
#include <string_view> | ||
|
||
namespace KokkosFFT { | ||
namespace Impl { | ||
|
||
constexpr std::string_view GIT_BRANCH = R"branch(@GIT_BRANCH@)branch"; | ||
constexpr std::string_view GIT_COMMIT_HASH = "@GIT_COMMIT_HASH@"; | ||
constexpr std::string_view GIT_CLEAN_STATUS = "@GIT_CLEAN_STATUS@"; | ||
constexpr std::string_view GIT_COMMIT_DESCRIPTION = | ||
R"message(@GIT_COMMIT_DESCRIPTION@)message"; | ||
constexpr std::string_view GIT_COMMIT_DATE = "@GIT_COMMIT_DATE@"; | ||
constexpr std::string_view BENCHMARK_VERSION = "@BENCHMARK_VERSION@"; | ||
|
||
} // namespace Impl | ||
} // namespace KokkosFFT | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
#ifndef KOKKOSFFT_CONFIG_H | ||
#define KOKKOSFFT_CONFIG_H | ||
|
||
/* Define the current version of Kokkos Kernels */ | ||
#define KOKKOSFFT_VERSION @KOKKOSFFT_VERSION@ | ||
#define KOKKOSFFT_VERSION_MAJOR @KOKKOSFFT_VERSION_MAJOR@ | ||
#define KOKKOSFFT_VERSION_MINOR @KOKKOSFFT_VERSION_MINOR@ | ||
#define KOKKOSFFT_VERSION_PATCH @KOKKOSFFT_VERSION_PATCH@ | ||
|
||
/* Define if building in debug mode */ | ||
#cmakedefine HAVE_KOKKOSFFT_DEBUG | ||
|
||
#cmakedefine KOKKOSFFT_ENABLE_BENCHMARK | ||
|
||
/* Define this macro if experimental features of KokkosFFT are enabled */ | ||
#cmakedefine HAVE_KOKKOSFFT_EXPERIMENTAL | ||
|
||
/* FFTW */ | ||
#cmakedefine KOKKOSFFT_ENABLE_TPL_FFTW | ||
|
||
/* CUFFT */ | ||
#cmakedefine KOKKOSFFT_ENABLE_TPL_CUFFT | ||
|
||
/* HIPFFT */ | ||
#cmakedefine KOKKOSFFT_ENABLE_TPL_HIPFFT | ||
|
||
/* ONEMKL */ | ||
#cmakedefine KOKKOSFFT_ENABLE_TPL_ONEMKL | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
ARG BASE=rocm/dev-ubuntu-20.04:5.2 | ||
ARG BASE=rocm/dev-ubuntu-20.04:5.4 | ||
FROM $BASE | ||
|
||
ARG ADDITIONAL_PACKAGES | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,8 @@ | ||
add_subdirectory(src) | ||
if(BUILD_TESTING) | ||
add_subdirectory(unit_test) | ||
endif() | ||
|
||
if(KokkosFFT_ENABLE_BENCHMARK) | ||
add_subdirectory(perf_test) | ||
endif() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
/* | ||
//@HEADER | ||
// ************************************************************************ | ||
// | ||
// Kokkos v. 4.0 | ||
// Copyright (2022) National Technology & Engineering | ||
// Solutions of Sandia, LLC (NTESS). | ||
// | ||
// Under the terms of Contract DE-NA0003525 with NTESS, | ||
// the U.S. Government retains certain rights in this software. | ||
// | ||
// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://kokkos.org/LICENSE for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//@HEADER | ||
*/ | ||
|
||
#include <benchmark/benchmark.h> | ||
|
||
#include "Benchmark_Context.hpp" | ||
#include <Kokkos_Core.hpp> | ||
|
||
int main(int argc, char** argv) { | ||
Kokkos::initialize(argc, argv); | ||
{ | ||
benchmark::Initialize(&argc, argv); | ||
benchmark::SetDefaultTimeUnit(benchmark::kSecond); | ||
KokkosFFTBenchmark::add_benchmark_context(true); | ||
|
||
benchmark::RunSpecifiedBenchmarks(); | ||
|
||
benchmark::Shutdown(); | ||
} | ||
Kokkos::finalize(); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
#ifndef KOKKOSFFT_BENCHMARK_CONTEXT_HPP | ||
#define KOKKOSFFT_BENCHMARK_CONTEXT_HPP | ||
|
||
#include <cstdlib> | ||
#include <string> | ||
|
||
#include <benchmark/benchmark.h> | ||
|
||
#include <Kokkos_Core.hpp> | ||
#include "KokkosFFT_PrintConfiguration.hpp" | ||
#include <KokkosFFT_Version_Info.hpp> | ||
|
||
namespace KokkosFFTBenchmark { | ||
/// \brief Remove unwanted spaces and colon signs from input string. In case of | ||
/// invalid input it will return an empty string. | ||
inline 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 | ||
inline void add_kokkos_configuration(bool verbose) { | ||
std::ostringstream msg; | ||
Kokkos::print_configuration(msg, verbose); | ||
KokkosFFT::print_configuration(msg); | ||
|
||
// 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 Kokkos Kernels git info and google benchmark release to | ||
/// benchmark context. | ||
inline void add_version_info() { | ||
using namespace KokkosFFT::Impl; | ||
|
||
if (!GIT_BRANCH.empty()) { | ||
benchmark::AddCustomContext("GIT_BRANCH", std::string(GIT_BRANCH)); | ||
benchmark::AddCustomContext("GIT_COMMIT_HASH", | ||
std::string(GIT_COMMIT_HASH)); | ||
benchmark::AddCustomContext("GIT_CLEAN_STATUS", | ||
std::string(GIT_CLEAN_STATUS)); | ||
benchmark::AddCustomContext("GIT_COMMIT_DESCRIPTION", | ||
std::string(GIT_COMMIT_DESCRIPTION)); | ||
benchmark::AddCustomContext("GIT_COMMIT_DATE", | ||
std::string(GIT_COMMIT_DATE)); | ||
} | ||
if (!BENCHMARK_VERSION.empty()) { | ||
benchmark::AddCustomContext("GOOGLE_BENCHMARK_VERSION", | ||
std::string(BENCHMARK_VERSION)); | ||
} | ||
} | ||
|
||
inline void add_env_info() { | ||
auto num_threads = std::getenv("OMP_NUM_THREADS"); | ||
if (num_threads) { | ||
benchmark::AddCustomContext("OMP_NUM_THREADS", num_threads); | ||
} | ||
auto dynamic = std::getenv("OMP_DYNAMIC"); | ||
if (dynamic) { | ||
benchmark::AddCustomContext("OMP_DYNAMIC", dynamic); | ||
} | ||
auto proc_bind = std::getenv("OMP_PROC_BIND"); | ||
if (proc_bind) { | ||
benchmark::AddCustomContext("OMP_PROC_BIND", proc_bind); | ||
} | ||
auto places = std::getenv("OMP_PLACES"); | ||
if (places) { | ||
benchmark::AddCustomContext("OMP_PLACES", places); | ||
} | ||
} | ||
|
||
/// \brief Gather all context information and add it to benchmark context | ||
inline void add_benchmark_context(bool verbose = false) { | ||
add_kokkos_configuration(verbose); | ||
add_version_info(); | ||
add_env_info(); | ||
} | ||
|
||
/** | ||
* \brief Report throughput and amount of data processed for simple View | ||
* operations | ||
*/ | ||
template <typename InViewType, typename OutViewType> | ||
void report_results(benchmark::State& state, InViewType in, OutViewType out, | ||
double time) { | ||
// data processed in megabytes | ||
const double in_data_processed = | ||
static_cast<double>(in.size() * sizeof(typename InViewType::value_type)) / | ||
1.0e6; | ||
const double out_data_processed = | ||
static_cast<double>(out.size() * | ||
sizeof(typename OutViewType::value_type)) / | ||
1.0e6; | ||
|
||
state.SetIterationTime(time); | ||
state.counters["MB (In)"] = benchmark::Counter(in_data_processed); | ||
state.counters["MB (Out)"] = benchmark::Counter(out_data_processed); | ||
state.counters["GB/s"] = | ||
benchmark::Counter((in_data_processed + out_data_processed) / 1.0e3, | ||
benchmark::Counter::kIsIterationInvariantRate); | ||
} | ||
|
||
} // namespace KokkosFFTBenchmark | ||
|
||
#endif |
Oops, something went wrong.