SWDEV-551080 - Fix hipMemcpyDeviceToDeviceNoCU path (#683)

* hipMemcpyDeviceToDeviceNoCU should always take SDMA path as per the
  flag usage
Этот коммит содержится в:
SaleelK
2025-08-25 15:13:02 -07:00
коммит произвёл GitHub
родитель 5c8b34ddf5
Коммит ddba20579d
2 изменённых файлов: 22 добавлений и 10 удалений
+13 -3
Просмотреть файл
@@ -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<const_address>(src) + origin[0]), dstHost, size[0]);
// Copy memory
std::memcpy(dstHost, reinterpret_cast<const_address>(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<address>(dst) + origin[0]), size[0]);
// Copy memory
std::memcpy(reinterpret_cast<address>(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<const_address>(src) + srcOrigin[0]),
(reinterpret_cast<address>(dst) + dstOrigin[0]), size[0]);
// Straight forward buffer copy
std::memcpy((reinterpret_cast<address>(dst) + dstOrigin[0]),
(reinterpret_cast<const_address>(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<const_address>(src) + srcRect.offset(0, 0, 0)),
(reinterpret_cast<address>(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);
+9 -7
Просмотреть файл
@@ -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) {