diff --git a/profile/plugin/aie_profile/aie_profile_metadata.cpp b/profile/plugin/aie_profile/aie_profile_metadata.cpp index 2416fc68..9fc80d67 100644 --- a/profile/plugin/aie_profile/aie_profile_metadata.cpp +++ b/profile/plugin/aie_profile/aie_profile_metadata.cpp @@ -619,6 +619,9 @@ namespace xdp { // Pass 2 : process only range of tiles metric setting for (size_t i = 0; i < metricsSettings.size(); ++i) { + //Do not re-parse Pass 1 "all:..." + if (isAll[i]) + continue; if ((metrics[i].size() != 3) && (metrics[i].size() != 4)) continue; @@ -921,7 +924,7 @@ namespace xdp { } catch (...) { std::stringstream msg; - msg << "Channel specifications in graph_based_interface_metrics " + msg << "Channel specifications in graph_based_interface_tile_metrics " << "are not valid and hence ignored."; xrt_core::message::send(severity_level::warning, "XRT", msg.str()); } @@ -1074,18 +1077,20 @@ namespace xdp { for (size_t i = 0; i < metricsSettings.size(); ++i) { if ((metrics[i][0].compare("all") == 0) || (metrics[i].size() < 3)) continue; - if (!isSupported(metrics[i][1], true)) - continue; uint8_t maxCol = 0; try { maxCol = aie::convertStringToUint8(metrics[i][1]); } catch (std::invalid_argument const&) { - // maxColumn is not an integer i.e either 1st style or wrong format, skip for now + // Not a range specification (e.g. single-tile format such as + // ::); let later passes handle it. continue; } + if (!isSupported(metrics[i][2], true)) + continue; + uint8_t minCol = 0; try { minCol = aie::convertStringToUint8(metrics[i][0]); @@ -1139,8 +1144,21 @@ namespace xdp { // Pass 3 : process only single tile metric setting // :[:[:]] for (size_t i = 0; i < metricsSettings.size(); ++i) { + bool isRangeSpecification = false; + if (metrics[i].size() >= 3) { + try { + (void)aie::convertStringToUint8(metrics[i][0]); + (void)aie::convertStringToUint8(metrics[i][1]); + isRangeSpecification = true; + } + catch (std::invalid_argument const&) { + isRangeSpecification = false; + } + } + // Skip range specification, invalid format, or already processed - if ((metrics[i].size() == 4) || (metrics[i].size() < 2) || (metrics[i][0].compare("all") == 0)) + if (isRangeSpecification || (metrics[i].size() == 4) || (metrics[i].size() < 2) + || (metrics[i][0].compare("all") == 0)) continue; if (!isSupported(metrics[i][1], true)) continue; @@ -1149,6 +1167,10 @@ namespace xdp { try { col = aie::convertStringToUint8(metrics[i][1]); + xrt_core::message::send(severity_level::warning, "XRT", + "tile_based_interface_tile_metrics: invalid format. Ignored: " + + metricsSettings[i]); + continue; } catch (std::invalid_argument const&) { // max column is not a number, so the expected single column specification. Handle this here diff --git a/profile/plugin/aie_profile/edge/aie_profile.cpp b/profile/plugin/aie_profile/edge/aie_profile.cpp index d600ba93..4749fe81 100644 --- a/profile/plugin/aie_profile/edge/aie_profile.cpp +++ b/profile/plugin/aie_profile/edge/aie_profile.cpp @@ -121,7 +121,10 @@ namespace xdp { if (!runtimeCounters) { // No runtime counters means there were no valid metrics configured for profiling this design. There is nothing to profile, so return early. xrt_core::message::send(severity_level::warning, "XRT", - "No valid metric setting found for this design. Please specify valid tile_based_[aie|aie_memory|interface_tile]_metrics under \"AIE_profile_settings\" section in your xrt.ini if you want to configure this design."); + "No valid metric setting found for this design. Please specify valid " + "graph_based_[aie|aie_memory|memory_tile|interface_tile]_metrics and/or " + "tile_based_[aie|aie_memory|memory_tile|interface_tile|microcontroller]_metrics " + "under \"AIE_profile_settings\" section in your xrt.ini if you want to configure this design."); return; } } diff --git a/profile/plugin/aie_profile/ve2/aie_profile.cpp b/profile/plugin/aie_profile/ve2/aie_profile.cpp index 3aec430f..42bd6ee4 100644 --- a/profile/plugin/aie_profile/ve2/aie_profile.cpp +++ b/profile/plugin/aie_profile/ve2/aie_profile.cpp @@ -150,7 +150,10 @@ namespace xdp { if (counters.empty()) { xrt_core::message::send(severity_level::warning, "XRT", - "AIE Profile Counters were not found for this design. Please specify tile_based_[aie|aie_memory|interface_tile]_metrics under \"AIE_profile_settings\" section in your xrt.ini."); + "AIE Profile Counters were not found for this design. Please specify " + "graph_based_[aie|aie_memory|memory_tile|interface_tile]_metrics and/or " + "tile_based_[aie|aie_memory|memory_tile|interface_tile|microcontroller]_metrics " + "under \"AIE_profile_settings\" section in your xrt.ini."); (db->getStaticInfo()).setIsAIECounterRead(deviceID,true); return; } diff --git a/profile/plugin/aie_trace/aie_trace_metadata.cpp b/profile/plugin/aie_trace/aie_trace_metadata.cpp index b8171edb..7e052c04 100644 --- a/profile/plugin/aie_trace/aie_trace_metadata.cpp +++ b/profile/plugin/aie_trace/aie_trace_metadata.cpp @@ -417,7 +417,7 @@ namespace xdp { && (std::find(allValidEntries.begin(), allValidEntries.end(), graphMetrics[i][1]) == allValidEntries.end())) { std::stringstream msg; msg << "Could not find " << entryType << " " << graphMetrics[i][1] - << " as specified in graph_based_" << tileName << "_metrics setting." + << " as specified in graph_based_" << tileName << "_tile_metrics setting." << " The following " << entryType << "s are valid : "; if (!allValidEntries.empty()) { msg << allValidEntries[0]; @@ -460,7 +460,7 @@ namespace xdp { && (std::find(allValidEntries.begin(), allValidEntries.end(), graphMetrics[i][1]) == allValidEntries.end())) { std::stringstream msg; msg << "Could not find " << entryType << " " << graphMetrics[i][1] - << " as specified in graph_based_" << tileName << "_metrics setting." + << " as specified in graph_based_" << tileName << "_tile_metrics setting." << " The following " << entryType << "s are valid : "; if (!allValidEntries.empty()) { msg << allValidEntries[0]; @@ -788,7 +788,7 @@ namespace xdp { } } catch (...) { std::stringstream msg; - msg << "Channel specifications in graph_based_interface_metrics " + msg << "Channel specifications in graph_based_interface_tile_metrics " << "are not valid and hence ignored."; xrt_core::message::send(severity_level::warning, "XRT", msg.str()); } @@ -888,12 +888,20 @@ namespace xdp { if ((processed.find(i) != processed.end()) || (metrics[i].size() < 3)) continue; + // Only entries with a numeric second token are range specifications. + // Valid single-tile settings with channels (for example, + // ::) also have 3+ tokens and are handled in Pass 3. + if (!aie::isDigitString(metrics[i][1])) + continue; + uint8_t maxCol = 0; try { maxCol = aie::convertStringToUint8(metrics[i][1]); } catch (std::invalid_argument const&) { - // Max column is not an integer, so either first style or wrong format. Skip for now. + xrt_core::message::send(severity_level::warning, "XRT", + "tile_based_interface_tile_metrics: invalid range line. Ignored: " + + metricsSettings[i]); continue; } @@ -952,6 +960,10 @@ namespace xdp { uint8_t col = 0; try { col = aie::convertStringToUint8(metrics[i][1]); + xrt_core::message::send(severity_level::warning, "XRT", + "tile_based_interface_tile_metrics: invalid format. Ignored: " + + metricsSettings[i]); + continue; } catch (std::invalid_argument const&) { // Max column is not an integer, so expected single column specification. Handle this here.