// First try to use D2D memcpy which is more efficient. If fails, fall back
// to unefficient way.
if (SrcDev.isDataExchangable(DstDev)) {
- rc = SrcDev.data_exchange(srcAddr, DstDev, dstAddr, length, nullptr);
+ rc = SrcDev.dataExchange(srcAddr, DstDev, dstAddr, length, nullptr);
if (rc == OFFLOAD_SUCCESS)
return OFFLOAD_SUCCESS;
}
}
// Copy data from current device to destination device directly
-int32_t DeviceTy::data_exchange(void *SrcPtr, DeviceTy DstDev, void *DstPtr,
- int64_t Size, __tgt_async_info *AsyncInfoPtr) {
- if (!AsyncInfoPtr || !RTL->data_exchange_async || !RTL->synchronize) {
+int32_t DeviceTy::dataExchange(void *SrcPtr, DeviceTy &DstDev, void *DstPtr,
+ int64_t Size, __tgt_async_info *AsyncInfo) {
+ if (!AsyncInfo || !RTL->data_exchange_async || !RTL->synchronize) {
assert(RTL->data_exchange && "RTL->data_exchange is nullptr");
return RTL->data_exchange(RTLDeviceID, SrcPtr, DstDev.RTLDeviceID, DstPtr,
Size);
} else
return RTL->data_exchange_async(RTLDeviceID, SrcPtr, DstDev.RTLDeviceID,
- DstPtr, Size, AsyncInfoPtr);
+ DstPtr, Size, AsyncInfo);
}
// Run region on device
int32_t retrieveData(void *HstPtrBegin, void *TgtPtrBegin, int64_t Size,
__tgt_async_info *AsyncInfoPtr);
// Copy data from current device to destination device directly
- int32_t data_exchange(void *SrcPtr, DeviceTy DstDev, void *DstPtr,
- int64_t Size, __tgt_async_info *AsyncInfoPtr);
+ int32_t dataExchange(void *SrcPtr, DeviceTy &DstDev, void *DstPtr,
+ int64_t Size, __tgt_async_info *AsyncInfo);
int32_t runRegion(void *TgtEntryPtr, void **TgtVarsPtr, ptrdiff_t *TgtOffsets,
int32_t TgtVarsSize, __tgt_async_info *AsyncInfoPtr);