Unverified Commit c517bda7 authored by Paul Fultz II's avatar Paul Fultz II Committed by GitHub
Browse files

Print out time when trace_eval is enabled (#836)



* Add timing to trace eval

* Formatting
Co-authored-by: default avatarmvermeulen <5479696+mvermeulen@users.noreply.github.com>
parent b847e868
...@@ -7,13 +7,23 @@ ...@@ -7,13 +7,23 @@
namespace migraphx { namespace migraphx {
inline namespace MIGRAPHX_INLINE_NS { inline namespace MIGRAPHX_INLINE_NS {
struct timer
{
std::chrono::time_point<std::chrono::steady_clock> start = std::chrono::steady_clock::now();
template <class Duration>
auto record() const
{
auto finish = std::chrono::steady_clock::now();
return std::chrono::duration_cast<Duration>(finish - start).count();
}
};
template <class Duration, class F> template <class Duration, class F>
auto time(F f) auto time(F f)
{ {
auto start = std::chrono::steady_clock::now(); timer t{};
f(); f();
auto finish = std::chrono::steady_clock::now(); return t.record<Duration>();
return std::chrono::duration_cast<Duration>(finish - start).count();
} }
} // namespace MIGRAPHX_INLINE_NS } // namespace MIGRAPHX_INLINE_NS
......
...@@ -25,6 +25,8 @@ ...@@ -25,6 +25,8 @@
namespace migraphx { namespace migraphx {
inline namespace MIGRAPHX_INLINE_NS { inline namespace MIGRAPHX_INLINE_NS {
using milliseconds = std::chrono::duration<double, std::milli>;
struct program_impl struct program_impl
{ {
// A map is used to keep references to modules of the program // A map is used to keep references to modules of the program
...@@ -293,10 +295,14 @@ std::vector<argument> program::eval(parameter_map params) const ...@@ -293,10 +295,14 @@ std::vector<argument> program::eval(parameter_map params) const
ctx.finish(); ctx.finish();
std::cout << "Run instruction: "; std::cout << "Run instruction: ";
this->debug_print(ins); this->debug_print(ins);
timer t{};
auto result = check_context(f); auto result = check_context(f);
double t1 = t.record<milliseconds>();
ctx.finish(); ctx.finish();
double t2 = t.record<milliseconds>();
std::cout << "Time: " << t1 << "ms, " << t2 << "ms" << std::endl;
if(trace_level > 1 and ins->name().front() != '@' and ins->name() != "load") if(trace_level > 1 and ins->name().front() != '@' and ins->name() != "load")
std::cout << "Ouput: " << result << std::endl; std::cout << "Output: " << result << std::endl;
return result; return result;
}); });
} }
...@@ -480,7 +486,6 @@ double common_average(const std::vector<double>& v) ...@@ -480,7 +486,6 @@ double common_average(const std::vector<double>& v)
void program::perf_report(std::ostream& os, std::size_t n, parameter_map params) const void program::perf_report(std::ostream& os, std::size_t n, parameter_map params) const
{ {
using milliseconds = std::chrono::duration<double, std::milli>;
auto& ctx = this->impl->ctx; auto& ctx = this->impl->ctx;
// Run once by itself // Run once by itself
eval(params); eval(params);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment