From 47088fea0d9657f474d7bb1c86699e2a3f1538c9 Mon Sep 17 00:00:00 2001 From: Payam Date: Fri, 3 Jul 2020 10:27:48 -0400 Subject: [PATCH] Adding new macro for HIP using ClPrint calculates duration of a call Change-Id: I7cca673f6dabc618ec543e3bd6c5102aa76edc3a --- rocclr/utils/debug.cpp | 20 +++++++++++++++++++- rocclr/utils/debug.hpp | 21 +++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/rocclr/utils/debug.cpp b/rocclr/utils/debug.cpp index cf0191fa06..f06ff05819 100644 --- a/rocclr/utils/debug.cpp +++ b/rocclr/utils/debug.cpp @@ -87,8 +87,26 @@ void log_printf(LogLevel level, const char* file, int line, const char* format, char message[4096]; vsnprintf(message, sizeof(message), format, ap); va_end(ap); + uint64_t timeUs = Os::timeNanos() / 1000ULL; + fprintf(stderr, ":%d:%-25s:%-4d: %010lld us: %s\n", level, file, line, timeUs, message); - fprintf(stderr, ":%d:%-25s:%-4d: %010lld us: %s\n", level, file, line, Os::timeNanos() / 1000ULL, message); +} +void log_printf(LogLevel level, const char* file, int line, uint64_t* start, const char* format, ...) { + va_list ap; + + va_start(ap, format); + char message[4096]; + vsnprintf(message, sizeof(message), format, ap); + va_end(ap); + uint64_t timeUs = Os::timeNanos() / 1000ULL; + if (start == 0 || *start == 0) { + fprintf(stderr, ":%d:%-25s:%-4d: %010lld us: %s\n", level, file, line, timeUs, message); + } else { + fprintf(stderr, ":%d:%-25s:%-4d: %010lld us: %s: duration: %d us\n", level, file, line, timeUs, message,timeUs - *start); + } + if (*start == 0) { + *start = timeUs; + } } } // namespace amd diff --git a/rocclr/utils/debug.hpp b/rocclr/utils/debug.hpp index 5902f559aa..e0ac233470 100644 --- a/rocclr/utils/debug.hpp +++ b/rocclr/utils/debug.hpp @@ -24,7 +24,13 @@ #include #include +#include //! \addtogroup Utils +#ifdef _WIN32 +#include +#else +#include +#endif namespace amd { /*@{*/ @@ -69,6 +75,7 @@ extern void log_timestamped(LogLevel level, const char* file, int line, const ch //! \brief Insert a printf-style log entry. extern void log_printf(LogLevel level, const char* file, int line, const char* format, ...); +extern void log_printf(LogLevel level, const char* file, int line, uint64_t *start, const char* format, ...); /*@}*/} // namespace amd @@ -190,6 +197,20 @@ inline void warning(const char* msg) { amd::report_warning(msg); } } \ } while (false) +//called on entry and exit, calculates duration with local starttime variable defined in HIP_INIT_API +#define HIPPrintDuration(level, mask, startTimeUs, format, ...) \ + do { \ + if (AMD_LOG_LEVEL >= level) { \ + if (AMD_LOG_MASK & mask || mask == amd::LOG_ALWAYS) { \ + if (AMD_LOG_MASK & amd::LOG_LOCATION) { \ + amd::log_printf(level, __FILENAME__, __LINE__, startTimeUs,format, ##__VA_ARGS__); \ + } else { \ + amd::log_printf(level, "", 0, startTimeUs, format, ##__VA_ARGS__); \ + } \ + } \ + } \ + } while (false) + #define ClCondPrint(level, mask, condition, format, ...) \ do { \ if (AMD_LOG_LEVEL >= level && (condition)) { \