mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-25 05:24:02 +08:00
Allow cpu copy with debug keys only when ready waitlist events
Change-Id: If9293787c76b8248a84e25d03cbf9a9b5aaf7cca
This commit is contained in:
committed by
sys_ocldev
parent
1ae92e995a
commit
432b8f20a7
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2017-2018 Intel Corporation
|
||||
* Copyright (C) 2017-2019 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -94,7 +94,7 @@ TEST_F(EnqueueReadBuffer, eventReturnedShouldBeMaxOfInputEventsAndCmdQPlus1) {
|
||||
|
||||
delete pEvent;
|
||||
}
|
||||
TEST_F(EnqueueReadBuffer, givenInOrderQueueAndEnabledSupportCpuCopiesAndDstPtrEqualSrcPtrWithEventsWhenReadBufferIsExecutedThenTaskLevelShouldNotBeIncreased) {
|
||||
TEST_F(EnqueueReadBuffer, givenInOrderQueueAndForcedCpuCopyOnReadBufferAndDstPtrEqualSrcPtrWithEventsNotBlockedWhenReadBufferIsExecutedThenTaskLevelShouldNotBeIncreased) {
|
||||
DebugManagerStateRestore dbgRestore;
|
||||
DebugManager.flags.DoCpuCopyOnReadBuffer.set(true);
|
||||
cl_int retVal = CL_SUCCESS;
|
||||
@@ -134,7 +134,40 @@ TEST_F(EnqueueReadBuffer, givenInOrderQueueAndEnabledSupportCpuCopiesAndDstPtrEq
|
||||
|
||||
pEvent->release();
|
||||
}
|
||||
TEST_F(EnqueueReadBuffer, givenOutOfOrderQueueAndEnabledSupportCpuCopiesAndDstPtrEqualSrcPtrWithEventsWhenReadBufferIsExecutedThenTaskLevelShouldNotBeIncreased) {
|
||||
|
||||
TEST_F(EnqueueReadBuffer, givenInOrderQueueAndForcedCpuCopyOnReadBufferAndDstPtrEqualSrcPtrWhenReadBufferIsExecutedThenTaskLevelShouldNotBeIncreased) {
|
||||
DebugManagerStateRestore dbgRestore;
|
||||
DebugManager.flags.DoCpuCopyOnReadBuffer.set(true);
|
||||
cl_int retVal = CL_SUCCESS;
|
||||
uint32_t taskLevelCmdQ = 17;
|
||||
pCmdQ->taskLevel = taskLevelCmdQ;
|
||||
|
||||
cl_bool blockingRead = CL_TRUE;
|
||||
size_t size = sizeof(cl_float);
|
||||
|
||||
cl_event event = nullptr;
|
||||
auto srcBuffer = std::unique_ptr<Buffer>(BufferHelper<>::create());
|
||||
void *ptr = srcBuffer->getCpuAddressForMemoryTransfer();
|
||||
retVal = pCmdQ->enqueueReadBuffer(srcBuffer.get(),
|
||||
blockingRead,
|
||||
0,
|
||||
size,
|
||||
ptr,
|
||||
0,
|
||||
nullptr,
|
||||
&event);
|
||||
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
ASSERT_NE(nullptr, event);
|
||||
|
||||
auto pEvent = (Event *)event;
|
||||
EXPECT_EQ(17u, pEvent->taskLevel);
|
||||
EXPECT_EQ(17u, pCmdQ->taskLevel);
|
||||
|
||||
pEvent->release();
|
||||
}
|
||||
|
||||
TEST_F(EnqueueReadBuffer, givenOutOfOrderQueueAndForcedCpuCopyOnReadBufferAndDstPtrEqualSrcPtrWithEventsNotBlockedWhenReadBufferIsExecutedThenTaskLevelShouldNotBeIncreased) {
|
||||
DebugManagerStateRestore dbgRestore;
|
||||
DebugManager.flags.DoCpuCopyOnReadBuffer.set(true);
|
||||
std::unique_ptr<CommandQueue> pCmdOOQ(createCommandQueue(pDevice, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE));
|
||||
@@ -175,6 +208,46 @@ TEST_F(EnqueueReadBuffer, givenOutOfOrderQueueAndEnabledSupportCpuCopiesAndDstPt
|
||||
|
||||
pEvent->release();
|
||||
}
|
||||
|
||||
TEST_F(EnqueueReadBuffer, givenInOrderQueueAndForcedCpuCopyOnReadBufferAndEventNotReadyWhenReadBufferIsExecutedThenTaskLevelShouldBeIncreased) {
|
||||
DebugManagerStateRestore dbgRestore;
|
||||
DebugManager.flags.DoCpuCopyOnReadBuffer.set(true);
|
||||
cl_int retVal = CL_SUCCESS;
|
||||
uint32_t taskLevelCmdQ = 17;
|
||||
pCmdQ->taskLevel = taskLevelCmdQ;
|
||||
|
||||
Event event1(pCmdQ, CL_COMMAND_NDRANGE_KERNEL, Event::eventNotReady, 4);
|
||||
|
||||
cl_bool blockingRead = CL_FALSE;
|
||||
size_t size = sizeof(cl_float);
|
||||
cl_event eventWaitList[] = {&event1};
|
||||
cl_uint numEventsInWaitList = sizeof(eventWaitList) / sizeof(eventWaitList[0]);
|
||||
cl_event event = nullptr;
|
||||
auto dstBuffer = std::unique_ptr<Buffer>(BufferHelper<>::create());
|
||||
cl_float mem[4];
|
||||
|
||||
retVal = pCmdQ->enqueueReadBuffer(dstBuffer.get(),
|
||||
blockingRead,
|
||||
0,
|
||||
size,
|
||||
mem,
|
||||
numEventsInWaitList,
|
||||
eventWaitList,
|
||||
&event);
|
||||
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
ASSERT_NE(nullptr, event);
|
||||
|
||||
auto pEvent = (Event *)event;
|
||||
EXPECT_EQ(Event::eventNotReady, pEvent->taskLevel);
|
||||
EXPECT_EQ(Event::eventNotReady, pCmdQ->taskLevel);
|
||||
event1.taskLevel = 20;
|
||||
event1.setStatus(CL_COMPLETE);
|
||||
pEvent->updateExecutionStatus();
|
||||
pCmdQ->isQueueBlocked();
|
||||
pEvent->release();
|
||||
}
|
||||
|
||||
TEST_F(EnqueueReadBuffer, givenInOrderQueueAndDisabledSupportCpuCopiesAndDstPtrEqualSrcPtrWithEventsWhenReadBufferIsExecutedThenTaskLevelShouldNotBeIncreased) {
|
||||
DebugManagerStateRestore dbgRestore;
|
||||
DebugManager.flags.DoCpuCopyOnReadBuffer.set(false);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2017-2018 Intel Corporation
|
||||
* Copyright (C) 2017-2019 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -95,7 +95,7 @@ TEST_F(EnqueueWriteBufferTypeTest, eventReturnedShouldBeMaxOfInputEventsAndCmdQP
|
||||
delete pEvent;
|
||||
}
|
||||
|
||||
TEST_F(EnqueueWriteBufferTypeTest, givenInOrderQueueAndEnabledSupportCpuCopiesAndDstPtrEqualSrcPtrWithEventsWhenWriteBufferIsExecutedThenTaskLevelShouldNotBeIncreased) {
|
||||
TEST_F(EnqueueWriteBufferTypeTest, givenInOrderQueueAndForcedCpuCopyOnWriteBufferAndDstPtrEqualSrcPtrWithEventsNotBlockedWhenWriteBufferIsExecutedThenTaskLevelShouldNotBeIncreased) {
|
||||
DebugManagerStateRestore dbgRestore;
|
||||
DebugManager.flags.DoCpuCopyOnWriteBuffer.set(true);
|
||||
cl_int retVal = CL_SUCCESS;
|
||||
@@ -135,7 +135,78 @@ TEST_F(EnqueueWriteBufferTypeTest, givenInOrderQueueAndEnabledSupportCpuCopiesAn
|
||||
|
||||
pEvent->release();
|
||||
}
|
||||
TEST_F(EnqueueWriteBufferTypeTest, givenOutOfOrderQueueAndEnabledSupportCpuCopiesAndDstPtrEqualSrcPtrWithEventsWhenWriteBufferIsExecutedThenTaskLevelShouldNotBeIncreased) {
|
||||
|
||||
TEST_F(EnqueueWriteBufferTypeTest, givenInOrderQueueAndForcedCpuCopyOnWriteBufferAndEventNotReadyWhenWriteBufferIsExecutedThenTaskLevelShouldBeIncreased) {
|
||||
DebugManagerStateRestore dbgRestore;
|
||||
DebugManager.flags.DoCpuCopyOnWriteBuffer.set(true);
|
||||
cl_int retVal = CL_SUCCESS;
|
||||
uint32_t taskLevelCmdQ = 17;
|
||||
pCmdQ->taskLevel = taskLevelCmdQ;
|
||||
|
||||
Event event1(pCmdQ, CL_COMMAND_NDRANGE_KERNEL, Event::eventNotReady, 4);
|
||||
|
||||
cl_bool blockingWrite = CL_FALSE;
|
||||
size_t size = sizeof(cl_float);
|
||||
cl_event eventWaitList[] = {&event1};
|
||||
cl_uint numEventsInWaitList = sizeof(eventWaitList) / sizeof(eventWaitList[0]);
|
||||
cl_event event = nullptr;
|
||||
auto srcBuffer = std::unique_ptr<Buffer>(BufferHelper<>::create());
|
||||
cl_float mem[4];
|
||||
|
||||
retVal = pCmdQ->enqueueWriteBuffer(srcBuffer.get(),
|
||||
blockingWrite,
|
||||
0,
|
||||
size,
|
||||
mem,
|
||||
numEventsInWaitList,
|
||||
eventWaitList,
|
||||
&event);
|
||||
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
ASSERT_NE(nullptr, event);
|
||||
|
||||
auto pEvent = (Event *)event;
|
||||
EXPECT_EQ(Event::eventNotReady, pEvent->taskLevel);
|
||||
EXPECT_EQ(Event::eventNotReady, pCmdQ->taskLevel);
|
||||
event1.taskLevel = 20;
|
||||
event1.setStatus(CL_COMPLETE);
|
||||
pEvent->updateExecutionStatus();
|
||||
pCmdQ->isQueueBlocked();
|
||||
pEvent->release();
|
||||
}
|
||||
|
||||
TEST_F(EnqueueWriteBufferTypeTest, givenInOrderQueueAndForcedCpuCopyOnWriteBufferAndDstPtrEqualSrcPtrWhenWriteBufferIsExecutedThenTaskLevelShouldNotBeIncreased) {
|
||||
DebugManagerStateRestore dbgRestore;
|
||||
DebugManager.flags.DoCpuCopyOnWriteBuffer.set(true);
|
||||
cl_int retVal = CL_SUCCESS;
|
||||
uint32_t taskLevelCmdQ = 17;
|
||||
pCmdQ->taskLevel = taskLevelCmdQ;
|
||||
|
||||
cl_bool blockingRead = CL_TRUE;
|
||||
size_t size = sizeof(cl_float);
|
||||
cl_event event = nullptr;
|
||||
auto srcBuffer = std::unique_ptr<Buffer>(BufferHelper<>::create());
|
||||
void *ptr = srcBuffer->getCpuAddressForMemoryTransfer();
|
||||
retVal = pCmdQ->enqueueWriteBuffer(srcBuffer.get(),
|
||||
blockingRead,
|
||||
0,
|
||||
size,
|
||||
ptr,
|
||||
0,
|
||||
nullptr,
|
||||
&event);
|
||||
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
ASSERT_NE(nullptr, event);
|
||||
|
||||
auto pEvent = (Event *)event;
|
||||
EXPECT_EQ(17u, pEvent->taskLevel);
|
||||
EXPECT_EQ(17u, pCmdQ->taskLevel);
|
||||
|
||||
pEvent->release();
|
||||
}
|
||||
|
||||
TEST_F(EnqueueWriteBufferTypeTest, givenOutOfOrderQueueAndForcedCpuCopyOnWriteBufferAndDstPtrEqualSrcPtrWithEventsWhenWriteBufferIsExecutedThenTaskLevelShouldNotBeIncreased) {
|
||||
DebugManagerStateRestore dbgRestore;
|
||||
DebugManager.flags.DoCpuCopyOnWriteBuffer.set(true);
|
||||
std::unique_ptr<CommandQueue> pCmdOOQ(createCommandQueue(pDevice, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE));
|
||||
|
||||
Reference in New Issue
Block a user