diff --git a/projects/rocprofiler-compute/src/omniperf_analyze/analysis_base.py b/projects/rocprofiler-compute/src/omniperf_analyze/analysis_base.py index a67cb044e2..4a7bf659b2 100644 --- a/projects/rocprofiler-compute/src/omniperf_analyze/analysis_base.py +++ b/projects/rocprofiler-compute/src/omniperf_analyze/analysis_base.py @@ -77,23 +77,21 @@ class OmniAnalyze_Base(): @demarcate def list_metrics(self): args = self.__args - if args.list_metrics in file_io.supported_arch.keys(): + if args.list_metrics in self.__supported_archs.keys(): arch = args.list_metrics if arch not in self._arch_configs.keys(): sys_info = file_io.load_sys_info(Path(self.__args.path[0][0], "sysinfo.csv")) - self.generate_configs(arch, args.config_dir, args.list_kernels, args.filter_metrics, sys_info) - print( - tabulate( - pd.DataFrame.from_dict( - self._arch_configs[args.list_metrics].metric_list, - orient="index", - columns=["Metric"], - ), - headers="keys", - tablefmt="fancy_grid" - ), - file=self._output - ) + self.generate_configs(arch, args.config_dir, args.list_kernels, args.filter_metrics, sys_info.iloc[0]) + + for key, value in self._arch_configs[args.list_metrics].metric_list.items(): + prefix = "" + if "." not in str(key): + prefix = "" + elif str(key).count(".") == 1: + prefix = "\t" + else: + prefix = "\t\t" + print(prefix + key, "->", value) sys.exit(0) else: error("Unsupported arch") @@ -149,7 +147,7 @@ class OmniAnalyze_Base(): def sanitize(self): """Perform sanitization of inputs """ - if not self.__args.list_metrics and not self.__args.path: + if not self.__args.path: error("The following arguments are required: -p/--path") # verify not accessing parent directories if ".." in str(self.__args.path): diff --git a/projects/rocprofiler-compute/src/omniperf_soc/analysis_configs/gfx908/0300_mem_chart.yaml b/projects/rocprofiler-compute/src/omniperf_soc/analysis_configs/gfx908/0300_mem_chart.yaml index acdc18c56c..7e6cdee8f1 100644 --- a/projects/rocprofiler-compute/src/omniperf_soc/analysis_configs/gfx908/0300_mem_chart.yaml +++ b/projects/rocprofiler-compute/src/omniperf_soc/analysis_configs/gfx908/0300_mem_chart.yaml @@ -10,6 +10,7 @@ Panel Config: data source: - metric_table: id: 301 + title: Memory Chart header: metric: Metric #alias: #alias diff --git a/projects/rocprofiler-compute/src/omniperf_soc/analysis_configs/gfx90a/0300_mem_chart.yaml b/projects/rocprofiler-compute/src/omniperf_soc/analysis_configs/gfx90a/0300_mem_chart.yaml index acdc18c56c..7e6cdee8f1 100644 --- a/projects/rocprofiler-compute/src/omniperf_soc/analysis_configs/gfx90a/0300_mem_chart.yaml +++ b/projects/rocprofiler-compute/src/omniperf_soc/analysis_configs/gfx90a/0300_mem_chart.yaml @@ -10,6 +10,7 @@ Panel Config: data source: - metric_table: id: 301 + title: Memory Chart header: metric: Metric #alias: #alias diff --git a/projects/rocprofiler-compute/src/omniperf_soc/analysis_configs/gfx942/0200_system-speed-of-light.yaml b/projects/rocprofiler-compute/src/omniperf_soc/analysis_configs/gfx942/0200_system-speed-of-light.yaml index 41a494c02b..bf9f3e0de0 100644 --- a/projects/rocprofiler-compute/src/omniperf_soc/analysis_configs/gfx942/0200_system-speed-of-light.yaml +++ b/projects/rocprofiler-compute/src/omniperf_soc/analysis_configs/gfx942/0200_system-speed-of-light.yaml @@ -11,6 +11,7 @@ Panel Config: data source: - metric_table: id: 201 + title: Speed-of-Light header: metric: Metric value: Value diff --git a/projects/rocprofiler-compute/src/omniperf_soc/analysis_configs/gfx942/0300_mem_chart.yaml b/projects/rocprofiler-compute/src/omniperf_soc/analysis_configs/gfx942/0300_mem_chart.yaml index 4a4982ca52..176b39950a 100644 --- a/projects/rocprofiler-compute/src/omniperf_soc/analysis_configs/gfx942/0300_mem_chart.yaml +++ b/projects/rocprofiler-compute/src/omniperf_soc/analysis_configs/gfx942/0300_mem_chart.yaml @@ -10,6 +10,7 @@ Panel Config: data source: - metric_table: id: 301 + title: Memory Chart header: metric: Metric #alias: #alias diff --git a/projects/rocprofiler-compute/src/omniperf_soc/analysis_configs/gfx942/1900_memory_chart.yaml b/projects/rocprofiler-compute/src/omniperf_soc/analysis_configs/gfx942/1900_memory_chart.yaml deleted file mode 100644 index 98c7d42eb9..0000000000 --- a/projects/rocprofiler-compute/src/omniperf_soc/analysis_configs/gfx942/1900_memory_chart.yaml +++ /dev/null @@ -1,274 +0,0 @@ ---- -# Add description/tips for each metric in this section. -# So it could be shown in hover. -Metric Description: - -# Define the panel properties and properties of each metric in the panel. -Panel Config: - id: 1900 - title: Memory Chart Analysis - data source: - - metric_table: - id: 1901 - title: # subtitle for this table(optional) - header: - metric: Metric - value: Value - alias: Alias - tips: Tips - metric: - Wave Life: - value: - ROUND(AVG(((4 * (SQ_WAVE_CYCLES / SQ_WAVES)) if (SQ_WAVES != 0) else - None)), 0) - alias: wave_life_ - tips: - Active CUs: - value: CONCAT(CONCAT($numActiveCUs, "/"), $numCU) - alias: active_cu_ - tips: - SALU: - value: ROUND(AVG((SQ_INSTS_SALU / $denom)), 0) - alias: salu_ - tips: - SMEM: - value: ROUND(AVG((SQ_INSTS_SMEM / $denom)), 0) - alias: smem_ - tips: - VALU: - value: ROUND(AVG((SQ_INSTS_VALU / $denom)), 0) - alias: valu_ - tips: - MFMA: - value: ROUND(AVG((SQ_INSTS_MFMA / $denom)), 0) - alias: mfma_ - tips: - VMEM: - value: ROUND(AVG((SQ_INSTS_VMEM / $denom)), 0) - alias: vmem_ - tips: - LDS: - value: ROUND(AVG((SQ_INSTS_LDS / $denom)), 0) - alias: lds_ - tips: - GWS: - value: ROUND(AVG((SQ_INSTS_GDS / $denom)), 0) - alias: gws_ - tips: - BR: - value: ROUND(AVG((SQ_INSTS_BRANCH / $denom)), 0) - alias: br_ - tips: - VGPR: - value: ROUND(AVG(vgpr), 0) - alias: vgpr_ - tips: - SGPR: - value: ROUND(AVG(sgpr), 0) - alias: sgpr_ - tips: - LDS Allocation: - value: ROUND(AVG(lds), 0) - alias: lds_alloc_ - tips: - Scratch Allocation: - value: ROUND(AVG(scr), 0) - alias: scratch_alloc_ - tips: - Wavefronts: - value: ROUND(AVG(SPI_CSN_WAVE), 0) - alias: wavefronts_ - tips: - Workgroups: - value: ROUND(AVG(SPI_CSN_NUM_THREADGROUPS), 0) - alias: workgroups_ - tips: - LDS Req: - value: ROUND(AVG((SQ_INSTS_LDS / $denom)), 0) - alias: lds_req_ - tips: - IL1 Fetch: - value: ROUND(AVG((SQC_ICACHE_REQ / $denom)), 0) - alias: il1_fetch_ - tips: - IL1 Hit: - value: ROUND((AVG((SQC_ICACHE_HITS / SQC_ICACHE_REQ)) * 100), 0) - alias: il1_hit_ - tips: - IL1_L2 Rd: - value: ROUND(AVG((SQC_TC_INST_REQ / $denom)), 0) - alias: il1_l2_req_ - tips: - vL1D Rd: - value: ROUND(AVG((SQC_DCACHE_REQ / $denom)), 0) - alias: sl1_rd_ - tips: - vL1D Hit: - value: - ROUND((AVG(((SQC_DCACHE_HITS / SQC_DCACHE_REQ) if (SQC_DCACHE_REQ != - 0) else None)) * 100), 0) - alias: sl1_hit_ - tips: - vL1D_L2 Rd: - value: ROUND(AVG((SQC_TC_DATA_READ_REQ / $denom)), 0) - alias: sl1_l2_rd_ - tips: - vL1D_L2 Wr: - value: ROUND(AVG((SQC_TC_DATA_WRITE_REQ / $denom)), 0) - alias: sl1_l2_wr_ - tips: - vL1D_L2 Atomic: - value: ROUND(AVG((SQC_TC_DATA_ATOMIC_REQ / $denom)), 0) - alias: sl1_l2_atom_ - tips: - VL1 Rd: - value: ROUND(AVG((TCP_TOTAL_READ_sum / $denom)), 0) - alias: vl1_rd_ - tips: - VL1 Wr: - value: ROUND(AVG((TCP_TOTAL_WRITE_sum / $denom)), 0) - alias: vl1_wr_ - tips: - VL1 Atomic: - value: - ROUND(AVG(((TCP_TOTAL_ATOMIC_WITH_RET_sum + TCP_TOTAL_ATOMIC_WITHOUT_RET_sum) - / $denom)), 0) - alias: vl1_atom_ - tips: - VL1 Hit: - value: - ROUND(AVG(((100 - ((100 * (((TCP_TCC_READ_REQ_sum + TCP_TCC_WRITE_REQ_sum) - + TCP_TCC_ATOMIC_WITH_RET_REQ_sum) + TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum)) - / TCP_TOTAL_CACHE_ACCESSES_sum)) if (TCP_TOTAL_CACHE_ACCESSES_sum != 0) else - None)), 0) - alias: vl1_hit_ - tips: - VL1 Lat: - value: - # ROUND(AVG(((TCP_TCP_LATENCY_sum / TCP_TA_TCP_STATE_READ_sum) if (TCP_TA_TCP_STATE_READ_sum - # != 0) else None)), 0) - alias: vl1_lat_ - tips: - VL1_L2 Rd: - value: ROUND(AVG((TCP_TCC_READ_REQ_sum / $denom)), 0) - alias: vl1_l2_rd_ - tips: - VL1_L2 Wr: - value: ROUND(AVG((TCP_TCC_WRITE_REQ_sum / $denom)), 0) - alias: vl1_l2_wr_ - tips: - vL1_L2 Atomic: - value: - ROUND(AVG(((TCP_TCC_ATOMIC_WITH_RET_REQ_sum + TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum) - / $denom)), 0) - alias: vl1_l2_atom_ - tips: - L2 Rd: - value: ROUND(AVG((TCC_READ_sum / $denom)), 0) - alias: l2_rd_ - tips: - L2 Wr: - value: ROUND(AVG((TCC_WRITE_sum / $denom)), 0) - alias: l2_wr_ - tips: - L2 Atomic: - value: ROUND(AVG((TCC_ATOMIC_sum / $denom)), 0) - alias: l2_atom_ - tips: - L2 Hit: - value: - ROUND(AVG((((100 * TCC_HIT_sum) / (TCC_HIT_sum + TCC_MISS_sum)) if ((TCC_HIT_sum - + TCC_MISS_sum) != 0) else None)), 0) - alias: l2_hit_ - tips: - L2 Rd Lat: - value: - # ROUND(AVG(((TCP_TCC_READ_REQ_LATENCY_sum / (TCP_TCC_READ_REQ_sum + TCP_TCC_ATOMIC_WITH_RET_REQ_sum)) - # if ((TCP_TCC_READ_REQ_sum + TCP_TCC_ATOMIC_WITH_RET_REQ_sum) != 0) else None)), - # 0) - alias: l2_rd_lat_ - tips: - L2 Wr Lat: - value: - # ROUND(AVG(((TCP_TCC_WRITE_REQ_LATENCY_sum / (TCP_TCC_WRITE_REQ_sum + - # TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum)) if ((TCP_TCC_WRITE_REQ_sum + TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum) - # != 0) else None)), 0) - alias: l2_wr_lat_ - tips: - Fabric Rd Lat: - value: - ROUND(AVG(((TCC_EA0_RDREQ_LEVEL_sum / TCC_EA0_RDREQ_sum) if (TCC_EA0_RDREQ_sum - != 0) else None)), 0) - alias: fabric_rd_lat_ - tips: - Fabric Wr Lat: - value: - ROUND(AVG(((TCC_EA0_WRREQ_LEVEL_sum / TCC_EA0_WRREQ_sum) if (TCC_EA0_WRREQ_sum - != 0) else None)), 0) - alias: fabric_wr_lat_ - tips: - Fabric Atomic Lat: - value: - ROUND(AVG(((TCC_EA0_ATOMIC_LEVEL_sum / TCC_EA0_ATOMIC_sum) if (TCC_EA0_ATOMIC_sum - != 0) else None)), 0) - alias: fabric_atom_lat_ - tips: - Fabric_L2 Rd: - value: ROUND(AVG((TCC_EA0_RDREQ_sum / $denom)), 0) - alias: l2_fabric_rd_ - tips: - Fabric_L2 Wr: - value: ROUND(AVG((TCC_EA0_WRREQ_sum / $denom)), 0) - alias: l2_fabric_wr_ - tips: - Fabric_l2 Atomic: - value: ROUND(AVG((TCC_EA0_ATOMIC_sum / $denom)), 0) - alias: l2_fabric_atom_ - tips: - HBM Rd: - value: ROUND(AVG((TCC_EA0_RDREQ_DRAM_sum / $denom)), 0) - alias: hbm_rd_ - tips: - HBM Wr: - value: ROUND(AVG((TCC_EA0_WRREQ_DRAM_sum / $denom)), 0) - alias: hbm_wr_ - tips: - LDS Util: - value: - ROUND(AVG(((100 * SQ_LDS_IDX_ACTIVE) / (GRBM_GUI_ACTIVE * $numCU))), - 0) - alias: lds_util_ - tips: - VL1 Coalesce: - value: - ROUND(AVG(((((TA_TOTAL_WAVEFRONTS_sum * 64) * 100) / (TCP_TOTAL_ACCESSES_sum - * 4)) if (TCP_TOTAL_ACCESSES_sum != 0) else 0)), 0) - alias: vl1_coales_ - tips: - VL1 Stall: - value: - ROUND(AVG((((100 * TCP_TCR_TCP_STALL_CYCLES_sum) / TCP_GATE_EN1_sum) - if (TCP_GATE_EN1_sum != 0) else None)), 0) - alias: vl1_stall_ - tips: - LDS Lat: - value: ROUND(AVG(((SQ_ACCUM_PREV_HIRES / SQ_INSTS_LDS) - if (SQ_INSTS_LDS != 0) else None)), 0) - alias: lds_lat_ - coll_level: SQ_INST_LEVEL_LDS - tips: - vL1D Lat: - value: ROUND(AVG(((SQ_ACCUM_PREV_HIRES / SQC_DCACHE_REQ) - if (SQC_DCACHE_REQ != 0) else None)), 0) - alias: sl1_lat_ - tips: - IL1 Lat: - value: ROUND(AVG(((SQ_ACCUM_PREV_HIRES / SQC_ICACHE_REQ) - if (SQC_ICACHE_REQ != 0) else None)), 0) - alias: il1_lat_ - tips: - Wave Occupancy: - value: ROUND(AVG(((SQ_ACCUM_PREV_HIRES / GRBM_GUI_ACTIVE) / $numActiveCUs)), 0) - alias: wave_occ_ - coll_level: SQ_LEVEL_WAVES - tips: diff --git a/projects/rocprofiler-compute/src/utils/parser.py b/projects/rocprofiler-compute/src/utils/parser.py index dbb645d3f5..9576a45685 100644 --- a/projects/rocprofiler-compute/src/utils/parser.py +++ b/projects/rocprofiler-compute/src/utils/parser.py @@ -493,7 +493,11 @@ def build_dfs(archConfigs, filter_metrics, sys_info): for type, data_config in data_source.items(): if type == "metric_table": headers = ["Dispatch_ID"] - + data_source_idx = str(data_config["id"] // 100) + if (data_source_idx != 0 or + data_source_idx in filter_metrics + ): + metric_list[data_source_idx] = panel["title"] if ( "cli_style" in data_config and data_config["cli_style"] == "simple_box" @@ -541,6 +545,8 @@ def build_dfs(archConfigs, filter_metrics, sys_info): values.append(metric_idx) values.append(key) + metric_list[data_source_idx] = data_config["title"] + if ( "cli_style" in data_config and data_config["cli_style"] == "simple_box" @@ -850,10 +856,10 @@ def apply_filters(workload, dir, is_gui, debug): # Verify valid kernel filter kernels_df = pd.read_csv(os.path.join(dir, "pmc_kernel_top.csv")) for kernel_id in workload.filter_kernel_ids: - if kernel_id > len(kernels_df["KernelName"]): + if kernel_id > len(kernels_df["Kernel_Name"]): error( "{} is an invalid kernel id. Please enter an id between 0-{}".format( - kernel_id, len(kernels_df["KernelName"]) + kernel_id, len(kernels_df["Kernel_Name"]) ) ) kernels = [] @@ -863,19 +869,19 @@ def apply_filters(workload, dir, is_gui, debug): kernel_top_df["S"] = "" for kernel_id in workload.filter_kernel_ids: # print("------- ", kernel_id) - kernels.append(kernel_top_df.loc[kernel_id, "KernelName"]) + kernels.append(kernel_top_df.loc[kernel_id, "Kernel_Name"]) kernel_top_df.loc[kernel_id, "S"] = "*" if kernels: # print("fitlered df:", len(df.index)) ret_df = ret_df.loc[ - ret_df[schema.pmc_perf_file_prefix]["KernelName"].isin(kernels) + ret_df[schema.pmc_perf_file_prefix]["Kernel_Name"].isin(kernels) ] else: if debug: print("GUI kernel filtering") ret_df = ret_df.loc[ - ret_df[schema.pmc_perf_file_prefix]["KernelName"].isin( + ret_df[schema.pmc_perf_file_prefix]["Kernel_Name"].isin( workload.filter_kernel_ids ) ]