From f320b710916aec1ebe63888e0b45930c271d8c20 Mon Sep 17 00:00:00 2001 From: Michal Mrozek Date: Tue, 25 Feb 2020 13:39:23 +0100 Subject: [PATCH] Improve CPU copy debug flags. - now setting them to 0 disables cpu copies. Change-Id: Id850c999a04479092d562e5df6e0de3ece80051c Signed-off-by: Michal Mrozek --- opencl/source/command_queue/command_queue.cpp | 16 +++++++++-- .../enqueue_read_buffer_event_tests.cpp | 12 ++++---- .../enqueue_read_buffer_tests.cpp | 18 ++++++------ .../enqueue_unmap_memobject_tests.cpp | 2 +- .../enqueue_write_buffer_event_tests.cpp | 12 ++++---- .../enqueue_write_buffer_tests.cpp | 18 ++++++------ .../read_write_buffer_cpu_copy.cpp | 28 ++++++++++++++++++- .../test/unit_test/test_files/igdrcl.config | 4 +-- .../debug_settings/debug_variables_base.inl | 4 +-- 9 files changed, 76 insertions(+), 38 deletions(-) diff --git a/opencl/source/command_queue/command_queue.cpp b/opencl/source/command_queue/command_queue.cpp index 81960b1762..506f9929d7 100644 --- a/opencl/source/command_queue/command_queue.cpp +++ b/opencl/source/command_queue/command_queue.cpp @@ -555,9 +555,21 @@ size_t CommandQueue::estimateTimestampPacketNodesCount(const MultiDispatchInfo & bool CommandQueue::bufferCpuCopyAllowed(Buffer *buffer, cl_command_type commandType, cl_bool blocking, size_t size, void *ptr, cl_uint numEventsInWaitList, const cl_event *eventWaitList) { + + auto debugVariableSet = false; // Requested by debug variable or allowed by Buffer - bool debugVariableSet = (CL_COMMAND_READ_BUFFER == commandType && DebugManager.flags.DoCpuCopyOnReadBuffer.get()) || - (CL_COMMAND_WRITE_BUFFER == commandType && DebugManager.flags.DoCpuCopyOnWriteBuffer.get()); + if (CL_COMMAND_READ_BUFFER == commandType && DebugManager.flags.DoCpuCopyOnReadBuffer.get() != -1) { + if (DebugManager.flags.DoCpuCopyOnReadBuffer.get() == 0) { + return false; + } + debugVariableSet = true; + } + if (CL_COMMAND_WRITE_BUFFER == commandType && DebugManager.flags.DoCpuCopyOnWriteBuffer.get() != -1) { + if (DebugManager.flags.DoCpuCopyOnWriteBuffer.get() == 0) { + return false; + } + debugVariableSet = true; + } //if we are blocked by user events, we can't service the call on CPU if (Event::checkUserEventDependencies(numEventsInWaitList, eventWaitList)) { diff --git a/opencl/test/unit_test/command_queue/enqueue_read_buffer_event_tests.cpp b/opencl/test/unit_test/command_queue/enqueue_read_buffer_event_tests.cpp index 648921d7dc..4ae4faa708 100644 --- a/opencl/test/unit_test/command_queue/enqueue_read_buffer_event_tests.cpp +++ b/opencl/test/unit_test/command_queue/enqueue_read_buffer_event_tests.cpp @@ -101,7 +101,7 @@ TEST_F(EnqueueReadBuffer, WhenReadingBufferThenEventReturnedShouldBeMaxOfInputEv } TEST_F(EnqueueReadBuffer, givenInOrderQueueAndForcedCpuCopyOnReadBufferAndDstPtrEqualSrcPtrWithEventsNotBlockedWhenReadBufferIsExecutedThenTaskLevelShouldNotBeIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnReadBuffer.set(true); + DebugManager.flags.DoCpuCopyOnReadBuffer.set(1); cl_int retVal = CL_SUCCESS; uint32_t taskLevelCmdQ = 17; pCmdQ->taskLevel = taskLevelCmdQ; @@ -143,7 +143,7 @@ TEST_F(EnqueueReadBuffer, givenInOrderQueueAndForcedCpuCopyOnReadBufferAndDstPtr TEST_F(EnqueueReadBuffer, givenInOrderQueueAndForcedCpuCopyOnReadBufferAndDstPtrEqualSrcPtrWhenReadBufferIsExecutedThenTaskLevelShouldNotBeIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnReadBuffer.set(true); + DebugManager.flags.DoCpuCopyOnReadBuffer.set(1); cl_int retVal = CL_SUCCESS; uint32_t taskLevelCmdQ = 17; pCmdQ->taskLevel = taskLevelCmdQ; @@ -176,7 +176,7 @@ TEST_F(EnqueueReadBuffer, givenInOrderQueueAndForcedCpuCopyOnReadBufferAndDstPtr TEST_F(EnqueueReadBuffer, givenOutOfOrderQueueAndForcedCpuCopyOnReadBufferAndDstPtrEqualSrcPtrWithEventsNotBlockedWhenReadBufferIsExecutedThenTaskLevelShouldNotBeIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnReadBuffer.set(true); + DebugManager.flags.DoCpuCopyOnReadBuffer.set(1); std::unique_ptr pCmdOOQ(createCommandQueue(pClDevice, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE)); cl_int retVal = CL_SUCCESS; uint32_t taskLevelCmdQ = 17; @@ -219,7 +219,7 @@ TEST_F(EnqueueReadBuffer, givenOutOfOrderQueueAndForcedCpuCopyOnReadBufferAndDst TEST_F(EnqueueReadBuffer, givenInOrderQueueAndForcedCpuCopyOnReadBufferAndEventNotReadyWhenReadBufferIsExecutedThenTaskLevelShouldBeIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnReadBuffer.set(true); + DebugManager.flags.DoCpuCopyOnReadBuffer.set(1); cl_int retVal = CL_SUCCESS; uint32_t taskLevelCmdQ = 17; pCmdQ->taskLevel = taskLevelCmdQ; @@ -259,7 +259,7 @@ TEST_F(EnqueueReadBuffer, givenInOrderQueueAndForcedCpuCopyOnReadBufferAndEventN TEST_F(EnqueueReadBuffer, givenInOrderQueueAndDisabledSupportCpuCopiesAndDstPtrEqualSrcPtrWithEventsWhenReadBufferIsExecutedThenTaskLevelShouldNotBeIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnReadBuffer.set(false); + DebugManager.flags.DoCpuCopyOnReadBuffer.set(0); cl_int retVal = CL_SUCCESS; uint32_t taskLevelCmdQ = 17; pCmdQ->taskLevel = taskLevelCmdQ; @@ -300,7 +300,7 @@ TEST_F(EnqueueReadBuffer, givenInOrderQueueAndDisabledSupportCpuCopiesAndDstPtrE } TEST_F(EnqueueReadBuffer, givenOutOfOrderQueueAndDisabledSupportCpuCopiesAndDstPtrEqualSrcPtrWithEventsWhenReadBufferIsExecutedThenTaskLevelShouldNotBeIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnReadBuffer.set(false); + DebugManager.flags.DoCpuCopyOnReadBuffer.set(0); std::unique_ptr pCmdOOQ(createCommandQueue(pClDevice, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE)); cl_int retVal = CL_SUCCESS; uint32_t taskLevelCmdQ = 17; diff --git a/opencl/test/unit_test/command_queue/enqueue_read_buffer_tests.cpp b/opencl/test/unit_test/command_queue/enqueue_read_buffer_tests.cpp index 161dd9815b..5987e6c81e 100644 --- a/opencl/test/unit_test/command_queue/enqueue_read_buffer_tests.cpp +++ b/opencl/test/unit_test/command_queue/enqueue_read_buffer_tests.cpp @@ -371,7 +371,7 @@ HWTEST_F(EnqueueReadBufferTypeTest, givenNotAlignedPointerAndSizeWhenBlockedRead HWTEST_F(EnqueueReadBufferTypeTest, givenOOQWithEnabledSupportCpuCopiesAndDstPtrEqualSrcPtrAndZeroCopyBufferWhenReadBufferIsExecutedThenTaskLevelNotIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnReadBuffer.set(true); + DebugManager.flags.DoCpuCopyOnReadBuffer.set(1); cl_int retVal = CL_SUCCESS; std::unique_ptr pCmdOOQ(createCommandQueue(pClDevice, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE)); void *ptr = srcBuffer->getCpuAddressForMemoryTransfer(); @@ -391,7 +391,7 @@ HWTEST_F(EnqueueReadBufferTypeTest, givenOOQWithEnabledSupportCpuCopiesAndDstPtr } HWTEST_F(EnqueueReadBufferTypeTest, givenOOQWithDisabledSupportCpuCopiesAndDstPtrEqualSrcPtrAndZeroCopyBufferWhenReadBufferIsExecutedThenTaskLevelNotIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnReadBuffer.set(false); + DebugManager.flags.DoCpuCopyOnReadBuffer.set(0); cl_int retVal = CL_SUCCESS; std::unique_ptr pCmdOOQ(createCommandQueue(pClDevice, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE)); void *ptr = srcBuffer->getCpuAddressForMemoryTransfer(); @@ -411,7 +411,7 @@ HWTEST_F(EnqueueReadBufferTypeTest, givenOOQWithDisabledSupportCpuCopiesAndDstPt } HWTEST_F(EnqueueReadBufferTypeTest, givenInOrderQueueAndEnabledSupportCpuCopiesAndDstPtrEqualSrcPtrAndZeroCopyBufferWhenReadBufferIsExecutedThenTaskLevelShouldNotBeIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnReadBuffer.set(true); + DebugManager.flags.DoCpuCopyOnReadBuffer.set(1); cl_int retVal = CL_SUCCESS; void *ptr = srcBuffer->getCpuAddressForMemoryTransfer(); EXPECT_EQ(retVal, CL_SUCCESS); @@ -430,7 +430,7 @@ HWTEST_F(EnqueueReadBufferTypeTest, givenInOrderQueueAndEnabledSupportCpuCopiesA } HWTEST_F(EnqueueReadBufferTypeTest, givenInOrderQueueAndDisabledSupportCpuCopiesAndDstPtrEqualSrcPtrAndZeroCopyBufferWhenReadBufferIsExecutedThenTaskLevelShouldNotBeIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnReadBuffer.set(false); + DebugManager.flags.DoCpuCopyOnReadBuffer.set(0); cl_int retVal = CL_SUCCESS; void *ptr = srcBuffer->getCpuAddressForMemoryTransfer(); EXPECT_EQ(retVal, CL_SUCCESS); @@ -449,7 +449,7 @@ HWTEST_F(EnqueueReadBufferTypeTest, givenInOrderQueueAndDisabledSupportCpuCopies } HWTEST_F(EnqueueReadBufferTypeTest, givenInOrderQueueAndDisabledSupportCpuCopiesAndDstPtrEqualSrcPtrAndNonZeroCopyBufferWhenReadBufferIsExecutedThenTaskLevelShouldBeIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnReadBuffer.set(false); + DebugManager.flags.DoCpuCopyOnReadBuffer.set(0); cl_int retVal = CL_SUCCESS; void *ptr = nonZeroCopyBuffer->getCpuAddressForMemoryTransfer(); EXPECT_EQ(retVal, CL_SUCCESS); @@ -468,7 +468,7 @@ HWTEST_F(EnqueueReadBufferTypeTest, givenInOrderQueueAndDisabledSupportCpuCopies } HWTEST_F(EnqueueReadBufferTypeTest, givenInOrderQueueAndEnabledSupportCpuCopiesAndDstPtrEqualSrcPtrAndNonZeroCopyWhenReadBufferIsExecutedThenTaskLevelShouldBeIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnReadBuffer.set(true); + DebugManager.flags.DoCpuCopyOnReadBuffer.set(1); cl_int retVal = CL_SUCCESS; void *ptr = nonZeroCopyBuffer->getCpuAddressForMemoryTransfer(); EXPECT_EQ(retVal, CL_SUCCESS); @@ -523,7 +523,7 @@ HWTEST_F(EnqueueReadBufferTypeTest, givenCommandQueueWhenEnqueueReadBufferWithMa HWTEST_F(EnqueueReadBufferTypeTest, givenEnqueueReadBufferCalledWhenLockedPtrInTransferPropertisIsAvailableThenItIsNotUnlocked) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnReadBuffer.set(true); + DebugManager.flags.DoCpuCopyOnReadBuffer.set(1); MockExecutionEnvironment executionEnvironment(*platformDevices); MockMemoryManager memoryManager(false, true, executionEnvironment); @@ -551,7 +551,7 @@ HWTEST_F(EnqueueReadBufferTypeTest, givenEnqueueReadBufferCalledWhenLockedPtrInT HWTEST_F(EnqueueReadBufferTypeTest, givenForcedCpuCopyWhenEnqueueReadCompressedBufferThenDontCopyOnCpu) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnReadBuffer.set(true); + DebugManager.flags.DoCpuCopyOnReadBuffer.set(1); MockExecutionEnvironment executionEnvironment(*platformDevices); MockMemoryManager memoryManager(false, true, executionEnvironment); @@ -597,7 +597,7 @@ HWTEST_F(EnqueueReadBufferTypeTest, givenForcedCpuCopyWhenEnqueueReadCompressedB HWTEST_F(EnqueueReadBufferTypeTest, gicenEnqueueReadBufferCalledWhenLockedPtrInTransferPropertisIsNotAvailableThenItIsNotUnlocked) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnReadBuffer.set(true); + DebugManager.flags.DoCpuCopyOnReadBuffer.set(1); MockExecutionEnvironment executionEnvironment(*platformDevices); MockMemoryManager memoryManager(false, true, executionEnvironment); diff --git a/opencl/test/unit_test/command_queue/enqueue_unmap_memobject_tests.cpp b/opencl/test/unit_test/command_queue/enqueue_unmap_memobject_tests.cpp index 8bab4ff8aa..8740459294 100644 --- a/opencl/test/unit_test/command_queue/enqueue_unmap_memobject_tests.cpp +++ b/opencl/test/unit_test/command_queue/enqueue_unmap_memobject_tests.cpp @@ -217,7 +217,7 @@ HWTEST_F(EnqueueUnmapMemObjTest, givenEnqueueUnmapMemObjectWhenNonAubWritableBuf HWTEST_F(EnqueueUnmapMemObjTest, givenWriteBufferIsServicedOnCPUWhenBufferIsNonAubTbxWriteableThanFlagsChange) { DebugManagerStateRestore restorer; - DebugManager.flags.DoCpuCopyOnWriteBuffer.set(true); + DebugManager.flags.DoCpuCopyOnWriteBuffer.set(1); auto buffer = std::unique_ptr(BufferHelper<>::create()); ASSERT_NE(nullptr, buffer); buffer->getGraphicsAllocation()->setAubWritable(false, GraphicsAllocation::defaultBank); diff --git a/opencl/test/unit_test/command_queue/enqueue_write_buffer_event_tests.cpp b/opencl/test/unit_test/command_queue/enqueue_write_buffer_event_tests.cpp index c628b56917..307bcb6235 100644 --- a/opencl/test/unit_test/command_queue/enqueue_write_buffer_event_tests.cpp +++ b/opencl/test/unit_test/command_queue/enqueue_write_buffer_event_tests.cpp @@ -102,7 +102,7 @@ TEST_F(EnqueueWriteBufferTypeTest, eventReturnedShouldBeMaxOfInputEventsAndCmdQP TEST_F(EnqueueWriteBufferTypeTest, givenInOrderQueueAndForcedCpuCopyOnWriteBufferAndDstPtrEqualSrcPtrWithEventsNotBlockedWhenWriteBufferIsExecutedThenTaskLevelShouldNotBeIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnWriteBuffer.set(true); + DebugManager.flags.DoCpuCopyOnWriteBuffer.set(1); cl_int retVal = CL_SUCCESS; uint32_t taskLevelCmdQ = 17; pCmdQ->taskLevel = taskLevelCmdQ; @@ -144,7 +144,7 @@ TEST_F(EnqueueWriteBufferTypeTest, givenInOrderQueueAndForcedCpuCopyOnWriteBuffe TEST_F(EnqueueWriteBufferTypeTest, givenInOrderQueueAndForcedCpuCopyOnWriteBufferAndEventNotReadyWhenWriteBufferIsExecutedThenTaskLevelShouldBeIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnWriteBuffer.set(true); + DebugManager.flags.DoCpuCopyOnWriteBuffer.set(1); cl_int retVal = CL_SUCCESS; uint32_t taskLevelCmdQ = 17; pCmdQ->taskLevel = taskLevelCmdQ; @@ -184,7 +184,7 @@ TEST_F(EnqueueWriteBufferTypeTest, givenInOrderQueueAndForcedCpuCopyOnWriteBuffe TEST_F(EnqueueWriteBufferTypeTest, givenInOrderQueueAndForcedCpuCopyOnWriteBufferAndDstPtrEqualSrcPtrWhenWriteBufferIsExecutedThenTaskLevelShouldNotBeIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnWriteBuffer.set(true); + DebugManager.flags.DoCpuCopyOnWriteBuffer.set(1); cl_int retVal = CL_SUCCESS; uint32_t taskLevelCmdQ = 17; pCmdQ->taskLevel = taskLevelCmdQ; @@ -216,7 +216,7 @@ TEST_F(EnqueueWriteBufferTypeTest, givenInOrderQueueAndForcedCpuCopyOnWriteBuffe TEST_F(EnqueueWriteBufferTypeTest, givenOutOfOrderQueueAndForcedCpuCopyOnWriteBufferAndDstPtrEqualSrcPtrWithEventsWhenWriteBufferIsExecutedThenTaskLevelShouldNotBeIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnWriteBuffer.set(true); + DebugManager.flags.DoCpuCopyOnWriteBuffer.set(1); std::unique_ptr pCmdOOQ(createCommandQueue(pClDevice, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE)); cl_int retVal = CL_SUCCESS; uint32_t taskLevelCmdQ = 17; @@ -258,7 +258,7 @@ TEST_F(EnqueueWriteBufferTypeTest, givenOutOfOrderQueueAndForcedCpuCopyOnWriteBu } TEST_F(EnqueueWriteBufferTypeTest, givenInOrderQueueAndDisabledSupportCpuCopiesAndDstPtrEqualSrcPtrWithEventsWhenWriteBufferIsExecutedThenTaskLevelShouldNotBeIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnWriteBuffer.set(false); + DebugManager.flags.DoCpuCopyOnWriteBuffer.set(0); cl_int retVal = CL_SUCCESS; uint32_t taskLevelCmdQ = 17; pCmdQ->taskLevel = taskLevelCmdQ; @@ -299,7 +299,7 @@ TEST_F(EnqueueWriteBufferTypeTest, givenInOrderQueueAndDisabledSupportCpuCopiesA } TEST_F(EnqueueWriteBufferTypeTest, givenOutOfOrderQueueAndDisabledSupportCpuCopiesAndDstPtrEqualSrcPtrWithEventsWhenWriteBufferIsExecutedThenTaskLevelShouldNotBeIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnWriteBuffer.set(false); + DebugManager.flags.DoCpuCopyOnWriteBuffer.set(0); std::unique_ptr pCmdOOQ(createCommandQueue(pClDevice, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE)); cl_int retVal = CL_SUCCESS; uint32_t taskLevelCmdQ = 17; diff --git a/opencl/test/unit_test/command_queue/enqueue_write_buffer_tests.cpp b/opencl/test/unit_test/command_queue/enqueue_write_buffer_tests.cpp index 89ea945ba3..d8b212a408 100644 --- a/opencl/test/unit_test/command_queue/enqueue_write_buffer_tests.cpp +++ b/opencl/test/unit_test/command_queue/enqueue_write_buffer_tests.cpp @@ -255,7 +255,7 @@ HWCMDTEST_F(IGFX_GEN8_CORE, EnqueueWriteBufferTypeTest, WhenWritingBufferThenMed } HWTEST_F(EnqueueWriteBufferTypeTest, givenOOQWithEnabledSupportCpuCopiesAndDstPtrEqualSrcPtrAndZeroCopyBufferTrueWhenWriteBufferIsExecutedThenTaskLevelNotIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnWriteBuffer.set(true); + DebugManager.flags.DoCpuCopyOnWriteBuffer.set(1); cl_int retVal = CL_SUCCESS; std::unique_ptr pCmdOOQ(createCommandQueue(pClDevice, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE)); void *ptr = zeroCopyBuffer->getCpuAddressForMemoryTransfer(); @@ -276,7 +276,7 @@ HWTEST_F(EnqueueWriteBufferTypeTest, givenOOQWithEnabledSupportCpuCopiesAndDstPt } HWTEST_F(EnqueueWriteBufferTypeTest, givenOOQWithDisabledSupportCpuCopiesAndDstPtrEqualSrcPtrZeroCopyBufferWhenWriteBufferIsExecutedThenTaskLevelNotIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnWriteBuffer.set(false); + DebugManager.flags.DoCpuCopyOnWriteBuffer.set(0); cl_int retVal = CL_SUCCESS; std::unique_ptr pCmdOOQ(createCommandQueue(pClDevice, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE)); void *ptr = srcBuffer->getCpuAddressForMemoryTransfer(); @@ -297,7 +297,7 @@ HWTEST_F(EnqueueWriteBufferTypeTest, givenOOQWithDisabledSupportCpuCopiesAndDstP } HWTEST_F(EnqueueWriteBufferTypeTest, givenInOrderQueueAndEnabledSupportCpuCopiesAndDstPtrZeroCopyBufferEqualSrcPtrWhenWriteBufferIsExecutedThenTaskLevelShouldNotBeIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnWriteBuffer.set(true); + DebugManager.flags.DoCpuCopyOnWriteBuffer.set(1); cl_int retVal = CL_SUCCESS; void *ptr = zeroCopyBuffer->getCpuAddressForMemoryTransfer(); EXPECT_EQ(retVal, CL_SUCCESS); @@ -316,7 +316,7 @@ HWTEST_F(EnqueueWriteBufferTypeTest, givenInOrderQueueAndEnabledSupportCpuCopies } HWTEST_F(EnqueueWriteBufferTypeTest, givenInOrderQueueAndDisabledSupportCpuCopiesAndDstPtrZeroCopyBufferEqualSrcPtrWhenWriteBufferIsExecutedThenTaskLevelShouldNotBeIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnWriteBuffer.set(false); + DebugManager.flags.DoCpuCopyOnWriteBuffer.set(0); cl_int retVal = CL_SUCCESS; void *ptr = zeroCopyBuffer->getCpuAddressForMemoryTransfer(); EXPECT_EQ(retVal, CL_SUCCESS); @@ -335,7 +335,7 @@ HWTEST_F(EnqueueWriteBufferTypeTest, givenInOrderQueueAndDisabledSupportCpuCopie } HWTEST_F(EnqueueWriteBufferTypeTest, givenInOrderQueueAndDisabledSupportCpuCopiesAndDstPtrZeroCopyBufferEqualSrcPtrWhenWriteBufferIsExecutedThenTaskLevelShouldBeIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnWriteBuffer.set(false); + DebugManager.flags.DoCpuCopyOnWriteBuffer.set(0); cl_int retVal = CL_SUCCESS; void *ptr = srcBuffer->getCpuAddressForMemoryTransfer(); EXPECT_EQ(retVal, CL_SUCCESS); @@ -354,7 +354,7 @@ HWTEST_F(EnqueueWriteBufferTypeTest, givenInOrderQueueAndDisabledSupportCpuCopie } HWTEST_F(EnqueueWriteBufferTypeTest, givenInOrderQueueAndEnabledSupportCpuCopiesAndDstPtrNonZeroCopyBufferEqualSrcPtrWhenWriteBufferIsExecutedThenTaskLevelShouldBeIncreased) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnWriteBuffer.set(true); + DebugManager.flags.DoCpuCopyOnWriteBuffer.set(1); cl_int retVal = CL_SUCCESS; void *ptr = srcBuffer->getCpuAddressForMemoryTransfer(); EXPECT_EQ(retVal, CL_SUCCESS); @@ -374,7 +374,7 @@ HWTEST_F(EnqueueWriteBufferTypeTest, givenInOrderQueueAndEnabledSupportCpuCopies HWTEST_F(EnqueueWriteBufferTypeTest, givenEnqueueWriteBufferCalledWhenLockedPtrInTransferPropertisIsAvailableThenItIsNotUnlocked) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnWriteBuffer.set(true); + DebugManager.flags.DoCpuCopyOnWriteBuffer.set(1); MockExecutionEnvironment executionEnvironment(*platformDevices); MockMemoryManager memoryManager(false, true, executionEnvironment); @@ -402,7 +402,7 @@ HWTEST_F(EnqueueWriteBufferTypeTest, givenEnqueueWriteBufferCalledWhenLockedPtrI HWTEST_F(EnqueueWriteBufferTypeTest, givenForcedCpuCopyWhenEnqueueWriteCompressedBufferThenDontCopyOnCpu) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnWriteBuffer.set(true); + DebugManager.flags.DoCpuCopyOnWriteBuffer.set(1); MockExecutionEnvironment executionEnvironment(*platformDevices); MockMemoryManager memoryManager(false, true, executionEnvironment); @@ -448,7 +448,7 @@ HWTEST_F(EnqueueWriteBufferTypeTest, givenForcedCpuCopyWhenEnqueueWriteCompresse HWTEST_F(EnqueueWriteBufferTypeTest, givenEnqueueWriteBufferCalledWhenLockedPtrInTransferPropertisIsNotAvailableThenItIsNotUnlocked) { DebugManagerStateRestore dbgRestore; - DebugManager.flags.DoCpuCopyOnWriteBuffer.set(true); + DebugManager.flags.DoCpuCopyOnWriteBuffer.set(1); MockExecutionEnvironment executionEnvironment(*platformDevices); MockMemoryManager memoryManager(false, true, executionEnvironment); diff --git a/opencl/test/unit_test/command_queue/read_write_buffer_cpu_copy.cpp b/opencl/test/unit_test/command_queue/read_write_buffer_cpu_copy.cpp index 0b4537751f..7d0fa3552b 100644 --- a/opencl/test/unit_test/command_queue/read_write_buffer_cpu_copy.cpp +++ b/opencl/test/unit_test/command_queue/read_write_buffer_cpu_copy.cpp @@ -212,6 +212,32 @@ HWTEST_F(ReadWriteBufferCpuCopyTest, GivenSpecificMemoryStructuresWhenReadingWri alignedFree(alignedBufferPtr); } +HWTEST_F(ReadWriteBufferCpuCopyTest, givenDebugVariableToDisableCpuCopiesWhenBufferCpuCopyAllowedIsCalledThenItReturnsFalse) { + DebugManagerStateRestore restorer; + DebugManager.flags.EnableLocalMemory.set(false); + + cl_int retVal; + + auto mockDevice = std::make_unique(MockDevice::createWithNewExecutionEnvironment(nullptr)); + auto mockContext = std::unique_ptr(new MockContext(mockDevice.get())); + auto mockCommandQueue = std::unique_ptr(new MockCommandQueue); + + std::unique_ptr buffer(Buffer::create(context, CL_MEM_ALLOC_HOST_PTR, MemoryConstants::pageSize, nullptr, retVal)); + EXPECT_EQ(retVal, CL_SUCCESS); + EXPECT_TRUE(buffer->isMemObjZeroCopy()); + + EXPECT_TRUE(mockCommandQueue->bufferCpuCopyAllowed(buffer.get(), CL_COMMAND_READ_BUFFER, true, MemoryConstants::pageSize, reinterpret_cast(0x1000), 0u, nullptr)); + EXPECT_TRUE(mockCommandQueue->bufferCpuCopyAllowed(buffer.get(), CL_COMMAND_WRITE_BUFFER, true, MemoryConstants::pageSize, reinterpret_cast(0x1000), 0u, nullptr)); + + DebugManager.flags.DoCpuCopyOnReadBuffer.set(0); + EXPECT_FALSE(mockCommandQueue->bufferCpuCopyAllowed(buffer.get(), CL_COMMAND_READ_BUFFER, true, MemoryConstants::pageSize, reinterpret_cast(0x1000), 0u, nullptr)); + EXPECT_TRUE(mockCommandQueue->bufferCpuCopyAllowed(buffer.get(), CL_COMMAND_WRITE_BUFFER, true, MemoryConstants::pageSize, reinterpret_cast(0x1000), 0u, nullptr)); + + DebugManager.flags.DoCpuCopyOnWriteBuffer.set(0); + EXPECT_FALSE(mockCommandQueue->bufferCpuCopyAllowed(buffer.get(), CL_COMMAND_READ_BUFFER, true, MemoryConstants::pageSize, reinterpret_cast(0x1000), 0u, nullptr)); + EXPECT_FALSE(mockCommandQueue->bufferCpuCopyAllowed(buffer.get(), CL_COMMAND_WRITE_BUFFER, true, MemoryConstants::pageSize, reinterpret_cast(0x1000), 0u, nullptr)); +} + TEST(ReadWriteBufferOnCpu, givenNoHostPtrAndAlignedSizeWhenMemoryAllocationIsInNonSystemMemoryPoolThenIsReadWriteOnCpuAllowedReturnsFalse) { auto device = std::make_unique(MockDevice::createWithNewExecutionEnvironment(nullptr)); auto memoryManager = new MockMemoryManager(*device->getExecutionEnvironment()); @@ -268,4 +294,4 @@ TEST(ReadWriteBufferOnCpu, given32BitAppAndLocalMemoryBufferWhenAskedForCpuTrans EXPECT_TRUE(buffer->isReadWriteOnCpuAllowed()); EXPECT_TRUE(buffer->isReadWriteOnCpuPreffered(reinterpret_cast(0x1000), MemoryConstants::pageSize)); -} \ No newline at end of file +} diff --git a/opencl/test/unit_test/test_files/igdrcl.config b/opencl/test/unit_test/test_files/igdrcl.config index 8537b07773..19910b0eaf 100644 --- a/opencl/test/unit_test/test_files/igdrcl.config +++ b/opencl/test/unit_test/test_files/igdrcl.config @@ -1,8 +1,8 @@ FlushAllCaches = 0 MakeEachEnqueueBlocking = 0 EnableNullHardware = 0 -DoCpuCopyOnReadBuffer = 0 -DoCpuCopyOnWriteBuffer = 0 +DoCpuCopyOnReadBuffer = -1 +DoCpuCopyOnWriteBuffer = -1 DisableResourceRecycling = 0 PrintDebugSettings = 0 PrintDebugMessages = 0 diff --git a/shared/source/debug_settings/debug_variables_base.inl b/shared/source/debug_settings/debug_variables_base.inl index a6ed79d608..42f0781734 100644 --- a/shared/source/debug_settings/debug_variables_base.inl +++ b/shared/source/debug_settings/debug_variables_base.inl @@ -46,11 +46,11 @@ DECLARE_DEBUG_VARIABLE(int32_t, OverrideMaxWorkgroupSize, -1, "-1: Default, !=-1 DECLARE_DEBUG_VARIABLE(int32_t, DirectSubmissionBufferPlacement, -1, "-1: do not override, 0: non-system, 1: system") DECLARE_DEBUG_VARIABLE(int32_t, DirectSubmissionSemaphorePlacement, -1, "-1: do not override, 0: non-system, 1: system") DECLARE_DEBUG_VARIABLE(int32_t, DirectSubmissionDisableCpuCacheFlush, -1, "-1: do not override, 0: disable, 1: enable") +DECLARE_DEBUG_VARIABLE(int32_t, DoCpuCopyOnReadBuffer, -1, "-1: default 0: do not use CPU copy, 1: triggers CPU copy path for Read Buffer calls, only supported for some basic use cases (no blocked user events in dependencies tree)") +DECLARE_DEBUG_VARIABLE(int32_t, DoCpuCopyOnWriteBuffer, -1, "-1: default 0: do not use CPU copy, 1: triggers CPU copy path for Write Buffer calls, only supported for some basic use cases (no blocked user events in dependencies tree)") DECLARE_DEBUG_VARIABLE(bool, EnableDebugBreak, true, "Enable DEBUG_BREAKs") DECLARE_DEBUG_VARIABLE(bool, FlushAllCaches, false, "pipe controls between enqueues flush all possible caches") DECLARE_DEBUG_VARIABLE(bool, MakeEachEnqueueBlocking, false, "equivalent of finish after each enqueue") -DECLARE_DEBUG_VARIABLE(bool, DoCpuCopyOnReadBuffer, false, "triggers CPU copy path for Read Buffer calls, only supported for some basic use cases (no blocked user events in dependencies tree)") -DECLARE_DEBUG_VARIABLE(bool, DoCpuCopyOnWriteBuffer, false, "triggers CPU copy path for Write Buffer calls, only supported for some basic use cases (no blocked user events in dependencies tree)") DECLARE_DEBUG_VARIABLE(bool, DisableResourceRecycling, false, "when set to true disables resource recycling optimization") DECLARE_DEBUG_VARIABLE(bool, ForceDispatchScheduler, false, "dispatches scheduler kernel instead of kernel enqueued") DECLARE_DEBUG_VARIABLE(bool, TrackParentEvents, false, "events track their parents")