From 42d33029dce9de44c8f26a3755dfa4cf8354ea94 Mon Sep 17 00:00:00 2001 From: Sarbojit Sarkar Date: Wed, 1 Sep 2021 11:56:28 +0000 Subject: [PATCH] SWDEV-300655 - Added thread ID to hip trace Change-Id: I9234d4ec93e7687cd0a5d1bd930bd4f80936311b --- rocclr/device/rocm/rocblit.cpp | 21 ++++++++------------- rocclr/device/rocm/rocvirtual.cpp | 29 +++++++++++++---------------- rocclr/utils/debug.cpp | 19 +++++++++++++------ 3 files changed, 34 insertions(+), 35 deletions(-) diff --git a/rocclr/device/rocm/rocblit.cpp b/rocclr/device/rocm/rocblit.cpp index c89da0cf3b..d3b295e49e 100644 --- a/rocclr/device/rocm/rocblit.cpp +++ b/rocclr/device/rocm/rocblit.cpp @@ -456,9 +456,8 @@ bool DmaBlitManager::copyBufferRect(device::Memory& srcMemory, device::Memory& d // Copy memory line by line ClPrint(amd::LOG_DEBUG, amd::LOG_COPY, - "[%zx]!\t HSA Asycn Copy Rect wait_event=0x%zx, completion_signal=0x%zx", - std::this_thread::get_id(), (wait_events.size() != 0) ? wait_events[0].handle : 0, - active.handle); + "HSA Asycn Copy Rect wait_event=0x%zx, completion_signal=0x%zx", + (wait_events.size() != 0) ? wait_events[0].handle : 0, active.handle); hsa_status_t status = hsa_amd_memory_async_copy_rect(&dstMem, &offset, &srcMem, &offset, &dim, agent, direction, wait_events.size(), &wait_events[0], active); if (status != HSA_STATUS_SUCCESS) { @@ -478,9 +477,8 @@ bool DmaBlitManager::copyBufferRect(device::Memory& srcMemory, device::Memory& d // Copy memory line by line ClPrint(amd::LOG_DEBUG, amd::LOG_COPY, - "[%zx]!\t HSA Asycn Copy wait_event=0x%zx, completion_signal=0x%zx", - std::this_thread::get_id(), (wait_events.size() != 0) ? wait_events[0].handle : 0, - active.handle); + "HSA Asycn Copy wait_event=0x%zx, completion_signal=0x%zx", + (wait_events.size() != 0) ? wait_events[0].handle : 0, active.handle); hsa_status_t status = hsa_amd_memory_async_copy( (reinterpret_cast
(dst) + dstOffset), dstAgent, (reinterpret_cast(src) + srcOffset), srcAgent, @@ -666,9 +664,8 @@ bool DmaBlitManager::hsaCopy(const Memory& srcMemory, const Memory& dstMemory, // Use SDMA to transfer the data ClPrint(amd::LOG_DEBUG, amd::LOG_COPY, - "[%zx]!\t HSA Asycn Copy wait_event=0x%zx, completion_signal=0x%zx", - std::this_thread::get_id(), (wait_events.size() != 0) ? wait_events[0].handle : 0, - active.handle); + "HSA Asycn Copy wait_event=0x%zx, completion_signal=0x%zx", + (wait_events.size() != 0) ? wait_events[0].handle : 0, active.handle); status = hsa_amd_memory_async_copy(dst, dstAgent, src, srcAgent, size[0], wait_events.size(), &wait_events[0], active); @@ -724,8 +721,7 @@ bool DmaBlitManager::hsaCopyStaged(const_address hostSrc, address hostDst, size_ memcpy(hsaBuffer, hostSrc + offset, size); ClPrint(amd::LOG_DEBUG, amd::LOG_COPY, - "[%zx]!\t HSA Async Copy completion_signal=0x%zx", - std::this_thread::get_id(), active.handle); + "HSA Async Copy completion_signal=0x%zx", active.handle); status = hsa_amd_memory_async_copy(hostDst + offset, dev().getBackendDevice(), hsaBuffer, srcAgent, size, 0, nullptr, active); if (status != HSA_STATUS_SUCCESS) { @@ -754,8 +750,7 @@ bool DmaBlitManager::hsaCopyStaged(const_address hostSrc, address hostDst, size_ // Copy data from Device to Host ClPrint(amd::LOG_DEBUG, amd::LOG_COPY, - "[%zx]!\t HSA Async Copy completion_signal=0x%zx", - std::this_thread::get_id(), active.handle); + "HSA Async Copy completion_signal=0x%zx", active.handle); status = hsa_amd_memory_async_copy(hsaBuffer, dstAgent, hostSrc + offset, dev().getBackendDevice(), size, 0, nullptr, active); if (status == HSA_STATUS_SUCCESS) { diff --git a/rocclr/device/rocm/rocvirtual.cpp b/rocclr/device/rocm/rocvirtual.cpp index 95d92d0b8e..f616c2fd02 100644 --- a/rocclr/device/rocm/rocvirtual.cpp +++ b/rocclr/device/rocm/rocvirtual.cpp @@ -509,8 +509,8 @@ bool VirtualGPU::HwQueueTracker::CpuWaitForSignal(ProfilingSignal* signal) { signal->ts_ = nullptr; } else if (!signal->done_) { amd::ScopedLock lock(signal->LockSignalOps()); - ClPrint(amd::LOG_DEBUG, amd::LOG_COPY, "[%zx]!\t Host wait on completion_signal=0x%zx", - std::this_thread::get_id(), signal->signal_.handle); + ClPrint(amd::LOG_DEBUG, amd::LOG_COPY, "Host wait on completion_signal=0x%zx", + signal->signal_.handle); if (!WaitForSignal(signal->signal_, gpu_.ActiveWait())) { LogPrintfError("Failed signal [0x%lx] wait", signal->signal_); return false; @@ -663,9 +663,8 @@ bool VirtualGPU::processMemObjects(const amd::Kernel& kernel, const_address para const void* globalAddress = *reinterpret_cast(params + desc.offset_); ClPrint(amd::LOG_INFO, amd::LOG_KERN, - "[%zx]!\tArg%d: %s %s = ptr:%p obj:[%p-%p]", - std::this_thread::get_id(), i, desc.typeName_.c_str(), desc.name_.c_str(), - globalAddress, gpuMem->getDeviceMemory(), + "Arg%d: %s %s = ptr:%p obj:[%p-%p]", i, desc.typeName_.c_str(), + desc.name_.c_str(), globalAddress, gpuMem->getDeviceMemory(), reinterpret_cast
(gpuMem->getDeviceMemory()) + mem->getSize()); // Validate memory for a dependency in the queue @@ -743,8 +742,7 @@ bool VirtualGPU::processMemObjects(const amd::Kernel& kernel, const_address para WriteAqlArgAt(const_cast
(params), &mem, sizeof(void*), it->second); } ClPrint(amd::LOG_INFO, amd::LOG_KERN, - "[%zx]!\tArg%d: %s %s = val:%lld", - std::this_thread::get_id(), i, desc.typeName_.c_str(), desc.name_.c_str(), + "Arg%d: %s %s = val:%lld", i, desc.typeName_.c_str(), desc.name_.c_str(), *reinterpret_cast(srcArgPtr)); } else if (desc.type_ == T_SAMPLER) { @@ -816,12 +814,12 @@ bool VirtualGPU::dispatchGenericAqlPacket( packet_store_release(reinterpret_cast(aql_loc), header, rest); } ClPrint(amd::LOG_DEBUG, amd::LOG_AQL, - "[%zx] HWq=0x%zx, Dispatch Header = " + "HWq=0x%zx, Dispatch Header = " "0x%x (type=%d, barrier=%d, acquire=%d, release=%d), " "setup=%d, grid=[%zu, %zu, %zu], workgroup=[%zu, %zu, %zu], private_seg_size=%zu, " "group_seg_size=%zu, kernel_obj=0x%zx, kernarg_address=0x%zx, completion_signal=0x%zx", - std::this_thread::get_id(), gpu_queue_, - header, extractAqlBits(header, HSA_PACKET_HEADER_TYPE, HSA_PACKET_HEADER_WIDTH_TYPE), + gpu_queue_, header, + extractAqlBits(header, HSA_PACKET_HEADER_TYPE, HSA_PACKET_HEADER_WIDTH_TYPE), extractAqlBits(header, HSA_PACKET_HEADER_BARRIER, HSA_PACKET_HEADER_WIDTH_BARRIER), extractAqlBits(header, HSA_PACKET_HEADER_SCACQUIRE_FENCE_SCOPE, @@ -953,10 +951,10 @@ void VirtualGPU::dispatchBarrierPacket(uint16_t packetHeader, bool skipSignal) { hsa_signal_store_screlease(gpu_queue_->doorbell_signal, index); ClPrint(amd::LOG_DEBUG, amd::LOG_AQL, - "[%zx] HWq=0x%zx, BarrierAND Header = 0x%x (type=%d, barrier=%d, acquire=%d," + "HWq=0x%zx, BarrierAND Header = 0x%x (type=%d, barrier=%d, acquire=%d," " release=%d), " "dep_signal=[0x%zx, 0x%zx, 0x%zx, 0x%zx, 0x%zx], completion_signal=0x%zx", - std::this_thread::get_id(), gpu_queue_, packetHeader, + gpu_queue_, packetHeader, extractAqlBits(packetHeader, HSA_PACKET_HEADER_TYPE, HSA_PACKET_HEADER_WIDTH_TYPE), extractAqlBits(packetHeader, HSA_PACKET_HEADER_BARRIER, @@ -2239,10 +2237,10 @@ void VirtualGPU::dispatchBarrierValuePacket(const hsa_amd_barrier_value_packet_t hsa_signal_store_screlease(gpu_queue_->doorbell_signal, index); ClPrint(amd::LOG_DEBUG, amd::LOG_AQL, - "[%zx] HWq=0x%zx, BarrierValue Header = 0x%x AmdFormat = 0x%x ", + "HWq=0x%zx, BarrierValue Header = 0x%x AmdFormat = 0x%x ", "(type=%d, barrier=%d, acquire=%d, release=%d), " "completion_signal=0x%zx value = 0x%llx mask = 0x%llx cond: %d (GTE: %d EQ: %d NE: %d)", - std::this_thread::get_id(), gpu_queue_, header.header, header.AmdFormat, + gpu_queue_, header.header, header.AmdFormat, extractAqlBits(header.header, HSA_PACKET_HEADER_TYPE, HSA_PACKET_HEADER_WIDTH_TYPE), extractAqlBits(header.header, HSA_PACKET_HEADER_BARRIER, HSA_PACKET_HEADER_WIDTH_BARRIER), extractAqlBits(header.header, HSA_PACKET_HEADER_SCACQUIRE_FENCE_SCOPE, @@ -2655,8 +2653,7 @@ bool VirtualGPU::submitKernelInternal(const amd::NDRangeContainer& sizes, const return false; } - ClPrint(amd::LOG_INFO, amd::LOG_KERN, "[%zx]!\tShaderName : %s", - std::this_thread::get_id(), gpuKernel.name().c_str()); + ClPrint(amd::LOG_INFO, amd::LOG_KERN, "ShaderName : %s", gpuKernel.name().c_str()); // Check if runtime has to setup hidden arguments for (uint32_t i = signature.numParameters(); i < signature.numParametersAll(); ++i) { diff --git a/rocclr/utils/debug.cpp b/rocclr/utils/debug.cpp index 6a43a0d942..8127128030 100644 --- a/rocclr/utils/debug.cpp +++ b/rocclr/utils/debug.cpp @@ -29,6 +29,8 @@ #include #include #include +#include +#include #ifdef _WIN32 #include @@ -96,13 +98,15 @@ void log_timestamped(LogLevel level, const char* file, int line, const char* mes // ================================================================================================ void log_printf(LogLevel level, const char* file, int line, const char* format, ...) { va_list ap; - + std::stringstream str_thrd_id; + str_thrd_id << std::hex << std::this_thread::get_id(); va_start(ap, format); char message[4096]; vsnprintf(message, sizeof(message), format, ap); va_end(ap); uint64_t timeUs = Os::timeNanos() / 1000ULL; - fprintf(outFile, ":%d:%-25s:%-4d: %010lld us: %s\n", level, file, line, timeUs/1ULL, message); + fprintf(outFile, ":%d:%-25s:%-4d: %010lld us: %-5d: [tid:0x%s] %s\n", level, file, line, + timeUs/1ULL, getpid(), str_thrd_id.str().c_str(), message); fflush(outFile); } @@ -110,17 +114,20 @@ void log_printf(LogLevel level, const char* file, int line, const char* format, void log_printf(LogLevel level, const char* file, int line, uint64_t* start, const char* format, ...) { va_list ap; - + std::stringstream str_thrd_id; + str_thrd_id << std::hex << std::this_thread::get_id(); va_start(ap, format); char message[4096]; vsnprintf(message, sizeof(message), format, ap); va_end(ap); uint64_t timeUs = Os::timeNanos() / 1000ULL; if (start == 0 || *start == 0) { - fprintf(outFile, ":%d:%-25s:%-4d: %010lld us: %s\n", level, file, line, timeUs/1ULL, message); + fprintf(outFile, ":%d:%-25s:%-4d: %010lld us: %-5d: [tid:0x%s] %s\n", level, file, line, + timeUs/1ULL, getpid(), str_thrd_id.str().c_str(), message); } else { - fprintf(outFile, ":%d:%-25s:%-4d: %010lld us: %s: duration: %lld us\n", level, file, line, - timeUs/1ULL, message, (timeUs - *start)/1ULL); + fprintf(outFile, ":%d:%-25s:%-4d: %010lld us: %-5d: [tid:0x%s] %s: duration: %lld us\n", + level, file, line, timeUs/1ULL, getpid(), str_thrd_id.str().c_str(), message, + (timeUs - *start)/1ULL); } fflush(outFile); if (*start == 0) {