Skip to content

Commit 4bf22cc

Browse files
[SYCL] Fix host-to-host copy during copyback (#1692)
Copyback is performed unconditionally during buffer destruction, so it's possible for it to perform a copy from and to the same host pointer. This patch adds a check for this scenario so that we don't rely on undefined behaviour of std::memcpy. Signed-off-by: Sergey Semenov <[email protected]>
1 parent ad575b5 commit 4bf22cc

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

sycl/source/detail/memory_manager.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -358,13 +358,15 @@ static void copyH2H(SYCLMemObjI *SYCLMemObj, char *SrcMem,
358358
PI_INVALID_OPERATION);
359359
}
360360

361-
DstOffset[0] *= DstElemSize;
362-
SrcOffset[0] *= SrcElemSize;
361+
SrcMem += SrcOffset[0] * SrcElemSize;
362+
DstMem += DstOffset[0] * DstElemSize;
363+
364+
if (SrcMem == DstMem)
365+
return;
363366

364367
size_t BytesToCopy =
365368
SrcAccessRange[0] * SrcElemSize * SrcAccessRange[1] * SrcAccessRange[2];
366-
367-
std::memcpy(DstMem + DstOffset[0], SrcMem + SrcOffset[0], BytesToCopy);
369+
std::memcpy(DstMem, SrcMem, BytesToCopy);
368370
}
369371

370372
// Copies memory between: host and device, host and host,

0 commit comments

Comments
 (0)