mirror of
https://github.com/NVIDIA/nvbench.git
synced 2026-04-29 03:01:14 +00:00
Report mean SM clock rate
This commit is contained in:
@@ -54,6 +54,7 @@ measure_cold_base::measure_cold_base(state &exec_state)
|
|||||||
{
|
{
|
||||||
m_cuda_times.reserve(static_cast<std::size_t>(m_min_samples));
|
m_cuda_times.reserve(static_cast<std::size_t>(m_min_samples));
|
||||||
m_cpu_times.reserve(static_cast<std::size_t>(m_min_samples));
|
m_cpu_times.reserve(static_cast<std::size_t>(m_min_samples));
|
||||||
|
m_sm_clock_rates.reserve(static_cast<std::size_t>(m_min_samples));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,6 +84,7 @@ void measure_cold_base::initialize()
|
|||||||
|
|
||||||
m_cuda_times.clear();
|
m_cuda_times.clear();
|
||||||
m_cpu_times.clear();
|
m_cpu_times.clear();
|
||||||
|
m_sm_clock_rates.clear();
|
||||||
|
|
||||||
m_stopping_criterion.initialize(m_criterion_params);
|
m_stopping_criterion.initialize(m_criterion_params);
|
||||||
}
|
}
|
||||||
@@ -94,6 +96,7 @@ void measure_cold_base::record_measurements()
|
|||||||
if (!m_run_once)
|
if (!m_run_once)
|
||||||
{
|
{
|
||||||
auto peak_clock_rate = static_cast<float>(m_state.get_device()->get_sm_default_clock_rate());
|
auto peak_clock_rate = static_cast<float>(m_state.get_device()->get_sm_default_clock_rate());
|
||||||
|
m_sm_clock_rates.push_back(peak_clock_rate);
|
||||||
|
|
||||||
if (m_gpu_frequency.has_throttled(peak_clock_rate, m_throttle_threshold))
|
if (m_gpu_frequency.has_throttled(peak_clock_rate, m_throttle_threshold))
|
||||||
{
|
{
|
||||||
@@ -338,6 +341,17 @@ void measure_cold_base::generate_summaries()
|
|||||||
summ.set_string("hide", "Hidden by default.");
|
summ.set_string("hide", "Hidden by default.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!m_sm_clock_rates.empty())
|
||||||
|
{
|
||||||
|
auto &summ = m_state.add_summary("nv/cold/sm_clock_rate/mean");
|
||||||
|
summ.set_string("name", "Clock Rate");
|
||||||
|
summ.set_string("hint", "frequency");
|
||||||
|
summ.set_string("description", "Mean SM clock rate");
|
||||||
|
summ.set_string("hide", "Hidden by default.");
|
||||||
|
summ.set_float64("value", nvbench::detail::statistics::compute_mean(m_sm_clock_rates.cbegin(),
|
||||||
|
m_sm_clock_rates.cend()));
|
||||||
|
}
|
||||||
|
|
||||||
// Log if a printer exists:
|
// Log if a printer exists:
|
||||||
if (auto printer_opt_ref = m_state.get_benchmark().get_printer(); printer_opt_ref.has_value())
|
if (auto printer_opt_ref = m_state.get_benchmark().get_printer(); printer_opt_ref.has_value())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
|
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include "nvbench/types.cuh"
|
||||||
|
|
||||||
namespace nvbench
|
namespace nvbench
|
||||||
{
|
{
|
||||||
@@ -117,6 +118,7 @@ protected:
|
|||||||
|
|
||||||
std::vector<nvbench::float64_t> m_cuda_times;
|
std::vector<nvbench::float64_t> m_cuda_times;
|
||||||
std::vector<nvbench::float64_t> m_cpu_times;
|
std::vector<nvbench::float64_t> m_cpu_times;
|
||||||
|
std::vector<nvbench::float32_t> m_sm_clock_rates;
|
||||||
|
|
||||||
bool m_max_time_exceeded{};
|
bool m_max_time_exceeded{};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -294,6 +294,10 @@ void markdown_printer::do_print_benchmark_results(const printer_base::benchmark_
|
|||||||
{
|
{
|
||||||
table.add_cell(row, tag, header, this->do_format_item_rate(summ));
|
table.add_cell(row, tag, header, this->do_format_item_rate(summ));
|
||||||
}
|
}
|
||||||
|
else if (hint == "frequency")
|
||||||
|
{
|
||||||
|
table.add_cell(row, tag, header, this->do_format_frequency(summ));
|
||||||
|
}
|
||||||
else if (hint == "bytes")
|
else if (hint == "bytes")
|
||||||
{
|
{
|
||||||
table.add_cell(row, tag, header, this->do_format_bytes(summ));
|
table.add_cell(row, tag, header, this->do_format_bytes(summ));
|
||||||
@@ -399,6 +403,27 @@ std::string markdown_printer::do_format_item_rate(const summary &data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string markdown_printer::do_format_frequency(const nvbench::summary &data)
|
||||||
|
{
|
||||||
|
const auto frequency_hz = data.get_float64("value");
|
||||||
|
if (frequency_hz >= 1e9)
|
||||||
|
{
|
||||||
|
return fmt::format("{:0.3f} GHz", frequency_hz * 1e-9);
|
||||||
|
}
|
||||||
|
else if (frequency_hz >= 1e6)
|
||||||
|
{
|
||||||
|
return fmt::format("{:0.3f} MHz", frequency_hz * 1e-6);
|
||||||
|
}
|
||||||
|
else if (frequency_hz >= 1e3)
|
||||||
|
{
|
||||||
|
return fmt::format("{:0.3f} KHz", frequency_hz * 1e-3);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return fmt::format("{:0.3f} Hz", frequency_hz);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::string markdown_printer::do_format_bytes(const summary &data)
|
std::string markdown_printer::do_format_bytes(const summary &data)
|
||||||
{
|
{
|
||||||
const auto bytes = static_cast<nvbench::float64_t>(data.get_int64("value"));
|
const auto bytes = static_cast<nvbench::float64_t>(data.get_int64("value"));
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ protected:
|
|||||||
virtual std::string do_format_default(const nvbench::summary &data);
|
virtual std::string do_format_default(const nvbench::summary &data);
|
||||||
virtual std::string do_format_duration(const nvbench::summary &seconds);
|
virtual std::string do_format_duration(const nvbench::summary &seconds);
|
||||||
virtual std::string do_format_item_rate(const nvbench::summary &items_per_sec);
|
virtual std::string do_format_item_rate(const nvbench::summary &items_per_sec);
|
||||||
|
virtual std::string do_format_frequency(const nvbench::summary &frequency_hz);
|
||||||
virtual std::string do_format_bytes(const nvbench::summary &bytes);
|
virtual std::string do_format_bytes(const nvbench::summary &bytes);
|
||||||
virtual std::string do_format_byte_rate(const nvbench::summary &bytes_per_sec);
|
virtual std::string do_format_byte_rate(const nvbench::summary &bytes_per_sec);
|
||||||
virtual std::string do_format_sample_size(const nvbench::summary &count);
|
virtual std::string do_format_sample_size(const nvbench::summary &count);
|
||||||
|
|||||||
Reference in New Issue
Block a user