@@ -4946,6 +4946,17 @@ pi_result piEnqueueMemBufferWriteRect(
4946
4946
EventWaitList, Event);
4947
4947
}
4948
4948
4949
+ // This is an experimental option to test performance of device to device copy
4950
+ // operations on copy engines (versus compute engine)
4951
+ static bool UseCopyEngineForD2DCopy (bool HasCopyEngine) {
4952
+ if (HasCopyEngine) {
4953
+ const char *CopyEngineForD2DCopy =
4954
+ std::getenv (" SYCL_PI_LEVEL_ZERO_USE_COPY_ENGINE_FOR_D2D_COPY" );
4955
+ return (CopyEngineForD2DCopy && (std::stoi (CopyEngineForD2DCopy) != 0 ));
4956
+ }
4957
+ return false ;
4958
+ }
4959
+
4949
4960
pi_result piEnqueueMemBufferCopy (pi_queue Queue, pi_mem SrcBuffer,
4950
4961
pi_mem DstBuffer, size_t SrcOffset,
4951
4962
size_t DstOffset, size_t Size,
@@ -4957,6 +4968,11 @@ pi_result piEnqueueMemBufferCopy(pi_queue Queue, pi_mem SrcBuffer,
4957
4968
// Copy engine is preferred only for host to device transfer.
4958
4969
// Device to device transfers run faster on compute engines.
4959
4970
bool PreferCopyEngine = (SrcBuffer->OnHost || DstBuffer->OnHost );
4971
+
4972
+ // Temporary option added to use copy engine for D2D copy
4973
+ // This is an experimental option and will be removed soon
4974
+ PreferCopyEngine |= UseCopyEngineForD2DCopy (Queue->Device ->hasCopyEngine ());
4975
+
4960
4976
return enqueueMemCopyHelper (
4961
4977
PI_COMMAND_TYPE_MEM_BUFFER_COPY, Queue,
4962
4978
pi_cast<char *>(DstBuffer->getZeHandle ()) + DstOffset,
@@ -6204,6 +6220,11 @@ pi_result piextUSMEnqueueMemcpy(pi_queue Queue, pi_bool Blocking, void *DstPtr,
6204
6220
// (versus compute engine).
6205
6221
bool PreferCopyEngine = !IsDevicePointer (Queue->Context , SrcPtr) ||
6206
6222
!IsDevicePointer (Queue->Context , DstPtr);
6223
+
6224
+ // Temporary option added to use copy engine for D2D copy
6225
+ // This is an experimental option and will be removed soon
6226
+ PreferCopyEngine |= UseCopyEngineForD2DCopy (Queue->Device ->hasCopyEngine ());
6227
+
6207
6228
return enqueueMemCopyHelper (
6208
6229
// TODO: do we need a new command type for this?
6209
6230
PI_COMMAND_TYPE_MEM_BUFFER_COPY, Queue, DstPtr, Blocking, Size, SrcPtr,
0 commit comments