From 9c1560b8bb36e9b1d195af6cb9eb38b5463d83da Mon Sep 17 00:00:00 2001 From: vedithal-amd Date: Sat, 27 Dec 2025 09:47:42 -0500 Subject: [PATCH] [rocprofiler-compute] Fix merging logic for multi process (#2445) * Fix merging logic for multi process * Fix dispatch id reset logic in case of rocpd format * Fix kernel id reset logic in case of csv format * Revert correlation logic change in csv format * Do inner join instead of left join --- projects/rocprofiler-compute/CHANGELOG.md | 3 +-- .../rocprofiler-compute/src/utils/utils.py | 27 ++++++++++++++----- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/projects/rocprofiler-compute/CHANGELOG.md b/projects/rocprofiler-compute/CHANGELOG.md index e55041e700..4bc6e2c438 100644 --- a/projects/rocprofiler-compute/CHANGELOG.md +++ b/projects/rocprofiler-compute/CHANGELOG.md @@ -45,8 +45,7 @@ Full documentation for ROCm Compute Profiler is available at [https://rocm.docs. * Fix the check to prevent showing table where a column is full of N/A * Improve detection of empty values when metric evalulation fails due to counter data missing -* Fix the wrong logic in native counter csv to rocprofv3 csv conversion - * Use kernel_id instead of dispatch_id to correlate native counter csv and kernel trace csv +* Fix issue where counter collection data was empty when profiling workload which spawn multiple child processes ### Removed diff --git a/projects/rocprofiler-compute/src/utils/utils.py b/projects/rocprofiler-compute/src/utils/utils.py index 956191bae6..54dc7bcfdd 100644 --- a/projects/rocprofiler-compute/src/utils/utils.py +++ b/projects/rocprofiler-compute/src/utils/utils.py @@ -890,9 +890,17 @@ def run_prof( ) combined_df = pd.read_csv(workload_dir + f"/results_{fbase}.csv") # Reset Dispatch_ID based on PID, Kernel_Name, Grid_Size, - # Workgroup_Size, LDS_Per_Workgroup + # Workgroup_Size, LDS_Per_Workgroup, Start_Timestamp, End_Timestamp combined_df["Dispatch_ID"] = combined_df.groupby( - ["PID", "Kernel_Name", "Grid_Size", "Workgroup_Size", "LDS_Per_Workgroup"], + [ + "PID", + "Kernel_Name", + "Grid_Size", + "Workgroup_Size", + "LDS_Per_Workgroup", + "Start_Timestamp", + "End_Timestamp", + ], sort=False, ).ngroup() # Reset Kernel_ID based on Kernel_Name, Grid_Size, @@ -959,6 +967,13 @@ def run_prof( # Overwrite column to ensure unique IDs. combined_results["Dispatch_ID"] = range(0, len(combined_results)) + # Reset Kernel_ID based on Kernel_Name, Grid_Size, + # Workgroup_Size, LDS_Per_Workgroup + combined_results["Kernel_ID"] = combined_results.groupby( + ["Kernel_Name", "Grid_Size", "Workgroup_Size", "LDS_Per_Workgroup"], + sort=False, + ).ngroup() + combined_results.to_csv( workload_dir + "/out/pmc_1/results_" + fbase + ".csv", index=False ) @@ -1097,13 +1112,13 @@ def convert_native_counter_collection_csv(workload_dir: str) -> None: )[0] kernel_data = pd.read_csv(kernel_data_filename) - # Merge counter_data with kernel_data on kernel_id + # Merge counter_data with kernel_data on dispatch_id merged_data = pd.merge( counter_data, kernel_data, - left_on="kernel_id", - right_on="Kernel_Id", - how="left", + left_on="dispatch_id", + right_on="Dispatch_Id", + how="inner", ) rocprofv3_counter_data = pd.DataFrame({