Skip to content

Commit 936b2da

Browse files
committed
[SYCL][L0] Add temporary option to allow user to use copy engine for device to device copy
1 parent f71a1d5 commit 936b2da

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

sycl/plugins/level_zero/pi_level_zero.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4946,6 +4946,17 @@ pi_result piEnqueueMemBufferWriteRect(
49464946
EventWaitList, Event);
49474947
}
49484948

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+
49494960
pi_result piEnqueueMemBufferCopy(pi_queue Queue, pi_mem SrcBuffer,
49504961
pi_mem DstBuffer, size_t SrcOffset,
49514962
size_t DstOffset, size_t Size,
@@ -4957,6 +4968,11 @@ pi_result piEnqueueMemBufferCopy(pi_queue Queue, pi_mem SrcBuffer,
49574968
// Copy engine is preferred only for host to device transfer.
49584969
// Device to device transfers run faster on compute engines.
49594970
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+
49604976
return enqueueMemCopyHelper(
49614977
PI_COMMAND_TYPE_MEM_BUFFER_COPY, Queue,
49624978
pi_cast<char *>(DstBuffer->getZeHandle()) + DstOffset,
@@ -6204,6 +6220,11 @@ pi_result piextUSMEnqueueMemcpy(pi_queue Queue, pi_bool Blocking, void *DstPtr,
62046220
// (versus compute engine).
62056221
bool PreferCopyEngine = !IsDevicePointer(Queue->Context, SrcPtr) ||
62066222
!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+
62076228
return enqueueMemCopyHelper(
62086229
// TODO: do we need a new command type for this?
62096230
PI_COMMAND_TYPE_MEM_BUFFER_COPY, Queue, DstPtr, Blocking, Size, SrcPtr,

0 commit comments

Comments
 (0)