diff --git a/rocclr/runtime/device/devprogram.cpp b/rocclr/runtime/device/devprogram.cpp index a28cfb1bb3..6881d275f3 100644 --- a/rocclr/runtime/device/devprogram.cpp +++ b/rocclr/runtime/device/devprogram.cpp @@ -1403,6 +1403,17 @@ bool Program::linkImpl(amd::option::Options* options) { } } +static void dumpCodeObject(const std::string& image) { + char fname[30]; + static std::atomic index; + sprintf(fname, "_code_object%04d.o", index++); + LogPrintfInfo("Code object saved in %s\n", fname); + std::ofstream ofs; + ofs.open(fname, std::ios::binary); + ofs << image; + ofs.close(); +} + // ================================================================================================ #if defined(USE_COMGR_LIBRARY) bool Program::linkImplLC(amd::option::Options* options) { @@ -1445,6 +1456,9 @@ bool Program::linkImplLC(amd::option::Options* options) { case ACL_TYPE_ISA: { amd::Comgr::destroy_data_set(inputs); binary_t isaBinary = binary(); + if (OCL_DUMP_CODE_OBJECT) { + dumpCodeObject(std::string{(const char*)isaBinary.first, isaBinary.second}); + } return setKernels(options, const_cast(isaBinary.first), isaBinary.second); break; } diff --git a/rocclr/runtime/utils/flags.hpp b/rocclr/runtime/utils/flags.hpp index 1c48880088..24226ab715 100644 --- a/rocclr/runtime/utils/flags.hpp +++ b/rocclr/runtime/utils/flags.hpp @@ -181,6 +181,8 @@ release(cstring, CUDA_VISIBLE_DEVICES, "", \ "Only devices whose index is present in the sequence are visible to HIP") \ release(bool, GPU_ENABLE_WGP_MODE, true, \ "Enables WGP Mode in HW if available") \ +release(bool, OCL_DUMP_CODE_OBJECT, false, \ + "Enable dump code object") \ namespace amd {