blob: 7fe7069c019b62ccc970e9e5f769e489a2ad1cf1 [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
Jim Flynn34430252022-03-04 15:03:58 +00006#include <ArmNNProfilingServiceInitialiser.hpp>
Jim Flynn4c9ed1d2022-01-23 23:57:20 +00007#include "ProfilingOptionsConverter.hpp"
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00008#include "ProfilingTestUtils.hpp"
9#include "ProfilingUtils.hpp"
10
11#include <armnn/Descriptors.hpp>
Jim Flynn34430252022-03-04 15:03:58 +000012#include <armnn/profiling/ArmNNProfiling.hpp>
Matthew Sloyan371b70e2020-09-11 10:14:57 +010013
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
Jim Flynn6730fe92022-03-10 22:57:47 +000017#include <common/include/Assert.hpp>
Nikhil Raj77fe76b2021-06-09 14:55:32 +010018#include <common/include/LabelsAndEventClasses.hpp>
Jim Flynn75c14f42022-03-10 22:05:42 +000019#include <common/include/NumericCast.hpp>
Jim Flynn77b284e2022-03-13 20:53:35 +000020#include <common/include/Processes.hpp>
Nikhil Raj77fe76b2021-06-09 14:55:32 +010021
Sadik Armagana097d2a2021-11-24 15:47:28 +000022#include <TestUtils.hpp>
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000023
Sadik Armagan1625efc2021-06-10 18:24:34 +010024#include <doctest/doctest.h>
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000025
Finn Williamsa0de0562020-04-22 12:27:37 +010026uint32_t GetStreamMetaDataPacketSize()
27{
28 uint32_t sizeUint32 = sizeof(uint32_t);
29 uint32_t payloadSize = 0;
Jim Flynn75c14f42022-03-10 22:05:42 +000030 payloadSize += arm::pipe::numeric_cast<uint32_t>(GetSoftwareInfo().size()) + 1;
31 payloadSize += arm::pipe::numeric_cast<uint32_t>(GetHardwareVersion().size()) + 1;
32 payloadSize += arm::pipe::numeric_cast<uint32_t>(GetSoftwareVersion().size()) + 1;
33 payloadSize += arm::pipe::numeric_cast<uint32_t>(GetProcessName().size()) + 1;
Finn Williamsa0de0562020-04-22 12:27:37 +010034
35 // Add packetVersionEntries
Jim Flynn83d08a92020-07-09 13:48:16 +010036 payloadSize += 13 * 2 * sizeUint32;
Finn Williamsa0de0562020-04-22 12:27:37 +010037 // Add packetVersionCountSize
38 payloadSize += sizeUint32;
39
40 uint32_t headerSize = 2 * sizeUint32;
41 uint32_t bodySize = 10 * sizeUint32;
42
43 return headerSize + bodySize + payloadSize;
44}
45
Jan Eilersf78c7672020-07-01 18:09:39 +010046std::vector<BackendId> GetSuitableBackendRegistered()
47{
48 std::vector<BackendId> suitableBackends;
49 if (BackendRegistryInstance().IsBackendRegistered(GetComputeDeviceAsCString(armnn::Compute::CpuRef)))
50 {
51 suitableBackends.push_back(armnn::Compute::CpuRef);
52 }
53 if (BackendRegistryInstance().IsBackendRegistered(GetComputeDeviceAsCString(armnn::Compute::CpuAcc)))
54 {
55 suitableBackends.push_back(armnn::Compute::CpuAcc);
56 }
57 if (BackendRegistryInstance().IsBackendRegistered(GetComputeDeviceAsCString(armnn::Compute::GpuAcc)))
58 {
59 suitableBackends.push_back(armnn::Compute::GpuAcc);
60 }
61 return suitableBackends;
62}
63
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000064inline unsigned int OffsetToNextWord(unsigned int numberOfBytes)
65{
66 unsigned int uint32_t_size = sizeof(uint32_t);
67
68 unsigned int remainder = numberOfBytes % uint32_t_size;
69 if (remainder == 0)
70 {
71 return numberOfBytes;
72 }
73
74 return numberOfBytes + uint32_t_size - remainder;
75}
76
Keith Davis97da5e22020-03-05 16:25:28 +000077void VerifyTimelineHeaderBinary(const unsigned char* readableData,
78 unsigned int& offset,
79 uint32_t packetDataLength)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000080{
Jim Flynn6730fe92022-03-10 22:57:47 +000081 ARM_PIPE_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000082
83 // Utils
84 unsigned int uint32_t_size = sizeof(uint32_t);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000085
Keith Davis97da5e22020-03-05 16:25:28 +000086 // Check the TimelineEventClassBinaryPacket header
Finn Williams0a336dc2020-05-11 15:39:58 +010087 uint32_t timelineBinaryPacketHeaderWord0 = ReadUint32(readableData, offset);
88 uint32_t timelineBinaryPacketFamily = (timelineBinaryPacketHeaderWord0 >> 26) & 0x0000003F;
89 uint32_t timelineBinaryPacketClass = (timelineBinaryPacketHeaderWord0 >> 19) & 0x0000007F;
90 uint32_t timelineBinaryPacketType = (timelineBinaryPacketHeaderWord0 >> 16) & 0x00000007;
91 uint32_t timelineBinaryPacketStreamId = (timelineBinaryPacketHeaderWord0 >> 0) & 0x00000007;
Sadik Armagan1625efc2021-06-10 18:24:34 +010092 CHECK(timelineBinaryPacketFamily == 1);
93 CHECK(timelineBinaryPacketClass == 0);
94 CHECK(timelineBinaryPacketType == 1);
95 CHECK(timelineBinaryPacketStreamId == 0);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000096 offset += uint32_t_size;
Finn Williams0a336dc2020-05-11 15:39:58 +010097 uint32_t timelineBinaryPacketHeaderWord1 = ReadUint32(readableData, offset);
98 uint32_t timelineBinaryPacketSequenceNumber = (timelineBinaryPacketHeaderWord1 >> 24) & 0x00000001;
99 uint32_t timelineBinaryPacketDataLength = (timelineBinaryPacketHeaderWord1 >> 0) & 0x00FFFFFF;
Sadik Armagan1625efc2021-06-10 18:24:34 +0100100 CHECK(timelineBinaryPacketSequenceNumber == 0);
101 CHECK(timelineBinaryPacketDataLength == packetDataLength);
Keith Davis97da5e22020-03-05 16:25:28 +0000102 offset += uint32_t_size;
103}
104
Jim Flynndecd08b2022-03-13 22:35:46 +0000105ProfilingGuid VerifyTimelineLabelBinaryPacketData(arm::pipe::Optional<ProfilingGuid> guid,
Jim Flynn6398a982020-05-27 17:05:21 +0100106 const std::string& label,
107 const unsigned char* readableData,
108 unsigned int& offset)
Keith Davis97da5e22020-03-05 16:25:28 +0000109{
Jim Flynn6730fe92022-03-10 22:57:47 +0000110 ARM_PIPE_ASSERT(readableData);
Keith Davis97da5e22020-03-05 16:25:28 +0000111
112 // Utils
113 unsigned int uint32_t_size = sizeof(uint32_t);
114 unsigned int uint64_t_size = sizeof(uint64_t);
Jim Flynn75c14f42022-03-10 22:05:42 +0000115 unsigned int label_size = arm::pipe::numeric_cast<unsigned int>(label.size());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000116
117 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000118 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100119 CHECK(eventClassDeclId == 0);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000120
121 // Check the profiling GUID
122 offset += uint32_t_size;
123 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
124 if (guid.has_value())
125 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100126 CHECK(readProfilingGuid == guid.value());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000127 }
128 else
129 {
Jim Flynn34430252022-03-04 15:03:58 +0000130 ArmNNProfilingServiceInitialiser initialiser;
131 ProfilingService profilingService(arm::pipe::MAX_ARMNN_COUNTER, initialiser);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100132 CHECK(readProfilingGuid == profilingService.GetStaticId(label));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000133 }
134
135 // Check the SWTrace label
136 offset += uint64_t_size;
137 uint32_t swTraceLabelLength = ReadUint32(readableData, offset);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100138 CHECK(swTraceLabelLength == label_size + 1); // Label length including the null-terminator
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000139 offset += uint32_t_size;
Sadik Armagan1625efc2021-06-10 18:24:34 +0100140 CHECK(std::memcmp(readableData + offset, // Offset to the label in the buffer
Keith Davis97da5e22020-03-05 16:25:28 +0000141 label.data(), // The original label
142 swTraceLabelLength - 1) == 0); // The length of the label
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000143
144 // SWTrace strings are written in blocks of words, so the offset has to be updated to the next whole word
145 offset += OffsetToNextWord(swTraceLabelLength);
Jim Flynn6398a982020-05-27 17:05:21 +0100146
147 ProfilingGuid labelGuid(readProfilingGuid);
148 return labelGuid;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000149}
150
Keith Davis97da5e22020-03-05 16:25:28 +0000151void VerifyTimelineEventClassBinaryPacketData(ProfilingGuid guid,
Jim Flynn1892d212020-05-26 21:10:49 +0100152 ProfilingGuid nameGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000153 const unsigned char* readableData,
154 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000155{
Jim Flynn6730fe92022-03-10 22:57:47 +0000156 ARM_PIPE_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000157
158 // Utils
159 unsigned int uint32_t_size = sizeof(uint32_t);
160 unsigned int uint64_t_size = sizeof(uint64_t);
161
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000162 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000163 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100164 CHECK(eventClassDeclId == 2);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000165
166 // Check the profiling GUID
167 offset += uint32_t_size;
168 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100169 CHECK(readProfilingGuid == guid);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000170
Jim Flynn1892d212020-05-26 21:10:49 +0100171 offset += uint64_t_size;
172 uint64_t readProfiilngNameGuid = ReadUint64(readableData, offset);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100173 CHECK(readProfiilngNameGuid == nameGuid);
Jim Flynn1892d212020-05-26 21:10:49 +0100174
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000175 // Update the offset to allow parsing to be continued after this function returns
176 offset += uint64_t_size;
177}
178
Keith Davis97da5e22020-03-05 16:25:28 +0000179void VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType relationshipType,
Jim Flynndecd08b2022-03-13 22:35:46 +0000180 arm::pipe::Optional<ProfilingGuid> relationshipGuid,
181 arm::pipe::Optional<ProfilingGuid> headGuid,
182 arm::pipe::Optional<ProfilingGuid> tailGuid,
183 arm::pipe::Optional<ProfilingGuid> attributeGuid,
Jim Flynn6398a982020-05-27 17:05:21 +0100184 const unsigned char* readableData,
185 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000186{
Jim Flynn6730fe92022-03-10 22:57:47 +0000187 ARM_PIPE_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000188
189 uint32_t relationshipTypeUint = 0;
190 switch (relationshipType)
191 {
192 case ProfilingRelationshipType::RetentionLink:
193 relationshipTypeUint = 0;
194 break;
195 case ProfilingRelationshipType::ExecutionLink:
196 relationshipTypeUint = 1;
197 break;
198 case ProfilingRelationshipType::DataLink:
199 relationshipTypeUint = 2;
200 break;
201 case ProfilingRelationshipType::LabelLink:
202 relationshipTypeUint = 3;
203 break;
204 default:
Sadik Armagan1625efc2021-06-10 18:24:34 +0100205 FAIL("Unknown relationship type");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000206 }
207
208 // Utils
209 unsigned int uint32_t_size = sizeof(uint32_t);
210 unsigned int uint64_t_size = sizeof(uint64_t);
211
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000212 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000213 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100214 CHECK(eventClassDeclId == 3);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000215
216 // Check the relationship type
217 offset += uint32_t_size;
218 uint32_t readRelationshipTypeUint = ReadUint32(readableData, offset);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100219 CHECK(readRelationshipTypeUint == relationshipTypeUint);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000220
221 // Check the relationship GUID
222 offset += uint32_t_size;
223 uint64_t readRelationshipGuid = ReadUint64(readableData, offset);
224 if (relationshipGuid.has_value())
225 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100226 CHECK(readRelationshipGuid == relationshipGuid.value());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000227 }
228 else
229 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100230 CHECK(readRelationshipGuid != ProfilingGuid(0));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000231 }
232
Jim Flynn6398a982020-05-27 17:05:21 +0100233 // Check the head GUID of the relationship
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000234 offset += uint64_t_size;
235 uint64_t readHeadRelationshipGuid = ReadUint64(readableData, offset);
236 if (headGuid.has_value())
237 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100238 CHECK(readHeadRelationshipGuid == headGuid.value());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000239 }
240 else
241 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100242 CHECK(readHeadRelationshipGuid != ProfilingGuid(0));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000243 }
244
Jim Flynn6398a982020-05-27 17:05:21 +0100245 // Check the tail GUID of the relationship
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000246 offset += uint64_t_size;
247 uint64_t readTailRelationshipGuid = ReadUint64(readableData, offset);
248 if (tailGuid.has_value())
249 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100250 CHECK(readTailRelationshipGuid == tailGuid.value());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000251 }
252 else
253 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100254 CHECK(readTailRelationshipGuid != ProfilingGuid(0));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000255 }
256
Jim Flynn6398a982020-05-27 17:05:21 +0100257 // Check the attribute GUID of the relationship
Finn Williams0a336dc2020-05-11 15:39:58 +0100258 offset += uint64_t_size;
259 uint64_t readAttributeRelationshipGuid = ReadUint64(readableData, offset);
260 if (attributeGuid.has_value())
261 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100262 CHECK(readAttributeRelationshipGuid == attributeGuid.value());
Finn Williams0a336dc2020-05-11 15:39:58 +0100263 }
264 else
265 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100266 CHECK(readAttributeRelationshipGuid == ProfilingGuid(0));
Finn Williams0a336dc2020-05-11 15:39:58 +0100267 }
268
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000269 // Update the offset to allow parsing to be continued after this function returns
270 offset += uint64_t_size;
271}
272
Jim Flynndecd08b2022-03-13 22:35:46 +0000273ProfilingGuid VerifyTimelineEntityBinaryPacketData(arm::pipe::Optional<ProfilingGuid> guid,
Jim Flynn6398a982020-05-27 17:05:21 +0100274 const unsigned char* readableData,
275 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000276{
Jim Flynn6730fe92022-03-10 22:57:47 +0000277 ARM_PIPE_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000278
279 // Utils
280 unsigned int uint32_t_size = sizeof(uint32_t);
281 unsigned int uint64_t_size = sizeof(uint64_t);
282
283 // Reading TimelineEntityClassBinaryPacket
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000284 // Check the decl_id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000285 uint32_t entityDeclId = ReadUint32(readableData, offset);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100286 CHECK(entityDeclId == 1);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000287
288 // Check the profiling GUID
289 offset += uint32_t_size;
290 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
291
292 if (guid.has_value())
293 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100294 CHECK(readProfilingGuid == guid.value());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000295 }
296 else
297 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100298 CHECK(readProfilingGuid != ProfilingGuid(0));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000299 }
300
301 offset += uint64_t_size;
Jim Flynn6398a982020-05-27 17:05:21 +0100302
303 ProfilingGuid entityGuid(readProfilingGuid);
304 return entityGuid;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000305}
306
Jim Flynndecd08b2022-03-13 22:35:46 +0000307ProfilingGuid VerifyTimelineEventBinaryPacket(arm::pipe::Optional<uint64_t> timestamp,
308 arm::pipe::Optional<int> threadId,
309 arm::pipe::Optional<ProfilingGuid> eventGuid,
Jim Flynn6398a982020-05-27 17:05:21 +0100310 const unsigned char* readableData,
311 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000312{
Jim Flynn6730fe92022-03-10 22:57:47 +0000313 ARM_PIPE_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000314
315 // Utils
316 unsigned int uint32_t_size = sizeof(uint32_t);
317 unsigned int uint64_t_size = sizeof(uint64_t);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000318
319 // Reading TimelineEventBinaryPacket
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000320 // Check the decl_id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000321 uint32_t entityDeclId = ReadUint32(readableData, offset);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100322 CHECK(entityDeclId == 4);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000323
324 // Check the timestamp
325 offset += uint32_t_size;
326 uint64_t readTimestamp = ReadUint64(readableData, offset);
327 if (timestamp.has_value())
328 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100329 CHECK(readTimestamp == timestamp.value());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000330 }
331 else
332 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100333 CHECK(readTimestamp != 0);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000334 }
335
336 // Check the thread id
337 offset += uint64_t_size;
Colm Donelan5bb3d8a2020-05-12 16:36:46 +0100338 std::vector<uint8_t> readThreadId(ThreadIdSize, 0);
339 ReadBytes(readableData, offset, ThreadIdSize, readThreadId.data());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000340 if (threadId.has_value())
341 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100342 CHECK(readThreadId == threadId.value());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000343 }
344 else
345 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100346 CHECK(readThreadId == armnnUtils::Threads::GetCurrentThreadId());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000347 }
348
349 // Check the event GUID
Colm Donelan5bb3d8a2020-05-12 16:36:46 +0100350 offset += ThreadIdSize;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000351 uint64_t readEventGuid = ReadUint64(readableData, offset);
352 if (eventGuid.has_value())
353 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100354 CHECK(readEventGuid == eventGuid.value());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000355 }
356 else
357 {
Sadik Armagan1625efc2021-06-10 18:24:34 +0100358 CHECK(readEventGuid != ProfilingGuid(0));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000359 }
360
361 offset += uint64_t_size;
Jim Flynn6398a982020-05-27 17:05:21 +0100362
363 ProfilingGuid eventid(readEventGuid);
364 return eventid;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000365}
366
367void VerifyPostOptimisationStructureTestImpl(armnn::BackendId backendId)
368{
369 using namespace armnn;
370
371 // Create runtime in which test will run
372 armnn::IRuntime::CreationOptions options;
373 options.m_ProfilingOptions.m_EnableProfiling = true;
Keith Davis33ed2212020-03-30 10:43:41 +0100374 options.m_ProfilingOptions.m_TimelineEnabled = true;
Kevin Mayd92a6e42021-02-04 10:27:41 +0000375 armnn::RuntimeImpl runtime(options);
Jim Flynn4c9ed1d2022-01-23 23:57:20 +0000376 GetProfilingService(&runtime).ResetExternalProfilingOptions(
377 ConvertExternalProfilingOptions(options.m_ProfilingOptions), false);
Keith Davis33ed2212020-03-30 10:43:41 +0100378
Jim Flynn34430252022-03-04 15:03:58 +0000379 ArmNNProfilingServiceInitialiser initialiser;
380 ProfilingServiceRuntimeHelper profilingServiceHelper(
381 arm::pipe::MAX_ARMNN_COUNTER, initialiser, GetProfilingService(&runtime));
Keith Davis33ed2212020-03-30 10:43:41 +0100382 profilingServiceHelper.ForceTransitionToState(ProfilingState::NotConnected);
383 profilingServiceHelper.ForceTransitionToState(ProfilingState::WaitingForAck);
384 profilingServiceHelper.ForceTransitionToState(ProfilingState::Active);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000385
386 // build up the structure of the network
387 INetworkPtr net(INetwork::Create());
388
389 // Convolution details
390 TensorInfo inputInfo({ 1, 2, 5, 1 }, DataType::Float32);
Cathal Corbett5b8093c2021-10-22 11:12:07 +0100391 TensorInfo weightInfo({ 3, 2, 3, 1 }, DataType::Float32, 0.0f, 0, true);
392 TensorInfo biasInfo({ 3 }, DataType::Float32, 0.0f, 0, true);
Keith Davis97da5e22020-03-05 16:25:28 +0000393 TensorInfo outputInfo({ 1, 3, 7, 1 }, DataType::Float32);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000394 std::vector<float> weightsData{
Keith Davis97da5e22020-03-05 16:25:28 +0000395 1.0f, 0.0f, 0.0f,
396 0.0f, 2.0f, -1.5f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000397
Keith Davis97da5e22020-03-05 16:25:28 +0000398 0.0f, 0.0f, 0.0f,
399 0.2f, 0.2f, 0.2f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000400
Keith Davis97da5e22020-03-05 16:25:28 +0000401 0.5f, 0.0f, 0.5f,
402 0.0f, -1.0f, 0.0f
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000403 };
404 ConstTensor weights(weightInfo, weightsData);
405
Jim Flynndecd08b2022-03-13 22:35:46 +0000406 armnn::Optional<ConstTensor> optionalBiases;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000407 std::vector<float> biasesData{ 1.0f, 0.0f, 0.0f };
408 ConstTensor biases(biasInfo, biasesData);
Jim Flynndecd08b2022-03-13 22:35:46 +0000409 optionalBiases = armnn::Optional<ConstTensor>(biases);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000410
411 // Input layer
412 IConnectableLayer* input = net->AddInputLayer(0, "input");
413
414 // Convolution2d layer
415 Convolution2dDescriptor conv2dDesc;
Keith Davis97da5e22020-03-05 16:25:28 +0000416 conv2dDesc.m_StrideX = 1;
417 conv2dDesc.m_StrideY = 1;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000418 conv2dDesc.m_PadLeft = 0;
419 conv2dDesc.m_PadRight = 0;
420 conv2dDesc.m_PadTop = 2;
421 conv2dDesc.m_PadBottom = 2;
422 conv2dDesc.m_BiasEnabled = true;
423 IConnectableLayer* conv2d = net->AddConvolution2dLayer(conv2dDesc, weights, optionalBiases);
424
Mike Kelly07810fc2020-11-12 10:58:48 +0000425 // Abs layer
426 armnn::ElementwiseUnaryDescriptor absDesc;
427 armnn::IConnectableLayer* const abs = net->AddElementwiseUnaryLayer(absDesc, "abs");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000428
429 // Output layer
430 IConnectableLayer* output = net->AddOutputLayer(0, "output");
431
432 input->GetOutputSlot(0).Connect(conv2d->GetInputSlot(0));
Mike Kelly07810fc2020-11-12 10:58:48 +0000433 conv2d->GetOutputSlot(0).Connect(abs->GetInputSlot(0));
434 abs->GetOutputSlot(0).Connect(output->GetInputSlot(0));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000435
436 input->GetOutputSlot(0).SetTensorInfo(inputInfo);
437 conv2d->GetOutputSlot(0).SetTensorInfo(outputInfo);
Mike Kelly07810fc2020-11-12 10:58:48 +0000438 abs->GetOutputSlot(0).SetTensorInfo(outputInfo);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000439
440 // optimize the network
441 std::vector<armnn::BackendId> backends = { backendId };
Sadik Armagan3184c902020-03-18 10:57:30 +0000442 IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime.GetDeviceSpec());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000443
444 ProfilingGuid optNetGuid = optNet->GetGuid();
445
446 // Load it into the runtime. It should success.
447 armnn::NetworkId netId;
Sadik Armagan1625efc2021-06-10 18:24:34 +0100448 CHECK(runtime.LoadNetwork(netId, std::move(optNet)) == Status::Success);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000449
Cathal Corbett5aa9fd72022-02-25 15:33:28 +0000450 BufferManager& bufferManager = profilingServiceHelper.GetProfilingBufferManager();
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000451 auto readableBuffer = bufferManager.GetReadableBuffer();
452
Jim Flynnf7713212020-07-14 09:50:59 +0100453 // Profiling is enabled, the post-optimisation structure should be created
Sadik Armagan1625efc2021-06-10 18:24:34 +0100454 CHECK(readableBuffer != nullptr);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000455 unsigned int size = readableBuffer->GetSize();
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000456
457 const unsigned char* readableData = readableBuffer->GetReadableData();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100458 CHECK(readableData != nullptr);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000459
460 unsigned int offset = 0;
461
Keith Davis97da5e22020-03-05 16:25:28 +0000462 // Verify Header
Jim Flynnf7713212020-07-14 09:50:59 +0100463 VerifyTimelineHeaderBinary(readableData, offset, size - 8);
Keith Davis97da5e22020-03-05 16:25:28 +0000464
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000465 // Post-optimisation network
466 // Network entity
Keith Davis97da5e22020-03-05 16:25:28 +0000467 VerifyTimelineEntityBinaryPacketData(optNetGuid, readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000468
469 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000470 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000471 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000472 optNetGuid,
Jim Flynn6398a982020-05-27 17:05:21 +0100473 LabelsAndEventClasses::NETWORK_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000474 LabelsAndEventClasses::TYPE_GUID,
475 readableData,
476 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000477
Jim Flynnf7713212020-07-14 09:50:59 +0100478 // Network - START OF LIFE
Jim Flynndecd08b2022-03-13 22:35:46 +0000479 ProfilingGuid networkSolEventGuid = VerifyTimelineEventBinaryPacket(arm::pipe::EmptyOptional(),
480 arm::pipe::EmptyOptional(),
481 arm::pipe::EmptyOptional(),
Jim Flynnf7713212020-07-14 09:50:59 +0100482 readableData,
483 offset);
Jim Flynnf7713212020-07-14 09:50:59 +0100484
485 // Network - START OF LIFE event relationship
486 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000487 arm::pipe::EmptyOptional(),
Jim Flynnf7713212020-07-14 09:50:59 +0100488 optNetGuid,
489 networkSolEventGuid,
490 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
491 readableData,
492 offset);
Jim Flynnf7713212020-07-14 09:50:59 +0100493
494 // Process ID Label
Jim Flynn77b284e2022-03-13 20:53:35 +0000495 int processID = arm::pipe::GetCurrentId();
Jim Flynnf7713212020-07-14 09:50:59 +0100496 std::stringstream ss;
497 ss << processID;
498 std::string processIdLabel = ss.str();
Jim Flynndecd08b2022-03-13 22:35:46 +0000499 VerifyTimelineLabelBinaryPacketData(
500 arm::pipe::EmptyOptional(), processIdLabel, readableData, offset);
Jim Flynnf7713212020-07-14 09:50:59 +0100501
502 // Entity - Process ID relationship
503 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000504 arm::pipe::EmptyOptional(),
Jim Flynnf7713212020-07-14 09:50:59 +0100505 optNetGuid,
Jim Flynndecd08b2022-03-13 22:35:46 +0000506 arm::pipe::EmptyOptional(),
Jim Flynnf7713212020-07-14 09:50:59 +0100507 LabelsAndEventClasses::PROCESS_ID_GUID,
508 readableData,
509 offset);
Jim Flynnf7713212020-07-14 09:50:59 +0100510
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000511 // Input layer
512 // Input layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000513 VerifyTimelineEntityBinaryPacketData(input->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000514
515 // Name Entity
Jim Flynndecd08b2022-03-13 22:35:46 +0000516 ProfilingGuid inputLabelGuid = VerifyTimelineLabelBinaryPacketData(
517 arm::pipe::EmptyOptional(), "input", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000518
519 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000520 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000521 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000522 input->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100523 inputLabelGuid,
Finn Williams0a336dc2020-05-11 15:39:58 +0100524 LabelsAndEventClasses::NAME_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000525 readableData,
526 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000527
528 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000529 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000530 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000531 input->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100532 LabelsAndEventClasses::LAYER_GUID,
Finn Williams0a336dc2020-05-11 15:39:58 +0100533 LabelsAndEventClasses::TYPE_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000534 readableData,
535 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000536
537 // Network - Input layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000538 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000539 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000540 optNetGuid,
541 input->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100542 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000543 readableData,
544 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000545
546 // Conv2d layer
547 // Conv2d layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000548 VerifyTimelineEntityBinaryPacketData(conv2d->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000549
550 // Name entity
Jim Flynn6398a982020-05-27 17:05:21 +0100551 ProfilingGuid conv2dNameLabelGuid = VerifyTimelineLabelBinaryPacketData(
Jim Flynndecd08b2022-03-13 22:35:46 +0000552 arm::pipe::EmptyOptional(), "<Unnamed>", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000553
554 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000555 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000556 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000557 conv2d->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100558 conv2dNameLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000559 LabelsAndEventClasses::NAME_GUID,
560 readableData,
561 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000562
563 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000564 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000565 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000566 conv2d->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100567 LabelsAndEventClasses::LAYER_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000568 LabelsAndEventClasses::TYPE_GUID,
569 readableData,
570 offset);
Finn Williams0a336dc2020-05-11 15:39:58 +0100571
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000572 // Network - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000573 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000574 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000575 optNetGuid,
576 conv2d->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100577 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000578 readableData,
579 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000580
581 // Input layer - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000582 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000583 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000584 input->GetGuid(),
585 conv2d->GetGuid(),
Keith Davis97da5e22020-03-05 16:25:28 +0000586 LabelsAndEventClasses::CONNECTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000587 readableData,
588 offset);
Finn Williams0a336dc2020-05-11 15:39:58 +0100589
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000590 // Conv2d workload
591 // Conv2d workload entity
Jim Flynndecd08b2022-03-13 22:35:46 +0000592 ProfilingGuid conv2DWorkloadGuid = VerifyTimelineEntityBinaryPacketData(
593 arm::pipe::EmptyOptional(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000594
595 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000596 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000597 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100598 conv2DWorkloadGuid,
599 LabelsAndEventClasses::WORKLOAD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000600 LabelsAndEventClasses::TYPE_GUID,
601 readableData,
602 offset);
Finn Williams0a336dc2020-05-11 15:39:58 +0100603
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000604 // BackendId entity
Jim Flynn6398a982020-05-27 17:05:21 +0100605 ProfilingGuid backendIdLabelGuid = VerifyTimelineLabelBinaryPacketData(
Jim Flynndecd08b2022-03-13 22:35:46 +0000606 arm::pipe::EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000607
608 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000609 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000610 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100611 conv2DWorkloadGuid,
612 backendIdLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000613 LabelsAndEventClasses::BACKENDID_GUID,
614 readableData,
615 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000616
Finn Williams0a336dc2020-05-11 15:39:58 +0100617
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000618 // Conv2d layer - Conv2d workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000619 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000620 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000621 conv2d->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100622 conv2DWorkloadGuid,
623 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000624 readableData,
625 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000626
Mike Kelly07810fc2020-11-12 10:58:48 +0000627 // Abs layer
628 // Abs layer entity
629 VerifyTimelineEntityBinaryPacketData(abs->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000630
631 // Name entity
Mike Kelly07810fc2020-11-12 10:58:48 +0000632 ProfilingGuid absLabelGuid = VerifyTimelineLabelBinaryPacketData(
Jim Flynndecd08b2022-03-13 22:35:46 +0000633 arm::pipe::EmptyOptional(), "abs", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000634
635 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000636 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000637 arm::pipe::EmptyOptional(),
Mike Kelly07810fc2020-11-12 10:58:48 +0000638 abs->GetGuid(),
639 absLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000640 LabelsAndEventClasses::NAME_GUID,
641 readableData,
642 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000643
644 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000645 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000646 arm::pipe::EmptyOptional(),
Mike Kelly07810fc2020-11-12 10:58:48 +0000647 abs->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100648 LabelsAndEventClasses::LAYER_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000649 LabelsAndEventClasses::TYPE_GUID,
650 readableData,
651 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000652
Mike Kelly07810fc2020-11-12 10:58:48 +0000653 // Network - Abs layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000654 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000655 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000656 optNetGuid,
Mike Kelly07810fc2020-11-12 10:58:48 +0000657 abs->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100658 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000659 readableData,
660 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000661
Mike Kelly07810fc2020-11-12 10:58:48 +0000662 // Conv2d layer - Abs layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000663 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000664 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000665 conv2d->GetGuid(),
Mike Kelly07810fc2020-11-12 10:58:48 +0000666 abs->GetGuid(),
Keith Davis97da5e22020-03-05 16:25:28 +0000667 LabelsAndEventClasses::CONNECTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000668 readableData,
669 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000670
Mike Kelly07810fc2020-11-12 10:58:48 +0000671 // Abs workload
672 // Abs workload entity
Jim Flynndecd08b2022-03-13 22:35:46 +0000673 ProfilingGuid absWorkloadGuid = VerifyTimelineEntityBinaryPacketData(
674 arm::pipe::EmptyOptional(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000675
676 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000677 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000678 arm::pipe::EmptyOptional(),
Mike Kelly07810fc2020-11-12 10:58:48 +0000679 absWorkloadGuid,
Jim Flynn6398a982020-05-27 17:05:21 +0100680 LabelsAndEventClasses::WORKLOAD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000681 LabelsAndEventClasses::TYPE_GUID,
682 readableData,
683 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000684
685 // BackendId entity
Jim Flynndecd08b2022-03-13 22:35:46 +0000686 VerifyTimelineLabelBinaryPacketData(arm::pipe::EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000687
688 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000689 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000690 arm::pipe::EmptyOptional(),
Mike Kelly07810fc2020-11-12 10:58:48 +0000691 absWorkloadGuid,
Jim Flynn6398a982020-05-27 17:05:21 +0100692 backendIdLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000693 LabelsAndEventClasses::BACKENDID_GUID,
694 readableData,
695 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000696
Mike Kelly07810fc2020-11-12 10:58:48 +0000697 // Abs layer - Abs workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000698 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000699 arm::pipe::EmptyOptional(),
Mike Kelly07810fc2020-11-12 10:58:48 +0000700 abs->GetGuid(),
701 absWorkloadGuid,
Jim Flynn6398a982020-05-27 17:05:21 +0100702 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000703 readableData,
704 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000705
706 // Output layer
707 // Output layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000708 VerifyTimelineEntityBinaryPacketData(output->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000709
710 // Name entity
Jim Flynn6398a982020-05-27 17:05:21 +0100711 ProfilingGuid outputLabelGuid = VerifyTimelineLabelBinaryPacketData(
Jim Flynndecd08b2022-03-13 22:35:46 +0000712 arm::pipe::EmptyOptional(), "output", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000713
714 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000715 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000716 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000717 output->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100718 outputLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000719 LabelsAndEventClasses::NAME_GUID,
720 readableData,
721 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000722
723 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000724 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000725 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000726 output->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100727 LabelsAndEventClasses::LAYER_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000728 LabelsAndEventClasses::TYPE_GUID,
729 readableData,
730 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000731
732 // Network - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000733 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000734 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000735 optNetGuid,
736 output->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100737 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000738 readableData,
739 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000740
Mike Kelly07810fc2020-11-12 10:58:48 +0000741 // Abs layer - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000742 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000743 arm::pipe::EmptyOptional(),
Mike Kelly07810fc2020-11-12 10:58:48 +0000744 abs->GetGuid(),
Keith Davis97da5e22020-03-05 16:25:28 +0000745 output->GetGuid(),
Keith Davis97da5e22020-03-05 16:25:28 +0000746 LabelsAndEventClasses::CONNECTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000747 readableData,
748 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000749
750 bufferManager.MarkRead(readableBuffer);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000751
752 // Creates structures for input & output.
753 std::vector<float> inputData(inputInfo.GetNumElements());
754 std::vector<float> outputData(outputInfo.GetNumElements());
755
Cathal Corbett5b8093c2021-10-22 11:12:07 +0100756 TensorInfo inputTensorInfo = runtime.GetInputTensorInfo(netId, 0);
757 inputTensorInfo.SetConstant(true);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000758 InputTensors inputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000759 {
Cathal Corbett5b8093c2021-10-22 11:12:07 +0100760 {0, ConstTensor(inputTensorInfo, inputData.data())}
Keith Davis97da5e22020-03-05 16:25:28 +0000761 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000762 OutputTensors outputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000763 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000764 {0, Tensor(runtime.GetOutputTensorInfo(netId, 0), outputData.data())}
Keith Davis97da5e22020-03-05 16:25:28 +0000765 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000766
767 // Does the inference.
Sadik Armagan3184c902020-03-18 10:57:30 +0000768 runtime.EnqueueWorkload(netId, inputTensors, outputTensors);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000769
Finn Williamsb6a402f2020-03-24 13:46:22 +0000770 // Get readable buffer for input workload
771 auto inputReadableBuffer = bufferManager.GetReadableBuffer();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100772 CHECK(inputReadableBuffer != nullptr);
David Monahan6198fe02019-12-02 08:35:43 +0000773
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000774 // Get readable buffer for output workload
775 auto outputReadableBuffer = bufferManager.GetReadableBuffer();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100776 CHECK(outputReadableBuffer != nullptr);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000777
Finn Williamsb6a402f2020-03-24 13:46:22 +0000778 // Get readable buffer for inference timeline
779 auto inferenceReadableBuffer = bufferManager.GetReadableBuffer();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100780 CHECK(inferenceReadableBuffer != nullptr);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000781
782 // Validate input workload data
783 size = inputReadableBuffer->GetSize();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100784 CHECK(size == 164);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000785
786 readableData = inputReadableBuffer->GetReadableData();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100787 CHECK(readableData != nullptr);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000788
789 offset = 0;
790
Keith Davis97da5e22020-03-05 16:25:28 +0000791 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100792 VerifyTimelineHeaderBinary(readableData, offset, 156);
Keith Davis97da5e22020-03-05 16:25:28 +0000793
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000794 // Input workload
795 // Input workload entity
Jim Flynndecd08b2022-03-13 22:35:46 +0000796 ProfilingGuid inputWorkloadGuid = VerifyTimelineEntityBinaryPacketData(
797 arm::pipe::EmptyOptional(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000798
799 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000800 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000801 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100802 inputWorkloadGuid,
803 LabelsAndEventClasses::WORKLOAD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000804 LabelsAndEventClasses::TYPE_GUID,
805 readableData,
806 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000807
808 // BackendId entity
Jim Flynndecd08b2022-03-13 22:35:46 +0000809 VerifyTimelineLabelBinaryPacketData(arm::pipe::EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000810
811 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000812 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000813 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100814 inputWorkloadGuid,
815 backendIdLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000816 LabelsAndEventClasses::BACKENDID_GUID,
817 readableData,
818 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000819
820 // Input layer - Input workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000821 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000822 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000823 input->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100824 inputWorkloadGuid,
825 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000826 readableData,
827 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000828
829 bufferManager.MarkRead(inputReadableBuffer);
830
831 // Validate output workload data
832 size = outputReadableBuffer->GetSize();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100833 CHECK(size == 164);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000834
835 readableData = outputReadableBuffer->GetReadableData();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100836 CHECK(readableData != nullptr);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000837
838 offset = 0;
839
Keith Davis97da5e22020-03-05 16:25:28 +0000840 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100841 VerifyTimelineHeaderBinary(readableData, offset, 156);
Keith Davis97da5e22020-03-05 16:25:28 +0000842
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000843 // Output workload
844 // Output workload entity
Jim Flynndecd08b2022-03-13 22:35:46 +0000845 ProfilingGuid outputWorkloadGuid = VerifyTimelineEntityBinaryPacketData(
846 arm::pipe::EmptyOptional(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000847
848 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000849 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000850 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100851 outputWorkloadGuid,
852 LabelsAndEventClasses::WORKLOAD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000853 LabelsAndEventClasses::TYPE_GUID,
854 readableData,
855 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000856
857 // BackendId entity
Jim Flynndecd08b2022-03-13 22:35:46 +0000858 VerifyTimelineLabelBinaryPacketData(arm::pipe::EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000859
860 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000861 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000862 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100863 outputWorkloadGuid,
864 backendIdLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000865 LabelsAndEventClasses::BACKENDID_GUID,
866 readableData,
867 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000868
869 // Output layer - Output workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000870 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000871 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000872 output->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100873 outputWorkloadGuid,
874 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000875 readableData,
876 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000877
878 bufferManager.MarkRead(outputReadableBuffer);
David Monahan6198fe02019-12-02 08:35:43 +0000879
880 // Validate inference data
881 size = inferenceReadableBuffer->GetSize();
Jan Eilersa10e2a22020-03-26 12:04:54 +0000882
Sadik Armagan1625efc2021-06-10 18:24:34 +0100883 CHECK(size == 1228 + 10 * ThreadIdSize);
David Monahan6198fe02019-12-02 08:35:43 +0000884
885 readableData = inferenceReadableBuffer->GetReadableData();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100886 CHECK(readableData != nullptr);
David Monahan6198fe02019-12-02 08:35:43 +0000887
888 offset = 0;
889
Keith Davis97da5e22020-03-05 16:25:28 +0000890 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100891 VerifyTimelineHeaderBinary(readableData, offset, 1220 + 10 * ThreadIdSize);
Keith Davis97da5e22020-03-05 16:25:28 +0000892
David Monahan6198fe02019-12-02 08:35:43 +0000893 // Inference timeline trace
894 // Inference entity
Jim Flynndecd08b2022-03-13 22:35:46 +0000895 ProfilingGuid inferenceGuid = VerifyTimelineEntityBinaryPacketData(
896 arm::pipe::EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000897
898 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000899 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000900 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100901 inferenceGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000902 LabelsAndEventClasses::INFERENCE_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000903 LabelsAndEventClasses::TYPE_GUID,
904 readableData,
905 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000906
907 // Network - Inference relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000908 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000909 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000910 optNetGuid,
Jim Flynn6398a982020-05-27 17:05:21 +0100911 inferenceGuid,
912 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000913 readableData,
914 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000915
916 // Start Inference life
917 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +0100918 ProfilingGuid inferenceEventGuid = VerifyTimelineEventBinaryPacket(
Jim Flynndecd08b2022-03-13 22:35:46 +0000919 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000920
921 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000922 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000923 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100924 inferenceGuid,
925 inferenceEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000926 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
927 readableData,
928 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000929
930 // Execution
931 // Input workload execution
932 // Input workload execution entity
Jim Flynn6398a982020-05-27 17:05:21 +0100933 ProfilingGuid inputWorkloadExecutionGuid = VerifyTimelineEntityBinaryPacketData(
Jim Flynndecd08b2022-03-13 22:35:46 +0000934 arm::pipe::EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000935
936 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000937 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000938 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100939 inputWorkloadExecutionGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000940 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000941 LabelsAndEventClasses::TYPE_GUID,
942 readableData,
943 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000944
945 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000946 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000947 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100948 inferenceGuid,
949 inputWorkloadExecutionGuid,
950 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000951 readableData,
952 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000953
954 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000955 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000956 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100957 inputWorkloadGuid,
958 inputWorkloadExecutionGuid,
959 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000960 readableData,
961 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000962
963 // Start Input workload execution life
964 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +0100965 ProfilingGuid inputWorkloadExecutionSOLEventId = VerifyTimelineEventBinaryPacket(
Jim Flynndecd08b2022-03-13 22:35:46 +0000966 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000967
968 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000969 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000970 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100971 inputWorkloadExecutionGuid,
972 inputWorkloadExecutionSOLEventId,
Keith Davis97da5e22020-03-05 16:25:28 +0000973 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
974 readableData,
975 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000976
977 // End of Input workload execution life
978 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +0100979 ProfilingGuid inputWorkloadExecutionEOLEventId = VerifyTimelineEventBinaryPacket(
Jim Flynndecd08b2022-03-13 22:35:46 +0000980 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000981
982 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000983 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000984 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100985 inputWorkloadExecutionGuid,
986 inputWorkloadExecutionEOLEventId,
Keith Davis97da5e22020-03-05 16:25:28 +0000987 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
988 readableData,
989 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000990
991 // Conv2d workload execution
992 // Conv2d workload execution entity
Jim Flynn6398a982020-05-27 17:05:21 +0100993 ProfilingGuid conv2DWorkloadExecutionGuid = VerifyTimelineEntityBinaryPacketData(
Jim Flynndecd08b2022-03-13 22:35:46 +0000994 arm::pipe::EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000995
996 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000997 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000998 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100999 conv2DWorkloadExecutionGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001000 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001001 LabelsAndEventClasses::TYPE_GUID,
1002 readableData,
1003 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001004
1005 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001006 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +00001007 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001008 inferenceGuid,
1009 conv2DWorkloadExecutionGuid,
1010 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001011 readableData,
1012 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001013
1014 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001015 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +00001016 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001017 conv2DWorkloadGuid,
1018 conv2DWorkloadExecutionGuid,
1019 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001020 readableData,
1021 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001022
1023 // Start Conv2d workload execution life
1024 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001025 ProfilingGuid conv2DWorkloadExecutionSOLEventGuid = VerifyTimelineEventBinaryPacket(
Jim Flynndecd08b2022-03-13 22:35:46 +00001026 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001027
1028 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001029 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +00001030 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001031 conv2DWorkloadExecutionGuid,
1032 conv2DWorkloadExecutionSOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001033 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1034 readableData,
1035 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001036
1037 // End of Conv2d workload execution life
1038 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001039 ProfilingGuid conv2DWorkloadExecutionEOLEventGuid = VerifyTimelineEventBinaryPacket(
Jim Flynndecd08b2022-03-13 22:35:46 +00001040 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001041
1042 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001043 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +00001044 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001045 conv2DWorkloadExecutionGuid,
1046 conv2DWorkloadExecutionEOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001047 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1048 readableData,
1049 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001050
Mike Kelly07810fc2020-11-12 10:58:48 +00001051 // Abs workload execution
1052 // Abs workload execution entity
1053 ProfilingGuid absWorkloadExecutionGuid = VerifyTimelineEntityBinaryPacketData(
Jim Flynndecd08b2022-03-13 22:35:46 +00001054 arm::pipe::EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001055
1056 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001057 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +00001058 arm::pipe::EmptyOptional(),
Mike Kelly07810fc2020-11-12 10:58:48 +00001059 absWorkloadExecutionGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001060 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001061 LabelsAndEventClasses::TYPE_GUID,
1062 readableData,
1063 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001064
1065 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001066 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +00001067 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001068 inferenceGuid,
Mike Kelly07810fc2020-11-12 10:58:48 +00001069 absWorkloadExecutionGuid,
Jim Flynn6398a982020-05-27 17:05:21 +01001070 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001071 readableData,
1072 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001073
1074 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001075 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +00001076 arm::pipe::EmptyOptional(),
Mike Kelly07810fc2020-11-12 10:58:48 +00001077 absWorkloadGuid,
1078 absWorkloadExecutionGuid,
Jim Flynn6398a982020-05-27 17:05:21 +01001079 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001080 readableData,
1081 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001082
Mike Kelly07810fc2020-11-12 10:58:48 +00001083 // Start Abs workload execution life
David Monahan6198fe02019-12-02 08:35:43 +00001084 // Event packet - timeline, threadId, eventGuid
Mike Kelly07810fc2020-11-12 10:58:48 +00001085 ProfilingGuid absWorkloadExecutionSOLEventGuid = VerifyTimelineEventBinaryPacket(
Jim Flynndecd08b2022-03-13 22:35:46 +00001086 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001087
Mike Kelly07810fc2020-11-12 10:58:48 +00001088 // Abs workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001089 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +00001090 arm::pipe::EmptyOptional(),
Mike Kelly07810fc2020-11-12 10:58:48 +00001091 absWorkloadExecutionGuid,
1092 absWorkloadExecutionSOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001093 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1094 readableData,
1095 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001096
Mike Kelly07810fc2020-11-12 10:58:48 +00001097 // End of Abs workload execution life
David Monahan6198fe02019-12-02 08:35:43 +00001098 // Event packet - timeline, threadId, eventGuid
Mike Kelly07810fc2020-11-12 10:58:48 +00001099 ProfilingGuid absWorkloadExecutionEOLEventGuid = VerifyTimelineEventBinaryPacket(
Jim Flynndecd08b2022-03-13 22:35:46 +00001100 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001101
Mike Kelly07810fc2020-11-12 10:58:48 +00001102 // Abs workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001103 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +00001104 arm::pipe::EmptyOptional(),
Mike Kelly07810fc2020-11-12 10:58:48 +00001105 absWorkloadExecutionGuid,
1106 absWorkloadExecutionEOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001107 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1108 readableData,
1109 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001110
1111 // Output workload execution
1112 // Output workload execution entity
Jim Flynn6398a982020-05-27 17:05:21 +01001113 ProfilingGuid outputWorkloadExecutionGuid = VerifyTimelineEntityBinaryPacketData(
Jim Flynndecd08b2022-03-13 22:35:46 +00001114 arm::pipe::EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001115
1116 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001117 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +00001118 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001119 outputWorkloadExecutionGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001120 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001121 LabelsAndEventClasses::TYPE_GUID,
1122 readableData,
1123 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001124
1125 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001126 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +00001127 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001128 inferenceGuid,
1129 outputWorkloadExecutionGuid,
1130 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001131 readableData,
1132 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001133
1134 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001135 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +00001136 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001137 outputWorkloadGuid,
1138 outputWorkloadExecutionGuid,
1139 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001140 readableData,
1141 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001142
1143 // Start Output workload execution life
1144 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001145 ProfilingGuid outputWorkloadExecutionSOLEventGuid = VerifyTimelineEventBinaryPacket(
Jim Flynndecd08b2022-03-13 22:35:46 +00001146 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001147
1148 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001149 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +00001150 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001151 outputWorkloadExecutionGuid,
1152 outputWorkloadExecutionSOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001153 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1154 readableData,
1155 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001156
1157 // End of Normalize workload execution life
1158 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001159 ProfilingGuid outputWorkloadExecutionEOLEventGuid = VerifyTimelineEventBinaryPacket(
Jim Flynndecd08b2022-03-13 22:35:46 +00001160 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001161
1162 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001163 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +00001164 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001165 outputWorkloadExecutionGuid,
1166 outputWorkloadExecutionEOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001167 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1168 readableData,
1169 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001170
1171 // End of Inference life
1172 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001173 ProfilingGuid inferenceEOLEventGuid = VerifyTimelineEventBinaryPacket(
Jim Flynndecd08b2022-03-13 22:35:46 +00001174 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001175
1176 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001177 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +00001178 arm::pipe::EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001179 inferenceGuid,
1180 inferenceEOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001181 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1182 readableData,
1183 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001184
1185 bufferManager.MarkRead(inferenceReadableBuffer);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00001186}
Jim Flynn6398a982020-05-27 17:05:21 +01001187
Jim Flynn6398a982020-05-27 17:05:21 +01001188bool CompareOutput(std::vector<std::string> output, std::vector<std::string> expectedOutput)
1189{
1190 if (output.size() != expectedOutput.size())
1191 {
1192 std::cerr << "output has [" << output.size() << "] lines, expected was ["
1193 << expectedOutput.size() << "] lines" << std::endl;
1194 std::cerr << std::endl << "actual" << std::endl << std::endl;
1195 for (auto line : output)
1196 {
1197 std::cerr << line << std::endl;
1198 }
1199 std::cerr << std::endl << "expected" << std::endl << std::endl;
1200 for (auto line : expectedOutput)
1201 {
1202 std::cerr << line << std::endl;
1203 }
1204 return false;
1205 }
1206 bool bRet = true;
1207 for (unsigned long i = 0; i < output.size(); ++i)
1208 {
1209 if (output[i] != expectedOutput[i])
1210 {
1211 bRet = false;
1212 std::cerr << i << ": actual [" << output[i] << "] expected [" << expectedOutput[i] << "]" << std::endl;
1213 }
1214 }
1215 return bRet;
1216}