diff --git a/docs/how-to/profile/mode.rst b/docs/how-to/profile/mode.rst index f8f0b894ad..d6b9c7ce89 100644 --- a/docs/how-to/profile/mode.rst +++ b/docs/how-to/profile/mode.rst @@ -441,9 +441,9 @@ successfully. .. note:: - ROCm Compute Profiler generates two roofline outputs to organize results and reduce - clutter. One chart plots FP32/FP64 performance while the other plots I8/FP16 - performance. + ROCm Compute Profiler generates three roofline outputs to organize results and reduce + clutter. One chart plots FP32/FP64 performance, one plots I8/FP16 + performance, and the other plots FP8 performance. The following image is a sample ``empirRoof_gpu-0_int8_fp16.pdf`` roofline plot. diff --git a/src/rocprof_compute_soc/profile_configs/gfx940/roofline/pmc_roof_perf.txt b/src/rocprof_compute_soc/profile_configs/gfx940/roofline/pmc_roof_perf.txt index 55659a507f..94b213f812 100644 --- a/src/rocprof_compute_soc/profile_configs/gfx940/roofline/pmc_roof_perf.txt +++ b/src/rocprof_compute_soc/profile_configs/gfx940/roofline/pmc_roof_perf.txt @@ -4,6 +4,9 @@ pmc: SQ_INSTS_VALU_ADD_F64 SQ_INSTS_VALU_MUL_F64 SQ_INSTS_VALU_FMA_F64 SQ_ pmc: SQ_LDS_IDX_ACTIVE SQ_LDS_BANK_CONFLICT TCP_TOTAL_CACHE_ACCESSES_sum TCP_TCC_WRITE_REQ_sum TCP_TCC_ATOMIC_WITH_RET_REQ_sum TCP_TCC_ATOMIC_WITHOUT_RET_REQ_sum +#ROOF:MI300 +pmc: SQ_INSTS_VALU_MFMA_MOPS_F8 + range: gpu: kernels: diff --git a/src/roofline.py b/src/roofline.py index e9bff28cf5..bd76480dab 100644 --- a/src/roofline.py +++ b/src/roofline.py @@ -130,6 +130,9 @@ class Roofline: dtype="I8", fig=fp16_fig, ) + if self.__mspec.gpu_series != "MI200": + fig_fp8 = self.generate_plot(dtype="FP8") + # Create a legend and distinct kernel markers. This can be saved, optionally self.__figure = go.Figure( go.Scatter( @@ -163,6 +166,11 @@ class Roofline: self.__run_parameters["workload_dir"] + "/empirRoof_gpu-{}_int8_fp16.pdf".format(dev_id) ) + if self.__mspec.gpu_series != "MI200": + fig_fp8.write_image( + self.__run_parameters["workload_dir"] + + "/empirRoof_gpu-{}_fp8.pdf".format(dev_id) + ) # only save a legend if kernel_names option is toggled if self.__run_parameters["include_kernel_names"]: self.__figure.write_image( @@ -178,6 +186,11 @@ class Roofline: self.__run_parameters["workload_dir"] + "/empirRoof_gpu-{}_int8_fp16.pdf".format(dev_id) ) + if self.__mspec.gpu_series != "MI200": + fig_fp8.write_image( + self.__run_parameters["workload_dir"] + + "/empirRoof_gpu-{}_fp8.pdf".format(dev_id) + ) if self.__run_parameters["include_kernel_names"]: self.__figure.write_image( self.__run_parameters["workload_dir"] + "/kernelName_legend.pdf" diff --git a/src/utils/roofline_calc.py b/src/utils/roofline_calc.py index 46f3800f44..504d9c1fc9 100644 --- a/src/utils/roofline_calc.py +++ b/src/utils/roofline_calc.py @@ -56,6 +56,7 @@ class AI_Data: total_flops: float valu_flops: float + mfma_flops_f8: float mfma_flops_f16: float mfma_flops_bf16: float mfma_flops_f32: float @@ -193,11 +194,11 @@ def calc_ai(mspec, sort_type, ret_df): df = df.sort_values(by=["Kernel_Name"]) df = df.reset_index(drop=True) - total_flops = valu_flops = mfma_flops_bf16 = mfma_flops_f16 = mfma_iops_i8 = ( - mfma_flops_f32 - ) = mfma_flops_f64 = lds_data = L1cache_data = L2cache_data = hbm_data = calls = ( - totalDuration - ) = avgDuration = 0.0 + total_flops = valu_flops = mfma_flops_f8 = mfma_flops_bf16 = mfma_flops_f16 = ( + mfma_iops_i8 + ) = mfma_flops_f32 = mfma_flops_f64 = lds_data = L1cache_data = L2cache_data = ( + hbm_data + ) = calls = totalDuration = avgDuration = 0.0 kernelName = "" @@ -250,6 +251,8 @@ def calc_ai(mspec, sort_type, ret_df): + (df["SQ_INSTS_VALU_MFMA_MOPS_F32"][idx] * 512) + (df["SQ_INSTS_VALU_MFMA_MOPS_F64"][idx] * 512) ) + if mspec.gpu_series != "MI200": + total_flops += df["SQ_INSTS_VALU_MFMA_MOPS_F8"][idx] * 512 except KeyError: console_debug( "roofline", @@ -288,6 +291,8 @@ def calc_ai(mspec, sort_type, ret_df): pass try: + if mspec.gpu_series != "MI200": + mfma_flops_f8 += df["SQ_INSTS_VALU_MFMA_MOPS_F8"][idx] * 512 mfma_flops_f16 += df["SQ_INSTS_VALU_MFMA_MOPS_F16"][idx] * 512 mfma_flops_bf16 += df["SQ_INSTS_VALU_MFMA_MOPS_BF16"][idx] * 512 mfma_flops_f32 += df["SQ_INSTS_VALU_MFMA_MOPS_F32"][idx] * 512 @@ -388,6 +393,7 @@ def calc_ai(mspec, sort_type, ret_df): calls, total_flops / calls, valu_flops / calls, + mfma_flops_f8 / calls, mfma_flops_f16 / calls, mfma_flops_bf16 / calls, mfma_flops_f32 / calls, @@ -406,11 +412,11 @@ def calc_ai(mspec, sort_type, ret_df): kernelName, idx, calls ) ) - total_flops = valu_flops = mfma_flops_bf16 = mfma_flops_f16 = mfma_iops_i8 = ( - mfma_flops_f32 - ) = mfma_flops_f64 = lds_data = L1cache_data = L2cache_data = hbm_data = ( - calls - ) = totalDuration = avgDuration = 0.0 + total_flops = valu_flops = mfma_flops_f8 = mfma_flops_bf16 = ( + mfma_flops_f16 + ) = mfma_iops_i8 = mfma_flops_f32 = mfma_flops_f64 = lds_data = ( + L1cache_data + ) = L2cache_data = hbm_data = calls = totalDuration = avgDuration = 0.0 if sort_type == "dispatches": myList.append( @@ -419,6 +425,7 @@ def calc_ai(mspec, sort_type, ret_df): calls, total_flops, valu_flops, + mfma_flops_f8, mfma_flops_f16, mfma_flops_bf16, mfma_flops_f32, @@ -432,11 +439,11 @@ def calc_ai(mspec, sort_type, ret_df): avgDuration, ) ) - total_flops = valu_flops = mfma_flops_bf16 = mfma_flops_f16 = mfma_iops_i8 = ( - mfma_flops_f32 - ) = mfma_flops_f64 = lds_data = L1cache_data = L2cache_data = hbm_data = ( - calls - ) = totalDuration = avgDuration = 0.0 + total_flops = valu_flops = mfma_flops_f8 = mfma_flops_bf16 = ( + mfma_flops_f16 + ) = mfma_iops_i8 = mfma_flops_f32 = mfma_flops_f64 = lds_data = ( + L1cache_data + ) = L2cache_data = hbm_data = calls = totalDuration = avgDuration = 0.0 myList.sort(key=lambda x: x.totalDuration, reverse=True) diff --git a/src/utils/rooflines/roofline-rhel8-mi300-rocm6 b/src/utils/rooflines/roofline-rhel8-mi300-rocm6 index 52d025c029..9d5dce7584 100755 Binary files a/src/utils/rooflines/roofline-rhel8-mi300-rocm6 and b/src/utils/rooflines/roofline-rhel8-mi300-rocm6 differ diff --git a/src/utils/rooflines/roofline-sles15sp5-mi300-rocm6 b/src/utils/rooflines/roofline-sles15sp5-mi300-rocm6 index 56ee3beca5..04133f5f84 100755 Binary files a/src/utils/rooflines/roofline-sles15sp5-mi300-rocm6 and b/src/utils/rooflines/roofline-sles15sp5-mi300-rocm6 differ diff --git a/src/utils/rooflines/roofline-ubuntu20_04-mi300-rocm6 b/src/utils/rooflines/roofline-ubuntu20_04-mi300-rocm6 index 6cf6ce1e05..fe441a10e1 100755 Binary files a/src/utils/rooflines/roofline-ubuntu20_04-mi300-rocm6 and b/src/utils/rooflines/roofline-ubuntu20_04-mi300-rocm6 differ diff --git a/tests/test_profile_general.py b/tests/test_profile_general.py index 04eeeeddc3..1083666697 100644 --- a/tests/test_profile_general.py +++ b/tests/test_profile_general.py @@ -121,6 +121,7 @@ ROOF_ONLY_FILES = sorted( [ "empirRoof_gpu-0_fp32_fp64.pdf", "empirRoof_gpu-0_int8_fp16.pdf", + "empirRoof_gpu-0_fp8.pdf", "pmc_perf.csv", "pmc_perf_0.csv", "pmc_perf_1.csv",