Skip to content

Commit c4a936d

Browse files
Track TSP OOQ ownership
Signed-off-by: Bartosz Dunajski <[email protected]>
1 parent 0d973aa commit c4a936d

File tree

4 files changed

+32
-50
lines changed

4 files changed

+32
-50
lines changed

opencl/source/command_queue/command_queue.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -629,7 +629,9 @@ void CommandQueue::obtainNewTimestampPacketNodes(size_t numberOfNodes, Timestamp
629629
clearAllDependencies = false;
630630
}
631631

632-
previousNodes.resolveDependencies(clearAllDependencies);
632+
if (clearAllDependencies) {
633+
previousNodes.moveNodesToNewContainer(*deferredTimestampPackets);
634+
}
633635

634636
DEBUG_BREAK_IF(timestampPacketContainer->peekNodes().size() > 0);
635637

opencl/test/unit_test/helpers/timestamp_packet_1_tests.cpp

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -903,6 +903,22 @@ HWTEST_F(TimestampPacketTests, givenTimestampPacketWriteEnabledWhenEnqueueingThe
903903
EXPECT_EQ(0u, deferredTimestampPackets->peekNodes().size());
904904
}
905905

906+
HWTEST_F(TimestampPacketTests, givenTimestampPacketWriteEnabledWhenEnqueueingToOoqThenMoveToDeferredList) {
907+
device->getUltCommandStreamReceiver<FamilyType>().timestampPacketWriteEnabled = true;
908+
909+
auto cmdQ = std::make_unique<MockCommandQueueHw<FamilyType>>(context, device.get(), nullptr);
910+
cmdQ->setOoqEnabled();
911+
912+
TimestampPacketContainer *deferredTimestampPackets = cmdQ->deferredTimestampPackets.get();
913+
914+
cmdQ->enqueueKernel(kernel->mockKernel, 1, nullptr, gws, nullptr, 0, nullptr, nullptr);
915+
EXPECT_EQ(0u, deferredTimestampPackets->peekNodes().size());
916+
917+
cmdQ->enqueueKernel(kernel->mockKernel, 1, nullptr, gws, nullptr, 0, nullptr, nullptr);
918+
919+
EXPECT_EQ(1u, deferredTimestampPackets->peekNodes().size());
920+
}
921+
906922
HWTEST_F(TimestampPacketTests, givenTimestampPacketWriteEnabledWhenEnqueueingBlockingThenTrackOwnershipUntilQueueIsCompleted) {
907923
DebugManager.flags.MakeEachEnqueueBlocking.set(true);
908924

@@ -1403,35 +1419,6 @@ HWTEST_F(TimestampPacketTests, givenAlreadyAssignedNodeWhenEnqueueingBlockedThen
14031419
cmdQ->isQueueBlocked();
14041420
}
14051421

1406-
HWTEST_F(TimestampPacketTests, givenAlreadyAssignedNodeWhenEnqueueingThenDontKeepDependencyOnPreviousNodeIfItsReady) {
1407-
device->getUltCommandStreamReceiver<FamilyType>().timestampPacketWriteEnabled = true;
1408-
1409-
MockCommandQueueHw<FamilyType> cmdQ(context, device.get(), nullptr);
1410-
TimestampPacketContainer previousNodes;
1411-
cmdQ.obtainNewTimestampPacketNodes(1, previousNodes, false, false);
1412-
auto firstNode = cmdQ.timestampPacketContainer->peekNodes().at(0);
1413-
setTagToReadyState(firstNode);
1414-
1415-
cmdQ.enqueueKernel(kernel->mockKernel, 1, nullptr, gws, nullptr, 0, nullptr, nullptr);
1416-
1417-
HardwareParse hwParser;
1418-
hwParser.parseCommands<FamilyType>(*cmdQ.commandStream, 0);
1419-
1420-
uint32_t semaphoresFound = 0;
1421-
uint32_t atomicsFound = 0;
1422-
for (auto it = hwParser.cmdList.begin(); it != hwParser.cmdList.end(); it++) {
1423-
if (genCmdCast<typename FamilyType::MI_SEMAPHORE_WAIT *>(*it)) {
1424-
semaphoresFound++;
1425-
}
1426-
if (genCmdCast<typename FamilyType::MI_ATOMIC *>(*it)) {
1427-
atomicsFound++;
1428-
}
1429-
}
1430-
uint32_t expectedSemaphoresCount = (UnitTestHelper<FamilyType>::isAdditionalMiSemaphoreWaitRequired(device->getHardwareInfo()) ? 2 : 0);
1431-
EXPECT_EQ(expectedSemaphoresCount, semaphoresFound);
1432-
EXPECT_EQ(0u, atomicsFound);
1433-
}
1434-
14351422
HWTEST_F(TimestampPacketTests, givenAlreadyAssignedNodeWhenEnqueueingThenKeepDependencyOnPreviousNodeIfItsNotReady) {
14361423
using MI_SEMAPHORE_WAIT = typename FamilyType::MI_SEMAPHORE_WAIT;
14371424
using MI_ATOMIC = typename FamilyType::MI_ATOMIC;

shared/source/helpers/timestamp_packet.cpp

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,6 @@ void TimestampPacketContainer::swapNodes(TimestampPacketContainer &timestampPack
2727
timestampPacketNodes.swap(timestampPacketContainer.timestampPacketNodes);
2828
}
2929

30-
void TimestampPacketContainer::resolveDependencies(bool clearAllDependencies) {
31-
std::vector<TagNodeBase *> pendingNodes;
32-
33-
for (auto node : timestampPacketNodes) {
34-
if (node->canBeReleased() || clearAllDependencies) {
35-
node->returnTag();
36-
} else {
37-
pendingNodes.push_back(node);
38-
}
39-
}
40-
41-
std::swap(timestampPacketNodes, pendingNodes);
42-
}
43-
4430
void TimestampPacketContainer::assignAndIncrementNodesRefCounts(const TimestampPacketContainer &inputTimestampPacketContainer) {
4531
auto &inputNodes = inputTimestampPacketContainer.peekNodes();
4632
std::copy(inputNodes.begin(), inputNodes.end(), std::back_inserter(timestampPacketNodes));
@@ -56,10 +42,17 @@ void TimestampPacketContainer::makeResident(CommandStreamReceiver &commandStream
5642
}
5743
}
5844

45+
void TimestampPacketContainer::moveNodesToNewContainer(TimestampPacketContainer &timestampPacketContainer) {
46+
TimestampPacketContainer tempContainer;
47+
swapNodes(tempContainer);
48+
49+
timestampPacketContainer.assignAndIncrementNodesRefCounts(tempContainer);
50+
}
51+
5952
void TimestampPacketDependencies::moveNodesToNewContainer(TimestampPacketContainer &timestampPacketContainer) {
60-
timestampPacketContainer.assignAndIncrementNodesRefCounts(cacheFlushNodes);
61-
timestampPacketContainer.assignAndIncrementNodesRefCounts(previousEnqueueNodes);
62-
timestampPacketContainer.assignAndIncrementNodesRefCounts(barrierNodes);
63-
timestampPacketContainer.assignAndIncrementNodesRefCounts(auxToNonAuxNodes);
64-
timestampPacketContainer.assignAndIncrementNodesRefCounts(nonAuxToAuxNodes);
53+
cacheFlushNodes.moveNodesToNewContainer(timestampPacketContainer);
54+
previousEnqueueNodes.moveNodesToNewContainer(timestampPacketContainer);
55+
barrierNodes.moveNodesToNewContainer(timestampPacketContainer);
56+
auxToNonAuxNodes.moveNodesToNewContainer(timestampPacketContainer);
57+
nonAuxToAuxNodes.moveNodesToNewContainer(timestampPacketContainer);
6558
}

shared/source/helpers/timestamp_packet.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,8 @@ class TimestampPacketContainer : public NonCopyableClass {
115115
void add(TagNodeBase *timestampPacketNode);
116116
void swapNodes(TimestampPacketContainer &timestampPacketContainer);
117117
void assignAndIncrementNodesRefCounts(const TimestampPacketContainer &inputTimestampPacketContainer);
118-
void resolveDependencies(bool clearAllDependencies);
119118
void makeResident(CommandStreamReceiver &commandStreamReceiver);
119+
void moveNodesToNewContainer(TimestampPacketContainer &timestampPacketContainer);
120120

121121
protected:
122122
std::vector<TagNodeBase *> timestampPacketNodes;

0 commit comments

Comments
 (0)