blob: 79b8ea41da82a796788c49436377f85a5671fd86 [file] [log] [blame]
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00001//
Jim Flynn6398a982020-05-27 17:05:21 +01002// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00003// SPDX-License-Identifier: MIT
4//
5
6#include "ProfilingTestUtils.hpp"
7#include "ProfilingUtils.hpp"
8
9#include <armnn/Descriptors.hpp>
Sadik Armagan1625efc2021-06-10 18:24:34 +010010#include <armnn/utility/Assert.hpp>
Matthew Sloyan371b70e2020-09-11 10:14:57 +010011#include <armnn/utility/NumericCast.hpp>
12
Jim Flynnf7713212020-07-14 09:50:59 +010013#include <Processes.hpp>
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000014#include <ProfilingService.hpp>
Rob Hughes9542f902021-07-14 09:48:54 +010015#include <armnnUtils/Threads.hpp>
Sadik Armaganea41b572020-03-19 18:16:46 +000016
Nikhil Raj77fe76b2021-06-09 14:55:32 +010017#include <common/include/LabelsAndEventClasses.hpp>
18
Sadik Armaganea41b572020-03-19 18:16:46 +000019#include <test/TestUtils.hpp>
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000020
Sadik Armagan1625efc2021-06-10 18:24:34 +010021#include <doctest/doctest.h>
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000022
Finn Williamsa0de0562020-04-22 12:27:37 +010023uint32_t GetStreamMetaDataPacketSize()
24{
25 uint32_t sizeUint32 = sizeof(uint32_t);
26 uint32_t payloadSize = 0;
Matthew Sloyan371b70e2020-09-11 10:14:57 +010027 payloadSize += armnn::numeric_cast<uint32_t>(GetSoftwareInfo().size()) + 1;
28 payloadSize += armnn::numeric_cast<uint32_t>(GetHardwareVersion().size()) + 1;
29 payloadSize += armnn::numeric_cast<uint32_t>(GetSoftwareVersion().size()) + 1;
30 payloadSize += armnn::numeric_cast<uint32_t>(GetProcessName().size()) + 1;
Finn Williamsa0de0562020-04-22 12:27:37 +010031
32 // Add packetVersionEntries
Jim Flynn83d08a92020-07-09 13:48:16 +010033 payloadSize += 13 * 2 * sizeUint32;
Finn Williamsa0de0562020-04-22 12:27:37 +010034 // Add packetVersionCountSize
35 payloadSize += sizeUint32;
36
37 uint32_t headerSize = 2 * sizeUint32;
38 uint32_t bodySize = 10 * sizeUint32;
39
40 return headerSize + bodySize + payloadSize;
41}
42
Jan Eilersf78c7672020-07-01 18:09:39 +010043std::vector<BackendId> GetSuitableBackendRegistered()
44{
45 std::vector<BackendId> suitableBackends;
46 if (BackendRegistryInstance().IsBackendRegistered(GetComputeDeviceAsCString(armnn::Compute::CpuRef)))
47 {
48 suitableBackends.push_back(armnn::Compute::CpuRef);
49 }
50 if (BackendRegistryInstance().IsBackendRegistered(GetComputeDeviceAsCString(armnn::Compute::CpuAcc)))
51 {
52 suitableBackends.push_back(armnn::Compute::CpuAcc);
53 }
54 if (BackendRegistryInstance().IsBackendRegistered(GetComputeDeviceAsCString(armnn::Compute::GpuAcc)))
55 {
56 suitableBackends.push_back(armnn::Compute::GpuAcc);
57 }
58 return suitableBackends;
59}
60
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000061inline unsigned int OffsetToNextWord(unsigned int numberOfBytes)
62{
63 unsigned int uint32_t_size = sizeof(uint32_t);
64
65 unsigned int remainder = numberOfBytes % uint32_t_size;
66 if (remainder == 0)
67 {
68 return numberOfBytes;
69 }
70
71 return numberOfBytes + uint32_t_size - remainder;
72}
73
Keith Davis97da5e22020-03-05 16:25:28 +000074void VerifyTimelineHeaderBinary(const unsigned char* readableData,
75 unsigned int& offset,
76 uint32_t packetDataLength)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000077{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +010078 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000079
80 // Utils
81 unsigned int uint32_t_size = sizeof(uint32_t);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000082
Keith Davis97da5e22020-03-05 16:25:28 +000083 // Check the TimelineEventClassBinaryPacket header
Finn Williams0a336dc2020-05-11 15:39:58 +010084 uint32_t timelineBinaryPacketHeaderWord0 = ReadUint32(readableData, offset);
85 uint32_t timelineBinaryPacketFamily = (timelineBinaryPacketHeaderWord0 >> 26) & 0x0000003F;
86 uint32_t timelineBinaryPacketClass = (timelineBinaryPacketHeaderWord0 >> 19) & 0x0000007F;
87 uint32_t timelineBinaryPacketType = (timelineBinaryPacketHeaderWord0 >> 16) & 0x00000007;
88 uint32_t timelineBinaryPacketStreamId = (timelineBinaryPacketHeaderWord0 >> 0) & 0x00000007;
Sadik Armagan1625efc2021-06-10 18:24:34 +010089 CHECK(timelineBinaryPacketFamily == 1);
90 CHECK(timelineBinaryPacketClass == 0);
91 CHECK(timelineBinaryPacketType == 1);
92 CHECK(timelineBinaryPacketStreamId == 0);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000093 offset += uint32_t_size;
Finn Williams0a336dc2020-05-11 15:39:58 +010094 uint32_t timelineBinaryPacketHeaderWord1 = ReadUint32(readableData, offset);
95 uint32_t timelineBinaryPacketSequenceNumber = (timelineBinaryPacketHeaderWord1 >> 24) & 0x00000001;
96 uint32_t timelineBinaryPacketDataLength = (timelineBinaryPacketHeaderWord1 >> 0) & 0x00FFFFFF;
Sadik Armagan1625efc2021-06-10 18:24:34 +010097 CHECK(timelineBinaryPacketSequenceNumber == 0);
98 CHECK(timelineBinaryPacketDataLength == packetDataLength);
Keith Davis97da5e22020-03-05 16:25:28 +000099 offset += uint32_t_size;
100}
101
Jim Flynn6398a982020-05-27 17:05:21 +0100102ProfilingGuid VerifyTimelineLabelBinaryPacketData(Optional<ProfilingGuid> guid,
103 const std::string& label,
104 const unsigned char* readableData,
105 unsigned int& offset)
Keith Davis97da5e22020-03-05 16:25:28 +0000106{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100107 ARMNN_ASSERT(readableData);
Keith Davis97da5e22020-03-05 16:25:28 +0000108
109 // Utils
110 unsigned int uint32_t_size = sizeof(uint32_t);
111 unsigned int uint64_t_size = sizeof(uint64_t);
Matthew Sloyan371b70e2020-09-11 10:14:57 +0100112 unsigned int label_size = armnn::numeric_cast<unsigned int>(label.size());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000113
114 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000115 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100116 CHECK(eventClassDeclId == 0);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000117
118 // Check the profiling GUID
119 offset += uint32_t_size;
120 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
121 if (guid.has_value())
122 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100123 CHECK(readProfilingGuid == guid.value());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000124 }
125 else
126 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000127 armnn::profiling::ProfilingService profilingService;
Sadik Armagan1625efc2021-06-10 18:24:34 +0100128 CHECK(readProfilingGuid == profilingService.GetStaticId(label));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000129 }
130
131 // Check the SWTrace label
132 offset += uint64_t_size;
133 uint32_t swTraceLabelLength = ReadUint32(readableData, offset);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100134 CHECK(swTraceLabelLength == label_size + 1); // Label length including the null-terminator
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000135 offset += uint32_t_size;
Sadik Armagan1625efc2021-06-10 18:24:34 +0100136 CHECK(std::memcmp(readableData + offset, // Offset to the label in the buffer
Keith Davis97da5e22020-03-05 16:25:28 +0000137 label.data(), // The original label
138 swTraceLabelLength - 1) == 0); // The length of the label
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000139
140 // SWTrace strings are written in blocks of words, so the offset has to be updated to the next whole word
141 offset += OffsetToNextWord(swTraceLabelLength);
Jim Flynn6398a982020-05-27 17:05:21 +0100142
143 ProfilingGuid labelGuid(readProfilingGuid);
144 return labelGuid;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000145}
146
Keith Davis97da5e22020-03-05 16:25:28 +0000147void VerifyTimelineEventClassBinaryPacketData(ProfilingGuid guid,
Jim Flynn1892d212020-05-26 21:10:49 +0100148 ProfilingGuid nameGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000149 const unsigned char* readableData,
150 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000151{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100152 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000153
154 // Utils
155 unsigned int uint32_t_size = sizeof(uint32_t);
156 unsigned int uint64_t_size = sizeof(uint64_t);
157
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000158 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000159 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100160 CHECK(eventClassDeclId == 2);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000161
162 // Check the profiling GUID
163 offset += uint32_t_size;
164 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100165 CHECK(readProfilingGuid == guid);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000166
Jim Flynn1892d212020-05-26 21:10:49 +0100167 offset += uint64_t_size;
168 uint64_t readProfiilngNameGuid = ReadUint64(readableData, offset);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100169 CHECK(readProfiilngNameGuid == nameGuid);
Jim Flynn1892d212020-05-26 21:10:49 +0100170
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000171 // Update the offset to allow parsing to be continued after this function returns
172 offset += uint64_t_size;
173}
174
Keith Davis97da5e22020-03-05 16:25:28 +0000175void VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType relationshipType,
Jim Flynn6398a982020-05-27 17:05:21 +0100176 Optional<ProfilingGuid> relationshipGuid,
177 Optional<ProfilingGuid> headGuid,
178 Optional<ProfilingGuid> tailGuid,
179 Optional<ProfilingGuid> attributeGuid,
180 const unsigned char* readableData,
181 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000182{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100183 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000184
185 uint32_t relationshipTypeUint = 0;
186 switch (relationshipType)
187 {
188 case ProfilingRelationshipType::RetentionLink:
189 relationshipTypeUint = 0;
190 break;
191 case ProfilingRelationshipType::ExecutionLink:
192 relationshipTypeUint = 1;
193 break;
194 case ProfilingRelationshipType::DataLink:
195 relationshipTypeUint = 2;
196 break;
197 case ProfilingRelationshipType::LabelLink:
198 relationshipTypeUint = 3;
199 break;
200 default:
Sadik Armagan1625efc2021-06-10 18:24:34 +0100201 FAIL("Unknown relationship type");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000202 }
203
204 // Utils
205 unsigned int uint32_t_size = sizeof(uint32_t);
206 unsigned int uint64_t_size = sizeof(uint64_t);
207
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000208 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000209 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100210 CHECK(eventClassDeclId == 3);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000211
212 // Check the relationship type
213 offset += uint32_t_size;
214 uint32_t readRelationshipTypeUint = ReadUint32(readableData, offset);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100215 CHECK(readRelationshipTypeUint == relationshipTypeUint);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000216
217 // Check the relationship GUID
218 offset += uint32_t_size;
219 uint64_t readRelationshipGuid = ReadUint64(readableData, offset);
220 if (relationshipGuid.has_value())
221 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100222 CHECK(readRelationshipGuid == relationshipGuid.value());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000223 }
224 else
225 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100226 CHECK(readRelationshipGuid != ProfilingGuid(0));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000227 }
228
Jim Flynn6398a982020-05-27 17:05:21 +0100229 // Check the head GUID of the relationship
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000230 offset += uint64_t_size;
231 uint64_t readHeadRelationshipGuid = ReadUint64(readableData, offset);
232 if (headGuid.has_value())
233 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100234 CHECK(readHeadRelationshipGuid == headGuid.value());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000235 }
236 else
237 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100238 CHECK(readHeadRelationshipGuid != ProfilingGuid(0));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000239 }
240
Jim Flynn6398a982020-05-27 17:05:21 +0100241 // Check the tail GUID of the relationship
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000242 offset += uint64_t_size;
243 uint64_t readTailRelationshipGuid = ReadUint64(readableData, offset);
244 if (tailGuid.has_value())
245 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100246 CHECK(readTailRelationshipGuid == tailGuid.value());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000247 }
248 else
249 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100250 CHECK(readTailRelationshipGuid != ProfilingGuid(0));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000251 }
252
Jim Flynn6398a982020-05-27 17:05:21 +0100253 // Check the attribute GUID of the relationship
Finn Williams0a336dc2020-05-11 15:39:58 +0100254 offset += uint64_t_size;
255 uint64_t readAttributeRelationshipGuid = ReadUint64(readableData, offset);
256 if (attributeGuid.has_value())
257 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100258 CHECK(readAttributeRelationshipGuid == attributeGuid.value());
Finn Williams0a336dc2020-05-11 15:39:58 +0100259 }
260 else
261 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100262 CHECK(readAttributeRelationshipGuid == ProfilingGuid(0));
Finn Williams0a336dc2020-05-11 15:39:58 +0100263 }
264
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000265 // Update the offset to allow parsing to be continued after this function returns
266 offset += uint64_t_size;
267}
268
Jim Flynn6398a982020-05-27 17:05:21 +0100269ProfilingGuid VerifyTimelineEntityBinaryPacketData(Optional<ProfilingGuid> guid,
270 const unsigned char* readableData,
271 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000272{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100273 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000274
275 // Utils
276 unsigned int uint32_t_size = sizeof(uint32_t);
277 unsigned int uint64_t_size = sizeof(uint64_t);
278
279 // Reading TimelineEntityClassBinaryPacket
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000280 // Check the decl_id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000281 uint32_t entityDeclId = ReadUint32(readableData, offset);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100282 CHECK(entityDeclId == 1);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000283
284 // Check the profiling GUID
285 offset += uint32_t_size;
286 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
287
288 if (guid.has_value())
289 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100290 CHECK(readProfilingGuid == guid.value());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000291 }
292 else
293 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100294 CHECK(readProfilingGuid != ProfilingGuid(0));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000295 }
296
297 offset += uint64_t_size;
Jim Flynn6398a982020-05-27 17:05:21 +0100298
299 ProfilingGuid entityGuid(readProfilingGuid);
300 return entityGuid;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000301}
302
Jim Flynn6398a982020-05-27 17:05:21 +0100303ProfilingGuid VerifyTimelineEventBinaryPacket(Optional<uint64_t> timestamp,
Jim Flynn1fdeb992020-07-09 07:28:37 +0100304 Optional<int> threadId,
Jim Flynn6398a982020-05-27 17:05:21 +0100305 Optional<ProfilingGuid> eventGuid,
306 const unsigned char* readableData,
307 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000308{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100309 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000310
311 // Utils
312 unsigned int uint32_t_size = sizeof(uint32_t);
313 unsigned int uint64_t_size = sizeof(uint64_t);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000314
315 // Reading TimelineEventBinaryPacket
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000316 // Check the decl_id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000317 uint32_t entityDeclId = ReadUint32(readableData, offset);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100318 CHECK(entityDeclId == 4);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000319
320 // Check the timestamp
321 offset += uint32_t_size;
322 uint64_t readTimestamp = ReadUint64(readableData, offset);
323 if (timestamp.has_value())
324 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100325 CHECK(readTimestamp == timestamp.value());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000326 }
327 else
328 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100329 CHECK(readTimestamp != 0);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000330 }
331
332 // Check the thread id
333 offset += uint64_t_size;
Colm Donelan5bb3d8a2020-05-12 16:36:46 +0100334 std::vector<uint8_t> readThreadId(ThreadIdSize, 0);
335 ReadBytes(readableData, offset, ThreadIdSize, readThreadId.data());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000336 if (threadId.has_value())
337 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100338 CHECK(readThreadId == threadId.value());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000339 }
340 else
341 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100342 CHECK(readThreadId == armnnUtils::Threads::GetCurrentThreadId());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000343 }
344
345 // Check the event GUID
Colm Donelan5bb3d8a2020-05-12 16:36:46 +0100346 offset += ThreadIdSize;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000347 uint64_t readEventGuid = ReadUint64(readableData, offset);
348 if (eventGuid.has_value())
349 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100350 CHECK(readEventGuid == eventGuid.value());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000351 }
352 else
353 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100354 CHECK(readEventGuid != ProfilingGuid(0));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000355 }
356
357 offset += uint64_t_size;
Jim Flynn6398a982020-05-27 17:05:21 +0100358
359 ProfilingGuid eventid(readEventGuid);
360 return eventid;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000361}
362
363void VerifyPostOptimisationStructureTestImpl(armnn::BackendId backendId)
364{
365 using namespace armnn;
366
367 // Create runtime in which test will run
368 armnn::IRuntime::CreationOptions options;
369 options.m_ProfilingOptions.m_EnableProfiling = true;
Keith Davis33ed2212020-03-30 10:43:41 +0100370 options.m_ProfilingOptions.m_TimelineEnabled = true;
Kevin Mayd92a6e42021-02-04 10:27:41 +0000371 armnn::RuntimeImpl runtime(options);
Keith Davis33ed2212020-03-30 10:43:41 +0100372 GetProfilingService(&runtime).ResetExternalProfilingOptions(options.m_ProfilingOptions, false);
373
374 profiling::ProfilingServiceRuntimeHelper profilingServiceHelper(GetProfilingService(&runtime));
375 profilingServiceHelper.ForceTransitionToState(ProfilingState::NotConnected);
376 profilingServiceHelper.ForceTransitionToState(ProfilingState::WaitingForAck);
377 profilingServiceHelper.ForceTransitionToState(ProfilingState::Active);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000378
379 // build up the structure of the network
380 INetworkPtr net(INetwork::Create());
381
382 // Convolution details
383 TensorInfo inputInfo({ 1, 2, 5, 1 }, DataType::Float32);
Keith Davis97da5e22020-03-05 16:25:28 +0000384 TensorInfo weightInfo({ 3, 2, 3, 1 }, DataType::Float32);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000385 TensorInfo biasInfo({ 3 }, DataType::Float32);
Keith Davis97da5e22020-03-05 16:25:28 +0000386 TensorInfo outputInfo({ 1, 3, 7, 1 }, DataType::Float32);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000387 std::vector<float> weightsData{
Keith Davis97da5e22020-03-05 16:25:28 +0000388 1.0f, 0.0f, 0.0f,
389 0.0f, 2.0f, -1.5f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000390
Keith Davis97da5e22020-03-05 16:25:28 +0000391 0.0f, 0.0f, 0.0f,
392 0.2f, 0.2f, 0.2f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000393
Keith Davis97da5e22020-03-05 16:25:28 +0000394 0.5f, 0.0f, 0.5f,
395 0.0f, -1.0f, 0.0f
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000396 };
397 ConstTensor weights(weightInfo, weightsData);
398
399 Optional<ConstTensor> optionalBiases;
400 std::vector<float> biasesData{ 1.0f, 0.0f, 0.0f };
401 ConstTensor biases(biasInfo, biasesData);
402 optionalBiases = Optional<ConstTensor>(biases);
403
404 // Input layer
405 IConnectableLayer* input = net->AddInputLayer(0, "input");
406
407 // Convolution2d layer
408 Convolution2dDescriptor conv2dDesc;
Keith Davis97da5e22020-03-05 16:25:28 +0000409 conv2dDesc.m_StrideX = 1;
410 conv2dDesc.m_StrideY = 1;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000411 conv2dDesc.m_PadLeft = 0;
412 conv2dDesc.m_PadRight = 0;
413 conv2dDesc.m_PadTop = 2;
414 conv2dDesc.m_PadBottom = 2;
415 conv2dDesc.m_BiasEnabled = true;
416 IConnectableLayer* conv2d = net->AddConvolution2dLayer(conv2dDesc, weights, optionalBiases);
417
Mike Kelly07810fc2020-11-12 10:58:48 +0000418 // Abs layer
419 armnn::ElementwiseUnaryDescriptor absDesc;
420 armnn::IConnectableLayer* const abs = net->AddElementwiseUnaryLayer(absDesc, "abs");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000421
422 // Output layer
423 IConnectableLayer* output = net->AddOutputLayer(0, "output");
424
425 input->GetOutputSlot(0).Connect(conv2d->GetInputSlot(0));
Mike Kelly07810fc2020-11-12 10:58:48 +0000426 conv2d->GetOutputSlot(0).Connect(abs->GetInputSlot(0));
427 abs->GetOutputSlot(0).Connect(output->GetInputSlot(0));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000428
429 input->GetOutputSlot(0).SetTensorInfo(inputInfo);
430 conv2d->GetOutputSlot(0).SetTensorInfo(outputInfo);
Mike Kelly07810fc2020-11-12 10:58:48 +0000431 abs->GetOutputSlot(0).SetTensorInfo(outputInfo);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000432
433 // optimize the network
434 std::vector<armnn::BackendId> backends = { backendId };
Sadik Armagan3184c902020-03-18 10:57:30 +0000435 IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime.GetDeviceSpec());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000436
437 ProfilingGuid optNetGuid = optNet->GetGuid();
438
439 // Load it into the runtime. It should success.
440 armnn::NetworkId netId;
Sadik Armagan1625efc2021-06-10 18:24:34 +0100441 CHECK(runtime.LoadNetwork(netId, std::move(optNet)) == Status::Success);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000442
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000443 profiling::BufferManager& bufferManager = profilingServiceHelper.GetProfilingBufferManager();
444 auto readableBuffer = bufferManager.GetReadableBuffer();
445
Jim Flynnf7713212020-07-14 09:50:59 +0100446 // Profiling is enabled, the post-optimisation structure should be created
Sadik Armagan1625efc2021-06-10 18:24:34 +0100447 CHECK(readableBuffer != nullptr);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000448 unsigned int size = readableBuffer->GetSize();
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000449
450 const unsigned char* readableData = readableBuffer->GetReadableData();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100451 CHECK(readableData != nullptr);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000452
453 unsigned int offset = 0;
454
Keith Davis97da5e22020-03-05 16:25:28 +0000455 // Verify Header
Jim Flynnf7713212020-07-14 09:50:59 +0100456 VerifyTimelineHeaderBinary(readableData, offset, size - 8);
Keith Davis97da5e22020-03-05 16:25:28 +0000457
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000458 // Post-optimisation network
459 // Network entity
Keith Davis97da5e22020-03-05 16:25:28 +0000460 VerifyTimelineEntityBinaryPacketData(optNetGuid, readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000461
462 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000463 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
464 EmptyOptional(),
465 optNetGuid,
Jim Flynn6398a982020-05-27 17:05:21 +0100466 LabelsAndEventClasses::NETWORK_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000467 LabelsAndEventClasses::TYPE_GUID,
468 readableData,
469 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000470
Jim Flynnf7713212020-07-14 09:50:59 +0100471 // Network - START OF LIFE
472 ProfilingGuid networkSolEventGuid = VerifyTimelineEventBinaryPacket(EmptyOptional(),
473 EmptyOptional(),
474 EmptyOptional(),
475 readableData,
476 offset);
Jim Flynnf7713212020-07-14 09:50:59 +0100477
478 // Network - START OF LIFE event relationship
479 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
480 EmptyOptional(),
481 optNetGuid,
482 networkSolEventGuid,
483 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
484 readableData,
485 offset);
Jim Flynnf7713212020-07-14 09:50:59 +0100486
487 // Process ID Label
488 int processID = armnnUtils::Processes::GetCurrentId();
489 std::stringstream ss;
490 ss << processID;
491 std::string processIdLabel = ss.str();
492 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), processIdLabel, readableData, offset);
Jim Flynnf7713212020-07-14 09:50:59 +0100493
494 // Entity - Process ID relationship
495 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
496 EmptyOptional(),
497 optNetGuid,
498 EmptyOptional(),
499 LabelsAndEventClasses::PROCESS_ID_GUID,
500 readableData,
501 offset);
Jim Flynnf7713212020-07-14 09:50:59 +0100502
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000503 // Input layer
504 // Input layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000505 VerifyTimelineEntityBinaryPacketData(input->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000506
507 // Name Entity
Jim Flynn6398a982020-05-27 17:05:21 +0100508 ProfilingGuid inputLabelGuid = VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "input", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000509
510 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000511 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
512 EmptyOptional(),
513 input->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100514 inputLabelGuid,
Finn Williams0a336dc2020-05-11 15:39:58 +0100515 LabelsAndEventClasses::NAME_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000516 readableData,
517 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000518
519 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000520 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
521 EmptyOptional(),
522 input->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100523 LabelsAndEventClasses::LAYER_GUID,
Finn Williams0a336dc2020-05-11 15:39:58 +0100524 LabelsAndEventClasses::TYPE_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000525 readableData,
526 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000527
528 // Network - Input layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000529 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
530 EmptyOptional(),
531 optNetGuid,
532 input->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100533 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000534 readableData,
535 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000536
537 // Conv2d layer
538 // Conv2d layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000539 VerifyTimelineEntityBinaryPacketData(conv2d->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000540
541 // Name entity
Jim Flynn6398a982020-05-27 17:05:21 +0100542 ProfilingGuid conv2dNameLabelGuid = VerifyTimelineLabelBinaryPacketData(
543 EmptyOptional(), "<Unnamed>", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000544
545 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000546 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
547 EmptyOptional(),
548 conv2d->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100549 conv2dNameLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000550 LabelsAndEventClasses::NAME_GUID,
551 readableData,
552 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000553
554 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000555 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
556 EmptyOptional(),
557 conv2d->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100558 LabelsAndEventClasses::LAYER_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000559 LabelsAndEventClasses::TYPE_GUID,
560 readableData,
561 offset);
Finn Williams0a336dc2020-05-11 15:39:58 +0100562
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000563 // Network - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000564 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
565 EmptyOptional(),
566 optNetGuid,
567 conv2d->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100568 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000569 readableData,
570 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000571
572 // Input layer - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000573 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
574 EmptyOptional(),
575 input->GetGuid(),
576 conv2d->GetGuid(),
Keith Davis97da5e22020-03-05 16:25:28 +0000577 LabelsAndEventClasses::CONNECTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000578 readableData,
579 offset);
Finn Williams0a336dc2020-05-11 15:39:58 +0100580
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000581 // Conv2d workload
582 // Conv2d workload entity
Jim Flynn6398a982020-05-27 17:05:21 +0100583 ProfilingGuid conv2DWorkloadGuid = VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000584
585 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000586 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
587 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100588 conv2DWorkloadGuid,
589 LabelsAndEventClasses::WORKLOAD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000590 LabelsAndEventClasses::TYPE_GUID,
591 readableData,
592 offset);
Finn Williams0a336dc2020-05-11 15:39:58 +0100593
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000594 // BackendId entity
Jim Flynn6398a982020-05-27 17:05:21 +0100595 ProfilingGuid backendIdLabelGuid = VerifyTimelineLabelBinaryPacketData(
596 EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000597
598 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000599 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
600 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100601 conv2DWorkloadGuid,
602 backendIdLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000603 LabelsAndEventClasses::BACKENDID_GUID,
604 readableData,
605 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000606
Finn Williams0a336dc2020-05-11 15:39:58 +0100607
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000608 // Conv2d layer - Conv2d workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000609 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
610 EmptyOptional(),
611 conv2d->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100612 conv2DWorkloadGuid,
613 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000614 readableData,
615 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000616
Mike Kelly07810fc2020-11-12 10:58:48 +0000617 // Abs layer
618 // Abs layer entity
619 VerifyTimelineEntityBinaryPacketData(abs->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000620
621 // Name entity
Mike Kelly07810fc2020-11-12 10:58:48 +0000622 ProfilingGuid absLabelGuid = VerifyTimelineLabelBinaryPacketData(
623 EmptyOptional(), "abs", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000624
625 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000626 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
627 EmptyOptional(),
Mike Kelly07810fc2020-11-12 10:58:48 +0000628 abs->GetGuid(),
629 absLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000630 LabelsAndEventClasses::NAME_GUID,
631 readableData,
632 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000633
634 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000635 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
636 EmptyOptional(),
Mike Kelly07810fc2020-11-12 10:58:48 +0000637 abs->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100638 LabelsAndEventClasses::LAYER_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000639 LabelsAndEventClasses::TYPE_GUID,
640 readableData,
641 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000642
Mike Kelly07810fc2020-11-12 10:58:48 +0000643 // Network - Abs layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000644 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
645 EmptyOptional(),
646 optNetGuid,
Mike Kelly07810fc2020-11-12 10:58:48 +0000647 abs->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100648 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000649 readableData,
650 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000651
Mike Kelly07810fc2020-11-12 10:58:48 +0000652 // Conv2d layer - Abs layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000653 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
654 EmptyOptional(),
655 conv2d->GetGuid(),
Mike Kelly07810fc2020-11-12 10:58:48 +0000656 abs->GetGuid(),
Keith Davis97da5e22020-03-05 16:25:28 +0000657 LabelsAndEventClasses::CONNECTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000658 readableData,
659 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000660
Mike Kelly07810fc2020-11-12 10:58:48 +0000661 // Abs workload
662 // Abs workload entity
663 ProfilingGuid absWorkloadGuid = VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000664
665 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000666 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
667 EmptyOptional(),
Mike Kelly07810fc2020-11-12 10:58:48 +0000668 absWorkloadGuid,
Jim Flynn6398a982020-05-27 17:05:21 +0100669 LabelsAndEventClasses::WORKLOAD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000670 LabelsAndEventClasses::TYPE_GUID,
671 readableData,
672 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000673
674 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000675 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000676
677 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000678 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
679 EmptyOptional(),
Mike Kelly07810fc2020-11-12 10:58:48 +0000680 absWorkloadGuid,
Jim Flynn6398a982020-05-27 17:05:21 +0100681 backendIdLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000682 LabelsAndEventClasses::BACKENDID_GUID,
683 readableData,
684 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000685
Mike Kelly07810fc2020-11-12 10:58:48 +0000686 // Abs layer - Abs workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000687 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
688 EmptyOptional(),
Mike Kelly07810fc2020-11-12 10:58:48 +0000689 abs->GetGuid(),
690 absWorkloadGuid,
Jim Flynn6398a982020-05-27 17:05:21 +0100691 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000692 readableData,
693 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000694
695 // Output layer
696 // Output layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000697 VerifyTimelineEntityBinaryPacketData(output->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000698
699 // Name entity
Jim Flynn6398a982020-05-27 17:05:21 +0100700 ProfilingGuid outputLabelGuid = VerifyTimelineLabelBinaryPacketData(
701 EmptyOptional(), "output", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000702
703 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000704 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
705 EmptyOptional(),
706 output->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100707 outputLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000708 LabelsAndEventClasses::NAME_GUID,
709 readableData,
710 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000711
712 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000713 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
714 EmptyOptional(),
715 output->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100716 LabelsAndEventClasses::LAYER_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000717 LabelsAndEventClasses::TYPE_GUID,
718 readableData,
719 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000720
721 // Network - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000722 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
723 EmptyOptional(),
724 optNetGuid,
725 output->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100726 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000727 readableData,
728 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000729
Mike Kelly07810fc2020-11-12 10:58:48 +0000730 // Abs layer - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000731 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
732 EmptyOptional(),
Mike Kelly07810fc2020-11-12 10:58:48 +0000733 abs->GetGuid(),
Keith Davis97da5e22020-03-05 16:25:28 +0000734 output->GetGuid(),
Keith Davis97da5e22020-03-05 16:25:28 +0000735 LabelsAndEventClasses::CONNECTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000736 readableData,
737 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000738
739 bufferManager.MarkRead(readableBuffer);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000740
741 // Creates structures for input & output.
742 std::vector<float> inputData(inputInfo.GetNumElements());
743 std::vector<float> outputData(outputInfo.GetNumElements());
744
745 InputTensors inputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000746 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000747 {0, ConstTensor(runtime.GetInputTensorInfo(netId, 0), inputData.data())}
Keith Davis97da5e22020-03-05 16:25:28 +0000748 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000749 OutputTensors outputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000750 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000751 {0, Tensor(runtime.GetOutputTensorInfo(netId, 0), outputData.data())}
Keith Davis97da5e22020-03-05 16:25:28 +0000752 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000753
754 // Does the inference.
Sadik Armagan3184c902020-03-18 10:57:30 +0000755 runtime.EnqueueWorkload(netId, inputTensors, outputTensors);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000756
Finn Williamsb6a402f2020-03-24 13:46:22 +0000757 // Get readable buffer for input workload
758 auto inputReadableBuffer = bufferManager.GetReadableBuffer();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100759 CHECK(inputReadableBuffer != nullptr);
David Monahan6198fe02019-12-02 08:35:43 +0000760
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000761 // Get readable buffer for output workload
762 auto outputReadableBuffer = bufferManager.GetReadableBuffer();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100763 CHECK(outputReadableBuffer != nullptr);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000764
Finn Williamsb6a402f2020-03-24 13:46:22 +0000765 // Get readable buffer for inference timeline
766 auto inferenceReadableBuffer = bufferManager.GetReadableBuffer();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100767 CHECK(inferenceReadableBuffer != nullptr);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000768
769 // Validate input workload data
770 size = inputReadableBuffer->GetSize();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100771 CHECK(size == 164);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000772
773 readableData = inputReadableBuffer->GetReadableData();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100774 CHECK(readableData != nullptr);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000775
776 offset = 0;
777
Keith Davis97da5e22020-03-05 16:25:28 +0000778 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100779 VerifyTimelineHeaderBinary(readableData, offset, 156);
Keith Davis97da5e22020-03-05 16:25:28 +0000780
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000781 // Input workload
782 // Input workload entity
Jim Flynn6398a982020-05-27 17:05:21 +0100783 ProfilingGuid inputWorkloadGuid = VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000784
785 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000786 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
787 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100788 inputWorkloadGuid,
789 LabelsAndEventClasses::WORKLOAD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000790 LabelsAndEventClasses::TYPE_GUID,
791 readableData,
792 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000793
794 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000795 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000796
797 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000798 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
799 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100800 inputWorkloadGuid,
801 backendIdLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000802 LabelsAndEventClasses::BACKENDID_GUID,
803 readableData,
804 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000805
806 // Input layer - Input workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000807 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
808 EmptyOptional(),
809 input->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100810 inputWorkloadGuid,
811 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000812 readableData,
813 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000814
815 bufferManager.MarkRead(inputReadableBuffer);
816
817 // Validate output workload data
818 size = outputReadableBuffer->GetSize();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100819 CHECK(size == 164);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000820
821 readableData = outputReadableBuffer->GetReadableData();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100822 CHECK(readableData != nullptr);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000823
824 offset = 0;
825
Keith Davis97da5e22020-03-05 16:25:28 +0000826 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100827 VerifyTimelineHeaderBinary(readableData, offset, 156);
Keith Davis97da5e22020-03-05 16:25:28 +0000828
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000829 // Output workload
830 // Output workload entity
Jim Flynn6398a982020-05-27 17:05:21 +0100831 ProfilingGuid outputWorkloadGuid = VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000832
833 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000834 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
835 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100836 outputWorkloadGuid,
837 LabelsAndEventClasses::WORKLOAD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000838 LabelsAndEventClasses::TYPE_GUID,
839 readableData,
840 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000841
842 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000843 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000844
845 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000846 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
847 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100848 outputWorkloadGuid,
849 backendIdLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000850 LabelsAndEventClasses::BACKENDID_GUID,
851 readableData,
852 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000853
854 // Output layer - Output workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000855 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
856 EmptyOptional(),
857 output->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100858 outputWorkloadGuid,
859 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000860 readableData,
861 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000862
863 bufferManager.MarkRead(outputReadableBuffer);
David Monahan6198fe02019-12-02 08:35:43 +0000864
865 // Validate inference data
866 size = inferenceReadableBuffer->GetSize();
Jan Eilersa10e2a22020-03-26 12:04:54 +0000867
Sadik Armagan1625efc2021-06-10 18:24:34 +0100868 CHECK(size == 1228 + 10 * ThreadIdSize);
David Monahan6198fe02019-12-02 08:35:43 +0000869
870 readableData = inferenceReadableBuffer->GetReadableData();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100871 CHECK(readableData != nullptr);
David Monahan6198fe02019-12-02 08:35:43 +0000872
873 offset = 0;
874
Keith Davis97da5e22020-03-05 16:25:28 +0000875 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100876 VerifyTimelineHeaderBinary(readableData, offset, 1220 + 10 * ThreadIdSize);
Keith Davis97da5e22020-03-05 16:25:28 +0000877
David Monahan6198fe02019-12-02 08:35:43 +0000878 // Inference timeline trace
879 // Inference entity
Jim Flynn6398a982020-05-27 17:05:21 +0100880 ProfilingGuid inferenceGuid = VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000881
882 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000883 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
884 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100885 inferenceGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000886 LabelsAndEventClasses::INFERENCE_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000887 LabelsAndEventClasses::TYPE_GUID,
888 readableData,
889 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000890
891 // Network - Inference relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000892 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
893 EmptyOptional(),
894 optNetGuid,
Jim Flynn6398a982020-05-27 17:05:21 +0100895 inferenceGuid,
896 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000897 readableData,
898 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000899
900 // Start Inference life
901 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +0100902 ProfilingGuid inferenceEventGuid = VerifyTimelineEventBinaryPacket(
903 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000904
905 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000906 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
907 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100908 inferenceGuid,
909 inferenceEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000910 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
911 readableData,
912 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000913
914 // Execution
915 // Input workload execution
916 // Input workload execution entity
Jim Flynn6398a982020-05-27 17:05:21 +0100917 ProfilingGuid inputWorkloadExecutionGuid = VerifyTimelineEntityBinaryPacketData(
918 EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000919
920 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000921 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
922 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100923 inputWorkloadExecutionGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000924 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000925 LabelsAndEventClasses::TYPE_GUID,
926 readableData,
927 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000928
929 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000930 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
931 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100932 inferenceGuid,
933 inputWorkloadExecutionGuid,
934 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000935 readableData,
936 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000937
938 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000939 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
940 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100941 inputWorkloadGuid,
942 inputWorkloadExecutionGuid,
943 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000944 readableData,
945 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000946
947 // Start Input workload execution life
948 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +0100949 ProfilingGuid inputWorkloadExecutionSOLEventId = VerifyTimelineEventBinaryPacket(
950 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000951
952 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000953 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
954 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100955 inputWorkloadExecutionGuid,
956 inputWorkloadExecutionSOLEventId,
Keith Davis97da5e22020-03-05 16:25:28 +0000957 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
958 readableData,
959 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000960
961 // End of Input workload execution life
962 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +0100963 ProfilingGuid inputWorkloadExecutionEOLEventId = VerifyTimelineEventBinaryPacket(
964 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000965
966 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000967 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
968 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100969 inputWorkloadExecutionGuid,
970 inputWorkloadExecutionEOLEventId,
Keith Davis97da5e22020-03-05 16:25:28 +0000971 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
972 readableData,
973 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000974
975 // Conv2d workload execution
976 // Conv2d workload execution entity
Jim Flynn6398a982020-05-27 17:05:21 +0100977 ProfilingGuid conv2DWorkloadExecutionGuid = VerifyTimelineEntityBinaryPacketData(
978 EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000979
980 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000981 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
982 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100983 conv2DWorkloadExecutionGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000984 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000985 LabelsAndEventClasses::TYPE_GUID,
986 readableData,
987 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000988
989 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000990 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
991 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100992 inferenceGuid,
993 conv2DWorkloadExecutionGuid,
994 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000995 readableData,
996 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000997
998 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000999 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1000 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001001 conv2DWorkloadGuid,
1002 conv2DWorkloadExecutionGuid,
1003 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001004 readableData,
1005 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001006
1007 // Start Conv2d workload execution life
1008 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001009 ProfilingGuid conv2DWorkloadExecutionSOLEventGuid = VerifyTimelineEventBinaryPacket(
1010 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001011
1012 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001013 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1014 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001015 conv2DWorkloadExecutionGuid,
1016 conv2DWorkloadExecutionSOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001017 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1018 readableData,
1019 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001020
1021 // End of Conv2d workload execution life
1022 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001023 ProfilingGuid conv2DWorkloadExecutionEOLEventGuid = VerifyTimelineEventBinaryPacket(
1024 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001025
1026 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001027 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1028 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001029 conv2DWorkloadExecutionGuid,
1030 conv2DWorkloadExecutionEOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001031 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1032 readableData,
1033 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001034
Mike Kelly07810fc2020-11-12 10:58:48 +00001035 // Abs workload execution
1036 // Abs workload execution entity
1037 ProfilingGuid absWorkloadExecutionGuid = VerifyTimelineEntityBinaryPacketData(
Jim Flynn6398a982020-05-27 17:05:21 +01001038 EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001039
1040 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001041 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1042 EmptyOptional(),
Mike Kelly07810fc2020-11-12 10:58:48 +00001043 absWorkloadExecutionGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001044 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001045 LabelsAndEventClasses::TYPE_GUID,
1046 readableData,
1047 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001048
1049 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001050 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1051 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001052 inferenceGuid,
Mike Kelly07810fc2020-11-12 10:58:48 +00001053 absWorkloadExecutionGuid,
Jim Flynn6398a982020-05-27 17:05:21 +01001054 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001055 readableData,
1056 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001057
1058 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001059 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1060 EmptyOptional(),
Mike Kelly07810fc2020-11-12 10:58:48 +00001061 absWorkloadGuid,
1062 absWorkloadExecutionGuid,
Jim Flynn6398a982020-05-27 17:05:21 +01001063 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001064 readableData,
1065 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001066
Mike Kelly07810fc2020-11-12 10:58:48 +00001067 // Start Abs workload execution life
David Monahan6198fe02019-12-02 08:35:43 +00001068 // Event packet - timeline, threadId, eventGuid
Mike Kelly07810fc2020-11-12 10:58:48 +00001069 ProfilingGuid absWorkloadExecutionSOLEventGuid = VerifyTimelineEventBinaryPacket(
Jim Flynn6398a982020-05-27 17:05:21 +01001070 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001071
Mike Kelly07810fc2020-11-12 10:58:48 +00001072 // Abs workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001073 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1074 EmptyOptional(),
Mike Kelly07810fc2020-11-12 10:58:48 +00001075 absWorkloadExecutionGuid,
1076 absWorkloadExecutionSOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001077 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1078 readableData,
1079 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001080
Mike Kelly07810fc2020-11-12 10:58:48 +00001081 // End of Abs workload execution life
David Monahan6198fe02019-12-02 08:35:43 +00001082 // Event packet - timeline, threadId, eventGuid
Mike Kelly07810fc2020-11-12 10:58:48 +00001083 ProfilingGuid absWorkloadExecutionEOLEventGuid = VerifyTimelineEventBinaryPacket(
Jim Flynn6398a982020-05-27 17:05:21 +01001084 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001085
Mike Kelly07810fc2020-11-12 10:58:48 +00001086 // Abs workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001087 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1088 EmptyOptional(),
Mike Kelly07810fc2020-11-12 10:58:48 +00001089 absWorkloadExecutionGuid,
1090 absWorkloadExecutionEOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001091 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1092 readableData,
1093 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001094
1095 // Output workload execution
1096 // Output workload execution entity
Jim Flynn6398a982020-05-27 17:05:21 +01001097 ProfilingGuid outputWorkloadExecutionGuid = VerifyTimelineEntityBinaryPacketData(
1098 EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001099
1100 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001101 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1102 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001103 outputWorkloadExecutionGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001104 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001105 LabelsAndEventClasses::TYPE_GUID,
1106 readableData,
1107 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001108
1109 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001110 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1111 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001112 inferenceGuid,
1113 outputWorkloadExecutionGuid,
1114 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001115 readableData,
1116 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001117
1118 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001119 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1120 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001121 outputWorkloadGuid,
1122 outputWorkloadExecutionGuid,
1123 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001124 readableData,
1125 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001126
1127 // Start Output workload execution life
1128 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001129 ProfilingGuid outputWorkloadExecutionSOLEventGuid = VerifyTimelineEventBinaryPacket(
1130 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001131
1132 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001133 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1134 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001135 outputWorkloadExecutionGuid,
1136 outputWorkloadExecutionSOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001137 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1138 readableData,
1139 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001140
1141 // End of Normalize workload execution life
1142 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001143 ProfilingGuid outputWorkloadExecutionEOLEventGuid = VerifyTimelineEventBinaryPacket(
1144 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001145
1146 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001147 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1148 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001149 outputWorkloadExecutionGuid,
1150 outputWorkloadExecutionEOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001151 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1152 readableData,
1153 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001154
1155 // End of Inference life
1156 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001157 ProfilingGuid inferenceEOLEventGuid = VerifyTimelineEventBinaryPacket(
1158 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001159
1160 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001161 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1162 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001163 inferenceGuid,
1164 inferenceEOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001165 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1166 readableData,
1167 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001168
1169 bufferManager.MarkRead(inferenceReadableBuffer);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00001170}
Jim Flynn6398a982020-05-27 17:05:21 +01001171
Jim Flynn6398a982020-05-27 17:05:21 +01001172bool CompareOutput(std::vector<std::string> output, std::vector<std::string> expectedOutput)
1173{
1174 if (output.size() != expectedOutput.size())
1175 {
1176 std::cerr << "output has [" << output.size() << "] lines, expected was ["
1177 << expectedOutput.size() << "] lines" << std::endl;
1178 std::cerr << std::endl << "actual" << std::endl << std::endl;
1179 for (auto line : output)
1180 {
1181 std::cerr << line << std::endl;
1182 }
1183 std::cerr << std::endl << "expected" << std::endl << std::endl;
1184 for (auto line : expectedOutput)
1185 {
1186 std::cerr << line << std::endl;
1187 }
1188 return false;
1189 }
1190 bool bRet = true;
1191 for (unsigned long i = 0; i < output.size(); ++i)
1192 {
1193 if (output[i] != expectedOutput[i])
1194 {
1195 bRet = false;
1196 std::cerr << i << ": actual [" << output[i] << "] expected [" << expectedOutput[i] << "]" << std::endl;
1197 }
1198 }
1199 return bRet;
1200}