Skip to content

Commit 32d1869

Browse files
Pass svm allocations during SVMMemcpy
Change-Id: Ief9e5f6b96f870ac9bf152c88f0d21ff4654ac21
1 parent baba643 commit 32d1869

File tree

2 files changed

+37
-5
lines changed

2 files changed

+37
-5
lines changed

runtime/command_queue/enqueue_svm.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,8 @@ cl_int CommandQueueHw<GfxFamily>::enqueueSVMMemcpy(cl_bool blockingCopy,
354354
}
355355
dstPtr = reinterpret_cast<void *>(dstHostPtrSurf.getAllocation()->getGpuAddress());
356356
}
357-
setOperationParams(operationParams, size, alignedSrcPtr, srcSvmData->gpuAllocation, srcPtrOffset, alignedDstPtr, nullptr, dstPtrOffset);
357+
setOperationParams(operationParams, size, alignedSrcPtr, srcSvmData->gpuAllocation, srcPtrOffset, alignedDstPtr,
358+
dstHostPtrSurf.getAllocation(), dstPtrOffset);
358359
surfaces[0] = &srcSvmSurf;
359360
surfaces[1] = &dstHostPtrSurf;
360361
builder.buildDispatchInfos(dispatchInfo, operationParams);
@@ -375,7 +376,8 @@ cl_int CommandQueueHw<GfxFamily>::enqueueSVMMemcpy(cl_bool blockingCopy,
375376
}
376377
srcPtr = reinterpret_cast<void *>(srcHostPtrSurf.getAllocation()->getGpuAddress());
377378
}
378-
setOperationParams(operationParams, size, alignedSrcPtr, nullptr, srcPtrOffset, alignedDstPtr, dstSvmData->gpuAllocation, dstPtrOffset);
379+
setOperationParams(operationParams, size, alignedSrcPtr, srcHostPtrSurf.getAllocation(), srcPtrOffset, alignedDstPtr,
380+
dstSvmData->gpuAllocation, dstPtrOffset);
379381
surfaces[0] = &dstSvmSurf;
380382
surfaces[1] = &srcHostPtrSurf;
381383
builder.buildDispatchInfos(dispatchInfo, operationParams);
@@ -412,7 +414,8 @@ cl_int CommandQueueHw<GfxFamily>::enqueueSVMMemcpy(cl_bool blockingCopy,
412414
srcPtr = reinterpret_cast<void *>(srcHostPtrSurf.getAllocation()->getGpuAddress());
413415
dstPtr = reinterpret_cast<void *>(dstHostPtrSurf.getAllocation()->getGpuAddress());
414416
}
415-
setOperationParams(operationParams, size, alignedSrcPtr, nullptr, srcPtrOffset, alignedDstPtr, nullptr, dstPtrOffset);
417+
setOperationParams(operationParams, size, alignedSrcPtr, srcHostPtrSurf.getAllocation(), srcPtrOffset, alignedDstPtr,
418+
dstHostPtrSurf.getAllocation(), dstPtrOffset);
416419
surfaces[0] = &srcHostPtrSurf;
417420
surfaces[1] = &dstHostPtrSurf;
418421

unit_tests/command_queue/enqueue_svm_mem_copy_tests.cpp

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#include "core/memory_manager/unified_memory_manager.h"
99
#include "runtime/built_ins/builtins_dispatch_builder.h"
10+
#include "runtime/memory_manager/allocations_list.h"
1011
#include "test.h"
1112
#include "unit_tests/command_queue/command_enqueue_fixture.h"
1213
#include "unit_tests/command_queue/command_queue_fixture.h"
@@ -188,6 +189,20 @@ HWTEST_F(EnqueueSvmMemCopyTest, givenEnqueueSVMMemcpyWhenUsingCopyBufferToBuffer
188189
pCmdQ->getDevice());
189190
EXPECT_EQ(&origBuilder, &restoredBuilder);
190191

192+
auto &ultCsr = pDevice->getUltCommandStreamReceiver<FamilyType>();
193+
194+
GraphicsAllocation *srcSvmAlloc = nullptr;
195+
196+
auto head = ultCsr.getTemporaryAllocations().peekHead();
197+
while (head) {
198+
if (srcHostPtr == head->getUnderlyingBuffer()) {
199+
srcSvmAlloc = head;
200+
break;
201+
}
202+
head = head->next;
203+
}
204+
EXPECT_NE(nullptr, srcSvmAlloc);
205+
191206
// use mock builder to validate builder's input / output
192207
auto mockBuilder = static_cast<MockBuiltinDispatchInfoBuilder *>(newBuilder.get());
193208

@@ -197,7 +212,7 @@ HWTEST_F(EnqueueSvmMemCopyTest, givenEnqueueSVMMemcpyWhenUsingCopyBufferToBuffer
197212
EXPECT_EQ(dstSvmPtr, params->dstPtr);
198213
EXPECT_EQ(nullptr, params->srcMemObj);
199214
EXPECT_EQ(nullptr, params->dstMemObj);
200-
EXPECT_EQ(nullptr, params->srcSvmAlloc);
215+
EXPECT_EQ(head, params->srcSvmAlloc);
201216
EXPECT_EQ(dstSvmAlloc, params->dstSvmAlloc);
202217
EXPECT_EQ(Vec3<size_t>(0, 0, 0), params->srcOffset);
203218
EXPECT_EQ(Vec3<size_t>(0, 0, 0), params->dstOffset);
@@ -267,6 +282,20 @@ HWTEST_F(EnqueueSvmMemCopyTest, givenEnqueueSVMMemcpyWhenUsingCopyBufferToBuffer
267282
pCmdQ->getDevice());
268283
EXPECT_EQ(&origBuilder, &restoredBuilder);
269284

285+
auto &ultCsr = pDevice->getUltCommandStreamReceiver<FamilyType>();
286+
287+
GraphicsAllocation *dstSvmAlloc = nullptr;
288+
289+
auto head = ultCsr.getTemporaryAllocations().peekHead();
290+
while (head) {
291+
if (dstHostPtr == head->getUnderlyingBuffer()) {
292+
dstSvmAlloc = head;
293+
break;
294+
}
295+
head = head->next;
296+
}
297+
EXPECT_NE(nullptr, dstSvmAlloc);
298+
270299
// use mock builder to validate builder's input / output
271300
auto mockBuilder = static_cast<MockBuiltinDispatchInfoBuilder *>(newBuilder.get());
272301

@@ -277,7 +306,7 @@ HWTEST_F(EnqueueSvmMemCopyTest, givenEnqueueSVMMemcpyWhenUsingCopyBufferToBuffer
277306
EXPECT_EQ(nullptr, params->srcMemObj);
278307
EXPECT_EQ(nullptr, params->dstMemObj);
279308
EXPECT_EQ(srcSvmAlloc, params->srcSvmAlloc);
280-
EXPECT_EQ(nullptr, params->dstSvmAlloc);
309+
EXPECT_EQ(dstSvmAlloc, params->dstSvmAlloc);
281310
EXPECT_EQ(Vec3<size_t>(0, 0, 0), params->srcOffset);
282311
EXPECT_EQ(Vec3<size_t>(0, 0, 0), params->dstOffset);
283312
EXPECT_EQ(Vec3<size_t>(256, 0, 0), params->size);

0 commit comments

Comments
 (0)