[Openmp-commits] [openmp] [amdgpu] Implement D2D memcpy as HSA call (PR #69955)
Johannes Doerfert via Openmp-commits
openmp-commits at lists.llvm.org
Mon Oct 23 12:30:13 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 {
----------------
jdoerfert wrote:
The fact that `AsyncInfoWrapper` is unused is a strong indicator that something is off. The code below is blocking, it should not be blocking. Instead of creating the signal, use the stream in AsyncInfoWrapper, something like above in the pinned case:
```
AMDGPUStreamTy *Stream = nullptr;
void *PinnedPtr = nullptr;
// Use one-step asynchronous operation when host memory is already pinned.
if (void *PinnedPtr =
PinnedAllocs.getDeviceAccessiblePtrFromPinnedBuffer(HstPtr)) {
if (auto Err = getStream(AsyncInfoWrapper, Stream))
return Err;
return Stream->pushPinnedMemoryCopyAsync(PinnedPtr, TgtPtr, Size);
}
```
https://github.com/llvm/llvm-project/pull/69955
More information about the Openmp-commits
mailing list