[Openmp-commits] [openmp] [amdgpu] Implement D2D memcpy as HSA call (PR #69955)
Jan Patrick Lehr via Openmp-commits
openmp-commits at lists.llvm.org
Mon Oct 23 12:07:32 PDT 2023
================
@@ -2250,14 +2250,37 @@ struct AMDGPUDeviceTy : public GenericDeviceTy, AMDGenericDeviceTy {
PinnedMemoryManager);
}
- /// Exchange data between two devices within the plugin. This function is not
- /// supported in this plugin.
+ /// Exchange data between two devices within the plugin.
Error dataExchangeImpl(const void *SrcPtr, GenericDeviceTy &DstGenericDevice,
void *DstPtr, int64_t Size,
AsyncInfoWrapperTy &AsyncInfoWrapper) override {
- // This function should never be called because the function
- // AMDGPUPluginTy::isDataExchangable() returns false.
- return Plugin::error("dataExchangeImpl not supported");
+ AMDGPUDeviceTy &DstDevice = static_cast<AMDGPUDeviceTy &>(DstGenericDevice);
+
+ hsa_agent_t SrcAgent = getAgent();
+ hsa_agent_t DstAgent = DstDevice.getAgent();
+
+ AMDGPUSignalTy Signal;
+ if (auto Err = Signal.init())
+ return Err;
+
+ // The agents need to have access to the corresponding memory
+ // This is presently only true if the pointers were originally
+ // allocated by this runtime or the caller made the appropriate
+ // access calls.
+ hsa_status_t Status = hsa_amd_memory_async_copy(
+ DstPtr, DstAgent, SrcPtr, SrcAgent, (Size > 0) ? (size_t)Size : 0, 0,
+ nullptr, Signal.get());
+ if (auto Err =
+ Plugin::check(Status, "Error in hsa_amd_memory_async_copy: %s"))
----------------
jplehr wrote:
Do we want the error to mention that this happened in the device to device copy, or is this automagically done given the surrounding method of the error?
https://github.com/llvm/llvm-project/pull/69955
More information about the Openmp-commits
mailing list