Skip to content

Commit 1b04210

Browse files
Extend TimestampPacket data with Submit field
Change-Id: Ia2a23003476db06afeee25ca7766cfd1bc6da4a3 Signed-off-by: Dunajski, Bartosz <[email protected]>
1 parent 75e26f3 commit 1b04210

File tree

3 files changed

+26
-35
lines changed

3 files changed

+26
-35
lines changed

runtime/command_queue/gpgpu_walker.inl

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -588,7 +588,7 @@ void GpgpuWalkerHelper<GfxFamily>::dispatchWalker(
588588
bool setupTimestampPacket = timestampPacket && (currentDispatchIndex == multiDispatchInfo.size() - 1);
589589
if (setupTimestampPacket) {
590590
GpgpuWalkerHelper<GfxFamily>::setupTimestampPacket(commandStream, nullptr, timestampPacket,
591-
TimestampPacket::WriteOperationType::Start);
591+
TimestampPacket::WriteOperationType::BeforeWalker);
592592
}
593593

594594
// Program the walker. Invokes execution so all state should already be programmed
@@ -597,7 +597,7 @@ void GpgpuWalkerHelper<GfxFamily>::dispatchWalker(
597597

598598
if (setupTimestampPacket) {
599599
GpgpuWalkerHelper<GfxFamily>::setupTimestampPacket(commandStream, pWalkerCmd, timestampPacket,
600-
TimestampPacket::WriteOperationType::End);
600+
TimestampPacket::WriteOperationType::AfterWalker);
601601
}
602602

603603
auto idd = obtainInterfaceDescriptorData(pWalkerCmd);
@@ -744,7 +744,12 @@ void GpgpuWalkerHelper<GfxFamily>::setupTimestampPacket(
744744
TimestampPacket *timestampPacket,
745745
TimestampPacket::WriteOperationType writeOperationType) {
746746

747-
uint64_t address = timestampPacket->pickAddressForPipeControlWrite(writeOperationType);
747+
uint64_t address;
748+
if (TimestampPacket::WriteOperationType::BeforeWalker == writeOperationType) {
749+
address = timestampPacket->pickAddressForDataWrite(TimestampPacket::DataIndex::Submit);
750+
} else {
751+
address = timestampPacket->pickAddressForDataWrite(TimestampPacket::DataIndex::ContextEnd);
752+
}
748753

749754
auto pipeControlCmd = cmdStream->getSpaceForCmd<PIPE_CONTROL>();
750755
*pipeControlCmd = PIPE_CONTROL::sInit();

runtime/helpers/timestamp_packet.h

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,34 +33,28 @@ class TimestampPacket {
3333
GlobalStart,
3434
ContextEnd,
3535
GlobalEnd,
36+
Submit,
3637
Max
3738
};
3839

3940
enum class WriteOperationType : uint32_t {
40-
Start,
41-
End
41+
BeforeWalker,
42+
AfterWalker
4243
};
4344

4445
bool canBeReleased() const {
4546
return data[static_cast<uint32_t>(DataIndex::ContextEnd)] != 1 &&
4647
data[static_cast<uint32_t>(DataIndex::GlobalEnd)] != 1;
4748
}
4849

49-
const uint32_t *pickDataPtr() const { return &(data[0]); }
50-
51-
uint64_t pickAddressForPipeControlWrite(WriteOperationType operationType) const {
52-
auto index = WriteOperationType::Start == operationType
53-
? static_cast<uint32_t>(DataIndex::ContextStart)
54-
: static_cast<uint32_t>(DataIndex::ContextEnd);
55-
50+
uint64_t pickAddressForDataWrite(DataIndex operationType) const {
51+
auto index = static_cast<uint32_t>(operationType);
5652
return reinterpret_cast<uint64_t>(&data[index]);
5753
}
5854

59-
uint32_t pickDataValue(DataIndex index) const { return data[static_cast<uint32_t>(index)]; }
60-
61-
void initialize() { data = {{1, 1, 1, 1}}; }
55+
void initialize() { data = {{1, 1, 1, 1, 1}}; }
6256

6357
protected:
64-
std::array<uint32_t, static_cast<uint32_t>(DataIndex::Max)> data = {{1, 1, 1, 1}};
58+
std::array<uint32_t, static_cast<uint32_t>(DataIndex::Max)> data = {{1, 1, 1, 1, 1}};
6559
};
6660
} // namespace OCLRT

unit_tests/helpers/timestamp_packet_tests.cpp

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ TEST_F(TimestampPacketTests, whenNewTagIsTakenThenReinitialize) {
9494
MockTagAllocator<MockTimestampPacket> allocator(&memoryManager, 1);
9595

9696
auto firstNode = allocator.getTag();
97-
firstNode->tag->data = {{5, 6, 7, 8}};
97+
firstNode->tag->data = {{5, 6, 7, 8, 9}};
9898

9999
allocator.returnTag(firstNode);
100100

@@ -109,30 +109,22 @@ TEST_F(TimestampPacketTests, whenNewTagIsTakenThenReinitialize) {
109109
TEST_F(TimestampPacketTests, whenObjectIsCreatedThenInitializeAllStamps) {
110110
MockTimestampPacket timestampPacket;
111111
auto maxElements = static_cast<uint32_t>(TimestampPacket::DataIndex::Max);
112-
EXPECT_EQ(4u, maxElements);
112+
EXPECT_EQ(5u, maxElements);
113113

114114
EXPECT_EQ(maxElements, timestampPacket.data.size());
115115

116116
for (uint32_t i = 0; i < maxElements; i++) {
117-
EXPECT_EQ(1u, timestampPacket.pickDataValue(static_cast<TimestampPacket::DataIndex>(i)));
118117
EXPECT_EQ(1u, timestampPacket.data[i]);
119118
}
120119
}
121120

122121
TEST_F(TimestampPacketTests, whenAskedForStampAddressThenReturnWithValidOffset) {
123122
MockTimestampPacket timestampPacket;
124123

125-
EXPECT_EQ(&timestampPacket.data[0], timestampPacket.pickDataPtr());
126-
127-
auto startAddress = timestampPacket.pickAddressForPipeControlWrite(TimestampPacket::WriteOperationType::Start);
128-
auto expectedStartAddress = &timestampPacket.data[static_cast<uint32_t>(TimestampPacket::DataIndex::ContextStart)];
129-
EXPECT_EQ(expectedStartAddress, &timestampPacket.data[0]);
130-
EXPECT_EQ(reinterpret_cast<uint64_t>(expectedStartAddress), startAddress);
131-
132-
auto endAddress = timestampPacket.pickAddressForPipeControlWrite(TimestampPacket::WriteOperationType::End);
133-
auto expectedEndAddress = &timestampPacket.data[static_cast<uint32_t>(TimestampPacket::DataIndex::ContextEnd)];
134-
EXPECT_EQ(expectedEndAddress, &timestampPacket.data[2]);
135-
EXPECT_EQ(reinterpret_cast<uint64_t>(expectedEndAddress), endAddress);
124+
for (size_t i = 0; i < static_cast<uint32_t>(TimestampPacket::DataIndex::Max); i++) {
125+
auto address = timestampPacket.pickAddressForDataWrite(static_cast<TimestampPacket::DataIndex>(i));
126+
EXPECT_EQ(address, reinterpret_cast<uint64_t>(&timestampPacket.data[i]));
127+
}
136128
}
137129

138130
HWTEST_F(TimestampPacketTests, givenDebugVariableEnabledWhenEstimatingStreamSizeThenAddTwoPipeControls) {
@@ -152,7 +144,7 @@ HWTEST_F(TimestampPacketTests, givenDebugVariableEnabledWhenEstimatingStreamSize
152144
getCommandStream<FamilyType, CL_COMMAND_NDRANGE_KERNEL>(cmdQ, false, false, multiDispatchInfo);
153145
auto sizeWithEnabled = cmdQ.requestedCmdStreamSize;
154146

155-
EXPECT_EQ(sizeWithEnabled, sizeWithDisabled + 2 * sizeof(typename FamilyType::PIPE_CONTROL));
147+
EXPECT_EQ(sizeWithEnabled, sizeWithDisabled + (2 * sizeof(typename FamilyType::PIPE_CONTROL)));
156148
}
157149

158150
HWCMDTEST_F(IGFX_GEN8_CORE, TimestampPacketTests, givenTimestampPacketWhenDispatchingGpuWalkerThenAddTwoPcForLastWalker) {
@@ -204,11 +196,11 @@ HWCMDTEST_F(IGFX_GEN8_CORE, TimestampPacketTests, givenTimestampPacketWhenDispat
204196
} else if (walkersFound == 2) {
205197
auto pipeControl = genCmdCast<PIPE_CONTROL *>(*--it);
206198
EXPECT_NE(nullptr, pipeControl);
207-
verifyPipeControl(pipeControl, timestampPacket.pickAddressForPipeControlWrite(TimestampPacket::WriteOperationType::Start));
199+
verifyPipeControl(pipeControl, timestampPacket.pickAddressForDataWrite(TimestampPacket::DataIndex::Submit));
208200
it++;
209201
pipeControl = genCmdCast<PIPE_CONTROL *>(*++it);
210202
EXPECT_NE(nullptr, pipeControl);
211-
verifyPipeControl(pipeControl, timestampPacket.pickAddressForPipeControlWrite(TimestampPacket::WriteOperationType::End));
203+
verifyPipeControl(pipeControl, timestampPacket.pickAddressForDataWrite(TimestampPacket::DataIndex::ContextEnd));
212204
it--;
213205
}
214206
}
@@ -256,8 +248,8 @@ HWTEST_F(TimestampPacketTests, givenDebugVariableEnabledWhenEnqueueingThenObtain
256248
EXPECT_NE(node1, node2);
257249
size_t dataSize = sizeof(uint32_t) * static_cast<size_t>(TimestampPacket::DataIndex::Max);
258250
// mark nodes as ready
259-
memset(const_cast<uint32_t *>(node1->tag->pickDataPtr()), 0, dataSize);
260-
memset(const_cast<uint32_t *>(node2->tag->pickDataPtr()), 0, dataSize);
251+
memset(reinterpret_cast<void *>(node1->tag->pickAddressForDataWrite(TimestampPacket::DataIndex::ContextStart)), 0, dataSize);
252+
memset(reinterpret_cast<void *>(node2->tag->pickAddressForDataWrite(TimestampPacket::DataIndex::ContextStart)), 0, dataSize);
261253

262254
clReleaseEvent(event2);
263255
EXPECT_EQ(0u, mockTagAllocator->returnedToFreePoolNodes.size()); // nothing returned. cmdQ owns node2

0 commit comments

Comments
 (0)