From ddba20579d375c2956769b3687d732692c9df7b8 Mon Sep 17 00:00:00 2001 From: SaleelK Date: Mon, 25 Aug 2025 15:13:02 -0700 Subject: [PATCH] SWDEV-551080 - Fix hipMemcpyDeviceToDeviceNoCU path (#683) * hipMemcpyDeviceToDeviceNoCU should always take SDMA path as per the flag usage --- projects/clr/rocclr/device/blit.cpp | 16 +++++++++++++--- projects/clr/rocclr/device/rocm/rocblit.cpp | 16 +++++++++------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/projects/clr/rocclr/device/blit.cpp b/projects/clr/rocclr/device/blit.cpp index 44b02f34fd..8873cf2e4f 100644 --- a/projects/clr/rocclr/device/blit.cpp +++ b/projects/clr/rocclr/device/blit.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2010 - 2021 Advanced Micro Devices, Inc. +/* Copyright (c) 2010 - 2025 Advanced Micro Devices, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -39,7 +39,8 @@ bool HostBlitManager::readBuffer(device::Memory& srcMemory, void* dstHost, LogError("Couldn't map device memory for host read"); return false; } - + ClPrint(amd::LOG_INFO, amd::LOG_COPY, "Using host memcpy D2H, src=%p, dst=%p, size=%zu", + (reinterpret_cast(src) + origin[0]), dstHost, size[0]); // Copy memory std::memcpy(dstHost, reinterpret_cast(src) + origin[0], size[0]); @@ -162,6 +163,8 @@ bool HostBlitManager::writeBuffer(const void* srcHost, device::Memory& dstMemory return false; } + ClPrint(amd::LOG_INFO, amd::LOG_COPY, "Using host memcpy H2D, src=%p, dst=%p, size=%zu", + srcHost, (reinterpret_cast
(dst) + origin[0]), size[0]); // Copy memory std::memcpy(reinterpret_cast
(dst) + origin[0], srcHost, size[0]); @@ -291,7 +294,9 @@ bool HostBlitManager::copyBuffer(device::Memory& srcMemory, device::Memory& dstM LogError("Couldn't map destination memory"); return false; } - + ClPrint(amd::LOG_INFO, amd::LOG_COPY, "Using host memcpy for copyBuffer, src=%p, dst=%p, size=%zu", + (reinterpret_cast(src) + srcOrigin[0]), + (reinterpret_cast
(dst) + dstOrigin[0]), size[0]); // Straight forward buffer copy std::memcpy((reinterpret_cast
(dst) + dstOrigin[0]), (reinterpret_cast(src) + srcOrigin[0]), size[0]); @@ -323,6 +328,11 @@ bool HostBlitManager::copyBufferRect(device::Memory& srcMemory, device::Memory& return false; } + ClPrint(amd::LOG_INFO, amd::LOG_COPY, "Using host memcpy for copyBufferRect, src=%p, " + "dst=%p, size=%zu", + (reinterpret_cast(src) + srcRect.offset(0, 0, 0)), + (reinterpret_cast
(dst) + dstRect.offset(0, 0, 0)), size[0]); + for (size_t z = 0; z < size[2]; ++z) { for (size_t y = 0; y < size[1]; ++y) { size_t srcOffset = srcRect.offset(0, y, z); diff --git a/projects/clr/rocclr/device/rocm/rocblit.cpp b/projects/clr/rocclr/device/rocm/rocblit.cpp index 9005eede4b..35fad4d650 100644 --- a/projects/clr/rocclr/device/rocm/rocblit.cpp +++ b/projects/clr/rocclr/device/rocm/rocblit.cpp @@ -2250,13 +2250,15 @@ bool KernelBlitManager::copyBuffer(device::Memory& srcMemory, device::Memory& ds bool ipcShared = srcMemory.owner()->ipcShared() || dstMemory.owner()->ipcShared(); - bool useShaderCopyPath = - setup_.disableHwlCopyBuffer_ || (sizeIn[0] <= dev().settings().sdmaCopyThreshold_) || - (!(p2p || ipcShared) && - (!srcMemory.isHostMemDirectAccess() && !dstMemory.isHostMemDirectAccess() && - !(copyMetadata.copyEnginePreference_ == - amd::CopyMetadata::CopyEnginePreference::SDMA)) || - (copyMetadata.copyEnginePreference_ == amd::CopyMetadata::CopyEnginePreference::BLIT)); + bool useShaderCopyPath = setup_.disableHwlCopyBuffer_ || + (copyMetadata.copyEnginePreference_ == + amd::CopyMetadata::CopyEnginePreference::BLIT) || + (sizeIn[0] <= dev().settings().sdmaCopyThreshold_ && + !(p2p || ipcShared) && + !srcMemory.isHostMemDirectAccess() && + !dstMemory.isHostMemDirectAccess() && + copyMetadata.copyEnginePreference_ != + amd::CopyMetadata::CopyEnginePreference::SDMA); if (!useShaderCopyPath) { if (amd::IS_HIP) {