mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
Optimize waiting scheme in user events scenarios.
- do not wait on map/unmap if zero copy resource. - do not wait in marker commands at all. Change-Id: I74cdd8320d13602bf662eed412ed2fcad1504989 Signed-off-by: Mrozek, Michal <michal.mrozek@intel.com>
This commit is contained in:

committed by
sys_ocldev

parent
64403ef630
commit
7f7f1b8ac9
@ -76,9 +76,8 @@ CompletionStamp &CommandMapUnmap::submit(uint32_t taskLevel, bool terminated) {
|
|||||||
dispatchFlags,
|
dispatchFlags,
|
||||||
cmdQ.getDevice());
|
cmdQ.getDevice());
|
||||||
|
|
||||||
cmdQ.waitUntilComplete(completionStamp.taskCount, completionStamp.flushStamp, false);
|
|
||||||
|
|
||||||
if (!memObj.isMemObjZeroCopy()) {
|
if (!memObj.isMemObjZeroCopy()) {
|
||||||
|
cmdQ.waitUntilComplete(completionStamp.taskCount, completionStamp.flushStamp, false);
|
||||||
if (op == MAP) {
|
if (op == MAP) {
|
||||||
memObj.transferDataToHostPtr(copySize, copyOffset);
|
memObj.transferDataToHostPtr(copySize, copyOffset);
|
||||||
} else if (!readOnly) {
|
} else if (!readOnly) {
|
||||||
@ -283,8 +282,6 @@ CompletionStamp &CommandMarker::submit(uint32_t taskLevel, bool terminated) {
|
|||||||
dispatchFlags,
|
dispatchFlags,
|
||||||
cmdQ.getDevice());
|
cmdQ.getDevice());
|
||||||
|
|
||||||
cmdQ.waitUntilComplete(completionStamp.taskCount, completionStamp.flushStamp, false);
|
|
||||||
|
|
||||||
return completionStamp;
|
return completionStamp;
|
||||||
}
|
}
|
||||||
} // namespace NEO
|
} // namespace NEO
|
||||||
|
@ -177,7 +177,7 @@ HWTEST_F(CommandQueueHwTest, addMapUnmapToWaitlistEventsDoesntAddDependenciesInt
|
|||||||
buffer->decRefInternal();
|
buffer->decRefInternal();
|
||||||
}
|
}
|
||||||
|
|
||||||
HWTEST_F(CommandQueueHwTest, givenMapCommandWhenZeroStateCommandIsSubmittedThenTaskCountIsBeingWaited) {
|
HWTEST_F(CommandQueueHwTest, givenMapCommandWhenZeroStateCommandIsSubmittedThenTaskCountIsNotBeingWaited) {
|
||||||
auto buffer = new MockBuffer;
|
auto buffer = new MockBuffer;
|
||||||
CommandQueueHw<FamilyType> *pHwQ = reinterpret_cast<CommandQueueHw<FamilyType> *>(pCmdQ);
|
CommandQueueHw<FamilyType> *pHwQ = reinterpret_cast<CommandQueueHw<FamilyType> *>(pCmdQ);
|
||||||
|
|
||||||
@ -194,6 +194,28 @@ HWTEST_F(CommandQueueHwTest, givenMapCommandWhenZeroStateCommandIsSubmittedThenT
|
|||||||
EXPECT_NE(nullptr, pHwQ->virtualEvent);
|
EXPECT_NE(nullptr, pHwQ->virtualEvent);
|
||||||
pHwQ->virtualEvent->setStatus(CL_COMPLETE);
|
pHwQ->virtualEvent->setStatus(CL_COMPLETE);
|
||||||
|
|
||||||
|
EXPECT_EQ(std::numeric_limits<uint32_t>::max(), pHwQ->latestTaskCountWaited);
|
||||||
|
buffer->decRefInternal();
|
||||||
|
}
|
||||||
|
|
||||||
|
HWTEST_F(CommandQueueHwTest, givenMapCommandWhenZeroStateCommandIsSubmittedOnNonZeroCopyBufferThenTaskCountIsBeingWaited) {
|
||||||
|
auto buffer = new MockBuffer;
|
||||||
|
buffer->isZeroCopy = false;
|
||||||
|
CommandQueueHw<FamilyType> *pHwQ = reinterpret_cast<CommandQueueHw<FamilyType> *>(pCmdQ);
|
||||||
|
|
||||||
|
MockEventBuilder eventBuilder;
|
||||||
|
MemObjSizeArray size = {{1, 1, 1}};
|
||||||
|
MemObjOffsetArray offset = {{0, 0, 0}};
|
||||||
|
pHwQ->enqueueBlockedMapUnmapOperation(nullptr,
|
||||||
|
0,
|
||||||
|
MAP,
|
||||||
|
buffer,
|
||||||
|
size, offset, false,
|
||||||
|
eventBuilder);
|
||||||
|
|
||||||
|
EXPECT_NE(nullptr, pHwQ->virtualEvent);
|
||||||
|
pHwQ->virtualEvent->setStatus(CL_COMPLETE);
|
||||||
|
|
||||||
EXPECT_EQ(1u, pHwQ->latestTaskCountWaited);
|
EXPECT_EQ(1u, pHwQ->latestTaskCountWaited);
|
||||||
buffer->decRefInternal();
|
buffer->decRefInternal();
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@ class MockBuffer : public MockBufferStorage, public Buffer {
|
|||||||
public:
|
public:
|
||||||
using Buffer::magic;
|
using Buffer::magic;
|
||||||
using Buffer::offset;
|
using Buffer::offset;
|
||||||
|
using MemObj::isZeroCopy;
|
||||||
using MockBufferStorage::device;
|
using MockBufferStorage::device;
|
||||||
|
|
||||||
MockBuffer(GraphicsAllocation &alloc)
|
MockBuffer(GraphicsAllocation &alloc)
|
||||||
|
Reference in New Issue
Block a user