Skip to content

Commit 7d3e8f3

Browse files
[12/n] Unified Shared Memory.
- Wire in support for clEnqueueMemsetINTEL. Related-To: NEO-3148 Change-Id: I50f636e8e0029a154b6a6c7cd46385e92f8d4d7f Signed-off-by: Mrozek, Michal <[email protected]>
1 parent 5dbf8f7 commit 7d3e8f3

File tree

2 files changed

+46
-3
lines changed

2 files changed

+46
-3
lines changed

runtime/api/api.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3501,7 +3501,14 @@ cl_int clEnqueueMemsetINTEL(
35013501
cl_uint numEventsInWaitList,
35023502
const cl_event *eventWaitList,
35033503
cl_event *event) {
3504-
return CL_OUT_OF_HOST_MEMORY;
3504+
return clEnqueueSVMMemFill(commandQueue,
3505+
dstPtr,
3506+
&value,
3507+
1u,
3508+
size,
3509+
numEventsInWaitList,
3510+
eventWaitList,
3511+
event);
35053512
}
35063513

35073514
cl_int clEnqueueMemcpyINTEL(

unit_tests/api/cl_unified_shared_memory_tests.inl

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,45 @@ TEST(clUnifiedSharedMemoryTests, whenClSetKernelArgMemPointerINTELisCalledWithVa
151151
EXPECT_EQ(CL_SUCCESS, retVal);
152152
}
153153

154-
TEST(clUnifiedSharedMemoryTests, whenclEnqueueMemsetINTELisCalledThenOutOfHostMemoryErrorIsReturned) {
154+
TEST(clUnifiedSharedMemoryTests, whenclEnqueueMemsetINTELisCalledWithoutIncorrectCommandQueueThenInvaliQueueErrorIsReturned) {
155155
auto retVal = clEnqueueMemsetINTEL(0, nullptr, 0, 0, 0, nullptr, nullptr);
156-
EXPECT_EQ(CL_OUT_OF_HOST_MEMORY, retVal);
156+
EXPECT_EQ(CL_INVALID_COMMAND_QUEUE, retVal);
157+
}
158+
159+
TEST(clUnifiedSharedMemoryTests, whenclEnqueueMemsetINTELisCalledWithProperParametersThenParametersArePassedCorrectly) {
160+
auto mockContext = std::make_unique<MockContext>();
161+
cl_int retVal = CL_SUCCESS;
162+
163+
auto unfiedMemoryDeviceAllocation = clDeviceMemAllocINTEL(mockContext.get(), mockContext->getDevice(0u), nullptr, 400, 0, &retVal);
164+
165+
struct MockedCommandQueue : public CommandQueue {
166+
cl_int enqueueSVMMemFill(void *svmPtr,
167+
const void *pattern,
168+
size_t patternSize,
169+
size_t size,
170+
cl_uint numEventsInWaitList,
171+
const cl_event *eventWaitList,
172+
cl_event *event) override {
173+
174+
EXPECT_EQ(12, *reinterpret_cast<const char *>(pattern));
175+
EXPECT_EQ(expectedDstPtr, svmPtr);
176+
EXPECT_EQ(400u, size);
177+
EXPECT_EQ(1u, patternSize);
178+
EXPECT_EQ(0u, numEventsInWaitList);
179+
EXPECT_EQ(nullptr, eventWaitList);
180+
EXPECT_EQ(nullptr, event);
181+
return CL_SUCCESS;
182+
}
183+
void *expectedDstPtr = nullptr;
184+
};
185+
186+
MockedCommandQueue queue;
187+
queue.expectedDstPtr = unfiedMemoryDeviceAllocation;
188+
cl_int setValue = 12u;
189+
190+
retVal = clEnqueueMemsetINTEL(&queue, unfiedMemoryDeviceAllocation, setValue, 400u, 0, nullptr, nullptr);
191+
EXPECT_EQ(CL_SUCCESS, retVal);
192+
clMemFreeINTEL(mockContext.get(), unfiedMemoryDeviceAllocation);
157193
}
158194

159195
TEST(clUnifiedSharedMemoryTests, whenClEnqueueMemcpyINTELisCalledWithWrongQueueThenInvalidQueueErrorIsReturned) {

0 commit comments

Comments
 (0)