From ae7e2ecb854909a041b914744daa3b37578d14c5 Mon Sep 17 00:00:00 2001 From: Saleel Kudchadker Date: Fri, 17 Jan 2025 22:22:05 +0000 Subject: [PATCH] SWDEV-510186 - Improve logging of kernel names - Demangle kernel names in logs Change-Id: I9aa58e8c109becb45ef7fc747d991bd657c4190a [ROCm/clr commit: 9b7e0ad48a8c71fb2e8755afb93660fa53b47d9a] --- projects/clr/rocclr/device/rocm/rockernel.hpp | 22 +++++++++++++++++++ .../clr/rocclr/device/rocm/rocvirtual.cpp | 3 ++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/projects/clr/rocclr/device/rocm/rockernel.hpp b/projects/clr/rocclr/device/rocm/rockernel.hpp index af1ab13df9..40af42ec3e 100644 --- a/projects/clr/rocclr/device/rocm/rockernel.hpp +++ b/projects/clr/rocclr/device/rocm/rockernel.hpp @@ -21,6 +21,7 @@ #pragma once #include +#include #include "rocprogram.hpp" #include "top.hpp" #include "rocprintf.hpp" @@ -32,6 +33,19 @@ namespace amd::roc { #define MAX_INFO_STRING_LEN 0x40 class Kernel : public device::Kernel { + private: + //! Cache demangled name + std::string demangled_name_; + + void initDemangledName() { + if (demangled_name_.empty()) { + int status = 0; + char* demangled = abi::__cxa_demangle(name().c_str(), nullptr, nullptr, &status); + demangled_name_ = (status == 0 && demangled != nullptr) ? demangled : name().c_str(); + free(demangled); + } + } + public: Kernel(std::string name, Program* prog, const uint64_t& kernelCodeHandle, const uint32_t workgroupGroupSegmentByteSize, @@ -46,6 +60,14 @@ class Kernel : public device::Kernel { virtual bool init() = 0; const Program* program() const { return static_cast(&prog_); } + + // Pull demangled name, used only for logging + const std::string& getDemangledName() { + if (demangled_name_.empty()) { + initDemangledName(); + } + return demangled_name_; + } }; class HSAILKernel : public roc::Kernel { diff --git a/projects/clr/rocclr/device/rocm/rocvirtual.cpp b/projects/clr/rocclr/device/rocm/rocvirtual.cpp index 354989fe03..778f7f6be1 100644 --- a/projects/clr/rocclr/device/rocm/rocvirtual.cpp +++ b/projects/clr/rocclr/device/rocm/rocvirtual.cpp @@ -3225,7 +3225,8 @@ bool VirtualGPU::submitKernelInternal(const amd::NDRangeContainer& sizes, } } - ClPrint(amd::LOG_INFO, amd::LOG_KERN, "ShaderName : %s", gpuKernel.name().c_str()); + ClPrint(amd::LOG_INFO, amd::LOG_KERN, "ShaderName : %s", + gpuKernel.getDemangledName().c_str()); amd::NDRange local(sizes.local()); address hidden_arguments = const_cast
(parameters);