From ae7ec589fce5e97e3191367a26e1a33fee48eb26 Mon Sep 17 00:00:00 2001 From: "Jobczyk, Lukasz" Date: Wed, 11 Sep 2019 11:56:39 +0200 Subject: [PATCH] Set proper command type in unified memory methods Related-To: NEO-3610 Change-Id: I9758c63d0a1ee5c978259c2675519a388ffc9c4f Signed-off-by: Jobczyk, Lukasz --- runtime/api/api.cpp | 54 ++++++++++----- .../api/cl_unified_shared_memory_tests.inl | 69 +++++++++++++++++++ 2 files changed, 107 insertions(+), 16 deletions(-) diff --git a/runtime/api/api.cpp b/runtime/api/api.cpp index ec841452a2..de21eda17c 100644 --- a/runtime/api/api.cpp +++ b/runtime/api/api.cpp @@ -3547,14 +3547,20 @@ cl_int clEnqueueMemsetINTEL( cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event) { - return clEnqueueSVMMemFill(commandQueue, - dstPtr, - &value, - 1u, - size, - numEventsInWaitList, - eventWaitList, - event); + auto retVal = clEnqueueSVMMemFill(commandQueue, + dstPtr, + &value, + 1u, + size, + numEventsInWaitList, + eventWaitList, + event); + if (retVal == CL_SUCCESS && event) { + auto pEvent = castToObjectOrAbort(*event); + pEvent->setCmdType(CL_COMMAND_MEMSET_INTEL); + } + + return retVal; } cl_int clEnqueueMemcpyINTEL( @@ -3566,14 +3572,20 @@ cl_int clEnqueueMemcpyINTEL( cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event) { - return clEnqueueSVMMemcpy(commandQueue, - blocking, - dstPtr, - srcPtr, - size, - numEventsInWaitList, - eventWaitList, - event); + auto retVal = clEnqueueSVMMemcpy(commandQueue, + blocking, + dstPtr, + srcPtr, + size, + numEventsInWaitList, + eventWaitList, + event); + if (retVal == CL_SUCCESS && event) { + auto pEvent = castToObjectOrAbort(*event); + pEvent->setCmdType(CL_COMMAND_MEMCPY_INTEL); + } + + return retVal; } cl_int clEnqueueMigrateMemINTEL( @@ -3591,6 +3603,11 @@ cl_int clEnqueueMigrateMemINTEL( if (retVal == CL_SUCCESS) { pCommandQueue->enqueueMarkerWithWaitList(numEventsInWaitList, eventWaitList, event); + + if (event) { + auto pEvent = castToObjectOrAbort(*event); + pEvent->setCmdType(CL_COMMAND_MIGRATEMEM_INTEL); + } } return retVal; @@ -3611,6 +3628,11 @@ cl_int clEnqueueMemAdviseINTEL( if (retVal == CL_SUCCESS) { pCommandQueue->enqueueMarkerWithWaitList(numEventsInWaitList, eventWaitList, event); + + if (event) { + auto pEvent = castToObjectOrAbort(*event); + pEvent->setCmdType(CL_COMMAND_MEMADVISE_INTEL); + } } return retVal; diff --git a/unit_tests/api/cl_unified_shared_memory_tests.inl b/unit_tests/api/cl_unified_shared_memory_tests.inl index 5e7fb111fd..423f27a5d2 100644 --- a/unit_tests/api/cl_unified_shared_memory_tests.inl +++ b/unit_tests/api/cl_unified_shared_memory_tests.inl @@ -8,6 +8,7 @@ #include "core/unit_tests/helpers/debug_manager_state_restore.h" #include "runtime/api/api.h" #include "runtime/memory_manager/unified_memory_manager.h" +#include "unit_tests/command_queue/command_queue_fixture.h" #include "unit_tests/mocks/mock_context.h" #include "unit_tests/mocks/mock_kernel.h" @@ -453,3 +454,71 @@ TEST(clUnifiedSharedMemoryTests, whenClEnqueueMemAdviseINTELisCalledWithProperPa auto retVal = clEnqueueMemAdviseINTEL(&cmdQ, unifiedMemoryAlloc, 10, 0, 0, nullptr, nullptr); EXPECT_EQ(CL_SUCCESS, retVal); } + +class clUnifiedSharedMemoryEventTests : public CommandQueueHwFixture, + public ::testing::Test { + public: + void SetUp() override { + this->pCmdQ = createCommandQueue(nullptr); + } + void TearDown() override { + clReleaseEvent(event); + CommandQueueHwFixture::TearDown(); + } + + cl_event event = nullptr; +}; + +TEST_F(clUnifiedSharedMemoryEventTests, whenClEnqueueMigrateMemINTELIsCalledWithEventThenProperCmdTypeIsSet) { + void *unifiedMemoryAlloc = reinterpret_cast(0x1234); + + auto retVal = clEnqueueMigrateMemINTEL(this->pCmdQ, unifiedMemoryAlloc, 10, 0, 0, nullptr, &event); + EXPECT_EQ(CL_SUCCESS, retVal); + + constexpr cl_command_type expectedCmd = CL_COMMAND_MIGRATEMEM_INTEL; + cl_command_type actualCmd = castToObjectOrAbort(event)->getCommandType(); + EXPECT_EQ(expectedCmd, actualCmd); +} + +TEST_F(clUnifiedSharedMemoryEventTests, whenClEnqueueMemAdviseINTELIsCalledWithEventThenProperCmdTypeIsSet) { + void *unifiedMemoryAlloc = reinterpret_cast(0x1234); + + auto retVal = clEnqueueMemAdviseINTEL(this->pCmdQ, unifiedMemoryAlloc, 10, 0, 0, nullptr, &event); + EXPECT_EQ(CL_SUCCESS, retVal); + + constexpr cl_command_type expectedCmd = CL_COMMAND_MEMADVISE_INTEL; + cl_command_type actualCmd = castToObjectOrAbort(event)->getCommandType(); + EXPECT_EQ(expectedCmd, actualCmd); +} + +TEST_F(clUnifiedSharedMemoryEventTests, whenClEnqueueMemcpyINTELIsCalledWithEventThenProperCmdTypeIsSet) { + cl_int retVal = CL_SUCCESS; + + auto unfiedMemoryDst = clSharedMemAllocINTEL(this->context, this->context->getDevice(0u), nullptr, 400, 0, &retVal); + auto unfiedMemorySrc = clSharedMemAllocINTEL(this->context, this->context->getDevice(0u), nullptr, 400, 0, &retVal); + + retVal = clEnqueueMemcpyINTEL(this->pCmdQ, 0, unfiedMemoryDst, unfiedMemorySrc, 400u, 0, nullptr, &event); + EXPECT_EQ(retVal, CL_SUCCESS); + + constexpr cl_command_type expectedCmd = CL_COMMAND_MEMCPY_INTEL; + cl_command_type actualCmd = castToObjectOrAbort(event)->getCommandType(); + EXPECT_EQ(expectedCmd, actualCmd); + + clMemFreeINTEL(this->context, unfiedMemoryDst); + clMemFreeINTEL(this->context, unfiedMemorySrc); +} + +TEST_F(clUnifiedSharedMemoryEventTests, whenClEnqueueMemsetINTELIsCalledWithEventThenProperCmdTypeIsSet) { + cl_int retVal = CL_SUCCESS; + + auto unfiedMemorySharedAllocation = clSharedMemAllocINTEL(this->context, this->context->getDevice(0u), nullptr, 400, 0, &retVal); + cl_int setValue = 12u; + + retVal = clEnqueueMemsetINTEL(this->pCmdQ, unfiedMemorySharedAllocation, setValue, 400u, 0, nullptr, &event); + EXPECT_EQ(CL_SUCCESS, retVal); + + constexpr cl_command_type expectedCmd = CL_COMMAND_MEMSET_INTEL; + cl_command_type actualCmd = castToObjectOrAbort(event)->getCommandType(); + EXPECT_EQ(expectedCmd, actualCmd); + clMemFreeINTEL(this->context, unfiedMemorySharedAllocation); +}