diff --git a/projects/rocprofiler/bin/rocprofv2 b/projects/rocprofiler/bin/rocprofv2 index 8d708317de..319e70833f 100755 --- a/projects/rocprofiler/bin/rocprofv2 +++ b/projects/rocprofiler/bin/rocprofv2 @@ -262,6 +262,7 @@ if [ -n "$COUNTERS_PATH" ]; then done < $input fi +COUNTERS_PMC_DIRS="" if [ -n "$PMC_LINES" ]; then COUNTER=1 for i in ${!PMC_LINES[@]}; do @@ -269,6 +270,7 @@ if [ -n "$PMC_LINES" ]; then if [ -n "$OUTPUT_PATH" ]; then if [ ! -n "$ATT_ARGV" ]; then FINAL_PATH="$OUTPUT_PATH_INTERNAL/pmc_$COUNTER" + COUNTERS_PMC_DIRS="$COUNTERS_PMC_DIRS $FINAL_PATH" else FINAL_PATH="$OUTPUT_PATH" fi @@ -292,6 +294,32 @@ elif [ ! -n "$ATT_ARGV" ]; then fi fi +get_pmc_results_txt_path(){ + for file_name in `ls $1` ; do + if [[ $file_name == *results.txt ]]; then + echo "$1/$file_name" + fi + done +} + +if [ -n "$COUNTERS_PMC_DIRS" ]; then + COUNTERS_RESULTS_TXT="" + for PMC_DIR in $COUNTERS_PMC_DIRS; do + COUNTERS_RESULTS_TXT="$COUNTERS_RESULTS_TXT $(get_pmc_results_txt_path $PMC_DIR)" + done + CSV_RESULTS=$OUTPUT_PATH_INTERNAL/results.csv + if [ -n "$OUT_FILE_NAME" ]; then + CSV_RESULTS=$OUTPUT_PATH_INTERNAL/$OUT_FILE_NAME + fi + echo "csv results path: $CSV_RESULTS" + export ROCP_MERGE_PIDS=1 #required for tblextr.py to work correctly for counters + if [ $RUN_FROM_BUILD == 1 ]; then + eval "python3 $ROCM_DIR/bin/tblextr.py $CSV_RESULTS $COUNTERS_RESULTS_TXT" + else + eval "python3 $ROCPROFV2_DIR/../libexec/rocprofiler/tblextr.py $CSV_RESULTS $COUNTERS_RESULTS_TXT" + fi +fi + if [ -n "$ATT_PATH" ]; then if [ -n "$ATT_ARGV" ]; then eval "python3 $ATT_PATH $ATT_ARGV" diff --git a/projects/rocprofiler/plugin/file/file.cpp b/projects/rocprofiler/plugin/file/file.cpp index d3a643199b..b8fbaf4164 100644 --- a/projects/rocprofiler/plugin/file/file.cpp +++ b/projects/rocprofiler/plugin/file/file.cpp @@ -286,10 +286,10 @@ class file_plugin_t { profiler_record->kernel_id, &kernel_name_c)); } *output_file << std::string("dispatch[") << std::to_string(profiler_record->header.id.handle) - << "], " << std::string("gpu_id(") + << "], " << std::string("gpu-id(") << std::to_string(profiler_record->gpu_id.handle) << "), " - << std::string("queue_id(") << std::to_string(profiler_record->queue_id.handle) - << "), " << std::string("queue_index(") + << std::string("queue-id(") << std::to_string(profiler_record->queue_id.handle) + << "), " << std::string("queue-index(") << std::to_string(profiler_record->queue_idx.value) << "), " << std::string("pid(") << std::to_string(GetPid()) << "), " << std::string("tid(") << std::to_string(profiler_record->thread_id.value) << ")"; @@ -321,9 +321,9 @@ class file_plugin_t { << std::to_string(profiler_record->kernel_id.handle) << "), " << std::string("kernel-name(\"") << kernel_name << "\")" << std::string(", start_time(") - << std::to_string(profiler_record->timestamps.begin.value) << ")" - << std::string(", end_time(") - << std::to_string(profiler_record->timestamps.end.value) << ")"; + << std::string(", time(0,") + << std::to_string(profiler_record->timestamps.begin.value) << "," + << std::to_string(profiler_record->timestamps.end.value) << ",0)"; // For Counters *output_file << std::endl; @@ -339,7 +339,7 @@ class file_plugin_t { CHECK_ROCPROFILER(rocprofiler_query_counter_info( session_id, ROCPROFILER_COUNTER_NAME, profiler_record->counters[i].counter_handler, &name_c)); - *output_file << ", " << name_c << " (" + *output_file << " " << name_c << " (" << std::to_string(profiler_record->counters[i].value.value) << ")" << std::endl; } diff --git a/projects/rocprofiler/src/core/counters/metrics/basic_counters.xml b/projects/rocprofiler/src/core/counters/metrics/basic_counters.xml index ba2275accf..6095e3f2eb 100755 --- a/projects/rocprofiler/src/core/counters/metrics/basic_counters.xml +++ b/projects/rocprofiler/src/core/counters/metrics/basic_counters.xml @@ -498,6 +498,7 @@ + @@ -505,10 +506,12 @@ + + @@ -591,6 +594,7 @@ + @@ -599,6 +603,7 @@ + @@ -620,6 +625,7 @@ + diff --git a/projects/rocprofiler/src/core/counters/metrics/derived_counters.xml b/projects/rocprofiler/src/core/counters/metrics/derived_counters.xml index b32c950728..3119c4577d 100755 --- a/projects/rocprofiler/src/core/counters/metrics/derived_counters.xml +++ b/projects/rocprofiler/src/core/counters/metrics/derived_counters.xml @@ -49,8 +49,8 @@ - - + + @@ -291,8 +291,8 @@ - - + + @@ -369,7 +369,7 @@ - + @@ -411,9 +411,9 @@ - - - + + + @@ -503,6 +503,8 @@ # Aldebaran +#Mi300 + #Navi21 diff --git a/projects/rocprofiler/src/core/counters/metrics/metrics.h b/projects/rocprofiler/src/core/counters/metrics/metrics.h index d33c2849be..062285d344 100755 --- a/projects/rocprofiler/src/core/counters/metrics/metrics.h +++ b/projects/rocprofiler/src/core/counters/metrics/metrics.h @@ -203,10 +203,14 @@ class MetricsDict { xml_->AddConst("top.const.metric", "SE_NUM", agent_info->getShaderEngineCount()); ImportMetrics(agent_info, "const"); agent_name_ = agent_info->getName(); + if (agent_name_.substr(0, 6) == "gfx940") + agent_name_ = + "gfx940"; // To correct the agent_name from "gfx940:forcestoresc1+" -> "gfx940" if (std::string("gfx906") == agent_name_ || std::string("gfx908") == agent_name_ || - std::string("gfx90a") == agent_name_ || std::string("gfx1032") == agent_name_ || - std::string("gfx1031") == agent_name_ || std::string("gfx1030") == agent_name_ || - std::string("gfx1100") == agent_name_ || std::string("gfx1101") == agent_name_) { + std::string("gfx90a") == agent_name_ || std::string("gfx940") == agent_name_ || + std::string("gfx1032") == agent_name_ || std::string("gfx1031") == agent_name_ || + std::string("gfx1030") == agent_name_ || std::string("gfx1100") == agent_name_ || + std::string("gfx1101") == agent_name_) { ImportMetrics(agent_info, agent_name_); } else { agent_name_ = agent_info->getGfxip(); diff --git a/projects/rocprofiler/src/core/metrics.h b/projects/rocprofiler/src/core/metrics.h index 9ce4489252..02c2c36714 100755 --- a/projects/rocprofiler/src/core/metrics.h +++ b/projects/rocprofiler/src/core/metrics.h @@ -136,7 +136,8 @@ class MetricsDict { const Metric* metric = NULL; auto it = cache_.find(name); - if (it != cache_.end()) metric = it->second; + if (it != cache_.end()) + metric = it->second; else { const std::size_t pos = name.find(':'); if (pos != std::string::npos) { @@ -148,7 +149,8 @@ class MetricsDict { const std::size_t pos1 = block_name.find('['); if (pos1 != std::string::npos) { const std::size_t pos2 = block_name.find(']'); - if (pos2 == std::string::npos) EXC_RAISING(HSA_STATUS_ERROR, "Malformed metric name '" << name << "'"); + if (pos2 == std::string::npos) + EXC_RAISING(HSA_STATUS_ERROR, "Malformed metric name '" << name << "'"); block_name = name.substr(0, pos1); const std::string block_index_str = name.substr(pos1 + 1, pos2 - (pos1 + 1)); block_index = atol(block_index_str.c_str()); @@ -156,8 +158,10 @@ class MetricsDict { } const hsa_ven_amd_aqlprofile_id_query_t query = Translate(agent_info_, block_name); - const hsa_ven_amd_aqlprofile_block_name_t block_id = (hsa_ven_amd_aqlprofile_block_name_t)query.id; - if ((query.instance_count > 1) && (indexed == false)) EXC_RAISING(HSA_STATUS_ERROR, "Malformed indexed metric name '" << name << "'"); + const hsa_ven_amd_aqlprofile_block_name_t block_id = + (hsa_ven_amd_aqlprofile_block_name_t)query.id; + if ((query.instance_count > 1) && (indexed == false)) + EXC_RAISING(HSA_STATUS_ERROR, "Malformed indexed metric name '" << name << "'"); const uint32_t event_id = atol(event_str.c_str()); const counter_t counter = {name, {block_id, block_index, event_id}}; metric = new BaseMetric(name, counter); @@ -189,22 +193,23 @@ class MetricsDict { const char* xml_name = getenv("ROCP_METRICS"); if (xml_name != NULL) { xml_ = xml::Xml::Create(xml_name); - if (xml_ == NULL) EXC_RAISING(HSA_STATUS_ERROR, "metrics .xml open error '" << xml_name << "'"); + if (xml_ == NULL) + EXC_RAISING(HSA_STATUS_ERROR, "metrics .xml open error '" << xml_name << "'"); xml_->AddConst("top.const.metric", "MAX_WAVE_SIZE", agent_info->max_wave_size); xml_->AddConst("top.const.metric", "CU_NUM", agent_info->cu_num); xml_->AddConst("top.const.metric", "SIMD_NUM", agent_info->simds_per_cu * agent_info->cu_num); xml_->AddConst("top.const.metric", "SE_NUM", agent_info->se_num); ImportMetrics(agent_info, "const"); agent_name_ = agent_info->name; - if (std::string("gfx906") == agent_info->name || - std::string("gfx908") == agent_info->name || - std::string("gfx90a") == agent_info->name || - std::string("gfx1032") == agent_info->name || - std::string("gfx1031") == agent_info->name || - std::string("gfx1030") == agent_info->name || - std::string("gfx1100") == agent_info->name || - std::string("gfx1101") == agent_info->name) { - ImportMetrics(agent_info, agent_info->name); + if (agent_name_.substr(0, 6) == "gfx940") + agent_name_ = + "gfx940"; // To correct the agent_name from "gfx940:forcestoresc1+" -> "gfx940" + if (std::string("gfx906") == agent_name_ || std::string("gfx908") == agent_name_ || + std::string("gfx90a") == agent_name_ || std::string("gfx940") == agent_name_ || + std::string("gfx1032") == agent_name_ || std::string("gfx1031") == agent_name_ || + std::string("gfx1030") == agent_name_ || std::string("gfx1100") == agent_name_ || + std::string("gfx1101") == agent_name_) { + ImportMetrics(agent_info, agent_name_); } else { agent_name_ = agent_info->gfxip; ImportMetrics(agent_info, agent_info->gfxip); @@ -218,14 +223,16 @@ class MetricsDict { for (auto& entry : cache_) delete entry.second; } - static hsa_ven_amd_aqlprofile_id_query_t Translate(const util::AgentInfo* agent_info, const std::string& block_name) { + static hsa_ven_amd_aqlprofile_id_query_t Translate(const util::AgentInfo* agent_info, + const std::string& block_name) { hsa_ven_amd_aqlprofile_profile_t profile{}; profile.agent = agent_info->dev_id; hsa_ven_amd_aqlprofile_id_query_t query = {block_name.c_str(), 0, 0}; hsa_status_t status = util::HsaRsrcFactory::Instance().AqlProfileApi()->hsa_ven_amd_aqlprofile_get_info( &profile, HSA_VEN_AMD_AQLPROFILE_INFO_BLOCK_ID, &query); - if (status != HSA_STATUS_SUCCESS) AQL_EXC_RAISING(HSA_STATUS_ERROR, "ImportMetrics: bad block name '" << block_name << "'"); + if (status != HSA_STATUS_SUCCESS) + AQL_EXC_RAISING(HSA_STATUS_ERROR, "ImportMetrics: bad block name '" << block_name << "'"); return query; } @@ -251,7 +258,8 @@ class MetricsDict { const uint32_t event_id = atol(event_str.c_str()); const hsa_ven_amd_aqlprofile_id_query_t query = Translate(agent_info, block_name); - const hsa_ven_amd_aqlprofile_block_name_t block_id = (hsa_ven_amd_aqlprofile_block_name_t)query.id; + const hsa_ven_amd_aqlprofile_block_name_t block_id = + (hsa_ven_amd_aqlprofile_block_name_t)query.id; if (query.instance_count > 1) { for (unsigned block_index = 0; block_index < query.instance_count; ++block_index) { std::ostringstream full_name; @@ -272,9 +280,11 @@ class MetricsDict { xml::Expr* expr_obj = NULL; try { expr_obj = new xml::Expr(expr_str, new ExprCache(&cache_)); - } catch(const xml::exception_t& exc) { - if (do_lookup) metrics_list.push_back(node); - else throw(exc); + } catch (const xml::exception_t& exc) { + if (do_lookup) + metrics_list.push_back(node); + else + throw(exc); } if (expr_obj) { #if 0 @@ -285,7 +295,8 @@ class MetricsDict { for (const std::string& var : expr_obj->GetVars()) { auto it = cache_.find(var); if (it == cache_.end()) { - EXC_RAISING(HSA_STATUS_ERROR, "Bad metric '" << name << "', var '" << var << "' is not found"); + EXC_RAISING(HSA_STATUS_ERROR, + "Bad metric '" << name << "', var '" << var << "' is not found"); } it->second->GetCounters(counters_vec); } @@ -309,23 +320,27 @@ class MetricsDict { } } - const Metric* AddMetric(const std::string& name, const std::string& /*alias*/, const counter_t& counter) { + const Metric* AddMetric(const std::string& name, const std::string& /*alias*/, + const counter_t& counter) { const Metric* metric = NULL; const auto ret = cache_.insert({name, NULL}); if (ret.second) { metric = new BaseMetric(name, counter); ret.first->second = metric; - } else EXC_RAISING(HSA_STATUS_ERROR, "metric redefined '" << name << "'"); + } else + EXC_RAISING(HSA_STATUS_ERROR, "metric redefined '" << name << "'"); return metric; } - const Metric* AddMetric(const std::string& name, const counters_vec_t& counters_vec, const xml::Expr* expr_obj) { + const Metric* AddMetric(const std::string& name, const counters_vec_t& counters_vec, + const xml::Expr* expr_obj) { const Metric* metric = NULL; const auto ret = cache_.insert({name, NULL}); if (ret.second) { metric = new ExprMetric(name, counters_vec, expr_obj); ret.first->second = metric; - } else EXC_RAISING(HSA_STATUS_ERROR, "expr-metric redefined '" << name << "'"); + } else + EXC_RAISING(HSA_STATUS_ERROR, "expr-metric redefined '" << name << "'"); return metric; } @@ -336,7 +351,8 @@ class MetricsDict { printf("> Metric '%s'\n", metric->GetName().c_str()); metric->GetCounters(counters_vec); for (auto c : counters_vec) { - printf(" counter %s, b(%u), i (%u), e (%u)\n", c->name.c_str(), c->event.block_name, c->event.block_index, c->event.counter_id); + printf(" counter %s, b(%u), i (%u), e (%u)\n", c->name.c_str(), c->event.block_name, + c->event.block_index, c->event.counter_id); } } } diff --git a/projects/rocprofiler/test/tool/gfx_metrics.xml b/projects/rocprofiler/test/tool/gfx_metrics.xml index a1ff2ea710..768b896c7e 100755 --- a/projects/rocprofiler/test/tool/gfx_metrics.xml +++ b/projects/rocprofiler/test/tool/gfx_metrics.xml @@ -105,7 +105,7 @@ - + @@ -366,6 +366,271 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/projects/rocprofiler/test/tool/metrics.xml b/projects/rocprofiler/test/tool/metrics.xml index f3f7b7eac6..47ce197a95 100755 --- a/projects/rocprofiler/test/tool/metrics.xml +++ b/projects/rocprofiler/test/tool/metrics.xml @@ -49,6 +49,9 @@ + + + @@ -112,7 +115,7 @@ - + @@ -207,6 +210,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -290,6 +424,8 @@ # Aldebaran +#Mi300 + #Navi21