From 3071199386aae29e847db58e59ffca74545db980 Mon Sep 17 00:00:00 2001 From: "Madsen, Jonathan" Date: Tue, 11 Feb 2025 14:31:25 -0600 Subject: [PATCH] rocprofv3: do not abort if counter does not have dimensions (#150) * rocprofv3: do not abort if counter does not have dimensions * Relax error handling further in rocprofv3 metadata --------- Co-authored-by: Jonathan R. Madsen --- source/lib/output/metadata.cpp | 40 ++++++++++++++++++++++------------ source/lib/output/metadata.hpp | 19 +++++++++------- 2 files changed, 37 insertions(+), 22 deletions(-) diff --git a/source/lib/output/metadata.cpp b/source/lib/output/metadata.cpp index d663102646..d1ce8581e0 100644 --- a/source/lib/output/metadata.cpp +++ b/source/lib/output/metadata.cpp @@ -30,8 +30,12 @@ #include "lib/rocprofiler-sdk-att/att_lib_wrapper.hpp" #include +#include #include +#include + +#include #include #include @@ -179,12 +183,22 @@ void metadata::init(inprocess) ROCPROFILER_COUNTER_INFO_VERSION_0, &static_cast(_info))); - ROCPROFILER_CHECK(rocprofiler_iterate_counter_dimensions( - counters[i], dimensions_info_callback, &_dim_info)); - - _dim_ids.reserve(_dim_info.size()); - for(auto ditr : _dim_info) - _dim_ids.emplace_back(ditr.id); + if(auto _itr_dim_stat = rocprofiler_iterate_counter_dimensions( + counters[i], dimensions_info_callback, &_dim_info); + _itr_dim_stat == ROCPROFILER_STATUS_SUCCESS) + { + _dim_ids.reserve(_dim_info.size()); + for(auto ditr : _dim_info) + _dim_ids.emplace_back(ditr.id); + } + else + { + ROCP_WARNING << fmt::format("rocprofiler_iterate_counter_dimensions(...) " + "for counter {} returned {} :: {}", + _info.name, + rocprofiler_get_status_name(_itr_dim_stat), + rocprofiler_get_status_string(_itr_dim_stat)); + } data_v->at(id).emplace_back( id, _info, std::move(_dim_ids), std::move(_dim_info)); @@ -193,14 +207,12 @@ void metadata::init(inprocess) }, &agent_counter_info); - if(status != ROCPROFILER_STATUS_ERROR_AGENT_ARCH_NOT_SUPPORTED) - { - ROCPROFILER_CHECK(status); - } - else - { - ROCP_WARNING << "Init failed for agent " << itr.node_id << " (" << itr.name << ")"; - } + ROCP_WARNING_IF(status != ROCPROFILER_STATUS_SUCCESS) << fmt::format( + "rocprofiler_iterate_agent_supported_counters returned {} for agent {} ({}) :: {}", + rocprofiler_get_status_name(status), + itr.node_id, + itr.name, + rocprofiler_get_status_string(status)); } } diff --git a/source/lib/output/metadata.hpp b/source/lib/output/metadata.hpp index 5182f4fa23..640e124160 100644 --- a/source/lib/output/metadata.hpp +++ b/source/lib/output/metadata.hpp @@ -52,19 +52,22 @@ #include #include -#define ROCPROFILER_CHECK_NESTED(VAR, RESULT) \ +#define ROCPROFILER_CHECK_NESTED(VAR, RESULT, LEVEL) \ { \ - rocprofiler_status_t ROCPROFILER_VARIABLE(CHECKSTATUS, VAR) = RESULT; \ - if(ROCPROFILER_VARIABLE(CHECKSTATUS, VAR) != ROCPROFILER_STATUS_SUCCESS) \ + if(rocprofiler_status_t ROCPROFILER_VARIABLE(CHECKSTATUS, VAR) = RESULT; \ + ROCPROFILER_VARIABLE(CHECKSTATUS, VAR) != ROCPROFILER_STATUS_SUCCESS) \ { \ - std::string_view status_msg = \ - rocprofiler_get_status_string(ROCPROFILER_VARIABLE(CHECKSTATUS, VAR)); \ - ROCP_FATAL << "[" << __FUNCTION__ << "] " << #RESULT << " failed with error code " \ - << ROCPROFILER_VARIABLE(CHECKSTATUS, VAR) << " :: " << status_msg; \ + ROCP_##LEVEL << fmt::format( \ + "[{}] {} returned {} :: {}", \ + __FUNCTION__, \ + #RESULT, \ + rocprofiler_get_status_name(ROCPROFILER_VARIABLE(CHECKSTATUS, VAR)), \ + rocprofiler_get_status_string(ROCPROFILER_VARIABLE(CHECKSTATUS, VAR))); \ } \ } -#define ROCPROFILER_CHECK(RESULT) ROCPROFILER_CHECK_NESTED(__COUNTER__, RESULT) +#define ROCPROFILER_CHECK(RESULT) ROCPROFILER_CHECK_NESTED(__COUNTER__, RESULT, FATAL) +#define ROCPROFILER_CHECK_WARNING(RESULT) ROCPROFILER_CHECK_NESTED(__COUNTER__, RESULT, WARNING) namespace rocprofiler {