Assign data to overwritten bcs barrier timestamps
Signed-off-by: Lukasz Jobczyk <lukasz.jobczyk@intel.com>
This commit is contained in:
parent
05a0664720
commit
fec738208a
|
@ -1062,6 +1062,15 @@ void CommandQueue::setupBarrierTimestampForBcsEngines(aub_stream::EngineType eng
|
|||
}
|
||||
|
||||
// Save latest timestamp (override previous, if any).
|
||||
if (!bcsTimestampPacketContainers[currentBcsIndex].lastBarrierToWaitFor.peekNodes().empty()) {
|
||||
std::array<uint32_t, 8u> timestampData;
|
||||
timestampData.fill(std::numeric_limits<uint32_t>::max());
|
||||
for (auto &node : bcsTimestampPacketContainers[currentBcsIndex].lastBarrierToWaitFor.peekNodes()) {
|
||||
for (uint32_t i = 0; i < node->getPacketsUsed(); i++) {
|
||||
node->assignDataToAllTimestamps(i, timestampData.data());
|
||||
}
|
||||
}
|
||||
}
|
||||
TimestampPacketContainer newContainer{};
|
||||
newContainer.assignAndIncrementNodesRefCounts(timestampPacketDependencies.barrierNodes);
|
||||
bcsTimestampPacketContainers[currentBcsIndex].lastBarrierToWaitFor.swapNodes(newContainer);
|
||||
|
|
|
@ -2116,6 +2116,30 @@ TEST_F(CommandQueueWithTimestampPacketTests, givenOutOfOrderQueueWhenSetupBarrie
|
|||
EXPECT_EQ(queue.bcsTimestampPacketContainers.size(), barrierNode->refCountFetchSub(0));
|
||||
}
|
||||
|
||||
TEST_F(CommandQueueWithTimestampPacketTests, givenOutOfOrderQueueWhenSetupBarrierTimestampForBcsEnginesAndOverwritePreviousOneThenEnsureBarrierNodeHasDataAssigned) {
|
||||
const cl_queue_properties props[3] = {CL_QUEUE_PROPERTIES, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, 0};
|
||||
MockContext context{};
|
||||
MockCommandQueue queue{&context, context.getDevice(0), props, false};
|
||||
TimestampPacketDependencies dependencies{};
|
||||
queue.getGpgpuCommandStreamReceiver().requestStallingCommandsOnNextFlush();
|
||||
for (auto &containers : queue.bcsTimestampPacketContainers) {
|
||||
EXPECT_TRUE(containers.lastBarrierToWaitFor.peekNodes().empty());
|
||||
}
|
||||
|
||||
queue.setupBarrierTimestampForBcsEngines(aub_stream::EngineType::ENGINE_BCS, dependencies);
|
||||
EXPECT_EQ(1u, dependencies.barrierNodes.peekNodes().size());
|
||||
auto barrierNode = dependencies.barrierNodes.peekNodes()[0];
|
||||
EXPECT_EQ(1u, barrierNode->getContextEndValue(0u));
|
||||
dependencies.moveNodesToNewContainer(*queue.getDeferredTimestampPackets());
|
||||
queue.getGpgpuCommandStreamReceiver().requestStallingCommandsOnNextFlush();
|
||||
|
||||
queue.setupBarrierTimestampForBcsEngines(aub_stream::EngineType::ENGINE_BCS, dependencies);
|
||||
EXPECT_NE(1u, barrierNode->getContextEndValue(0u));
|
||||
EXPECT_EQ(1u, dependencies.barrierNodes.peekNodes().size());
|
||||
barrierNode = dependencies.barrierNodes.peekNodes()[0];
|
||||
EXPECT_EQ(1u, barrierNode->getContextEndValue(0u));
|
||||
}
|
||||
|
||||
TEST_F(CommandQueueWithTimestampPacketTests, givenOutOfOrderQueueWhenSetupBarrierTimestampForBcsEnginesCalledOnNonBcsEngineThenEnsureBarrierNodeIsPresentAndSaveItForBcses) {
|
||||
const cl_queue_properties props[3] = {CL_QUEUE_PROPERTIES, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, 0};
|
||||
MockContext context{};
|
||||
|
|
Loading…
Reference in New Issue