blob: 09639bfae7c47ea62db39ff7e44c22a49abe9cdd [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>
Matthew Sloyan371b70e2020-09-11 10:14:57 +010010#include <armnn/utility/NumericCast.hpp>
11
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000012#include <LabelsAndEventClasses.hpp>
Jim Flynnf7713212020-07-14 09:50:59 +010013#include <Processes.hpp>
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000014#include <ProfilingService.hpp>
Jim Flynnf7713212020-07-14 09:50:59 +010015#include <Threads.hpp>
Sadik Armaganea41b572020-03-19 18:16:46 +000016
17#include <test/TestUtils.hpp>
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000018
19#include <boost/test/unit_test.hpp>
20
Finn Williamsa0de0562020-04-22 12:27:37 +010021uint32_t GetStreamMetaDataPacketSize()
22{
23 uint32_t sizeUint32 = sizeof(uint32_t);
24 uint32_t payloadSize = 0;
Matthew Sloyan371b70e2020-09-11 10:14:57 +010025 payloadSize += armnn::numeric_cast<uint32_t>(GetSoftwareInfo().size()) + 1;
26 payloadSize += armnn::numeric_cast<uint32_t>(GetHardwareVersion().size()) + 1;
27 payloadSize += armnn::numeric_cast<uint32_t>(GetSoftwareVersion().size()) + 1;
28 payloadSize += armnn::numeric_cast<uint32_t>(GetProcessName().size()) + 1;
Finn Williamsa0de0562020-04-22 12:27:37 +010029
30 // Add packetVersionEntries
Jim Flynn83d08a92020-07-09 13:48:16 +010031 payloadSize += 13 * 2 * sizeUint32;
Finn Williamsa0de0562020-04-22 12:27:37 +010032 // Add packetVersionCountSize
33 payloadSize += sizeUint32;
34
35 uint32_t headerSize = 2 * sizeUint32;
36 uint32_t bodySize = 10 * sizeUint32;
37
38 return headerSize + bodySize + payloadSize;
39}
40
Jan Eilersf78c7672020-07-01 18:09:39 +010041std::vector<BackendId> GetSuitableBackendRegistered()
42{
43 std::vector<BackendId> suitableBackends;
44 if (BackendRegistryInstance().IsBackendRegistered(GetComputeDeviceAsCString(armnn::Compute::CpuRef)))
45 {
46 suitableBackends.push_back(armnn::Compute::CpuRef);
47 }
48 if (BackendRegistryInstance().IsBackendRegistered(GetComputeDeviceAsCString(armnn::Compute::CpuAcc)))
49 {
50 suitableBackends.push_back(armnn::Compute::CpuAcc);
51 }
52 if (BackendRegistryInstance().IsBackendRegistered(GetComputeDeviceAsCString(armnn::Compute::GpuAcc)))
53 {
54 suitableBackends.push_back(armnn::Compute::GpuAcc);
55 }
56 return suitableBackends;
57}
58
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000059inline unsigned int OffsetToNextWord(unsigned int numberOfBytes)
60{
61 unsigned int uint32_t_size = sizeof(uint32_t);
62
63 unsigned int remainder = numberOfBytes % uint32_t_size;
64 if (remainder == 0)
65 {
66 return numberOfBytes;
67 }
68
69 return numberOfBytes + uint32_t_size - remainder;
70}
71
Keith Davis97da5e22020-03-05 16:25:28 +000072void VerifyTimelineHeaderBinary(const unsigned char* readableData,
73 unsigned int& offset,
74 uint32_t packetDataLength)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000075{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +010076 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000077
78 // Utils
79 unsigned int uint32_t_size = sizeof(uint32_t);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000080
Keith Davis97da5e22020-03-05 16:25:28 +000081 // Check the TimelineEventClassBinaryPacket header
Finn Williams0a336dc2020-05-11 15:39:58 +010082 uint32_t timelineBinaryPacketHeaderWord0 = ReadUint32(readableData, offset);
83 uint32_t timelineBinaryPacketFamily = (timelineBinaryPacketHeaderWord0 >> 26) & 0x0000003F;
84 uint32_t timelineBinaryPacketClass = (timelineBinaryPacketHeaderWord0 >> 19) & 0x0000007F;
85 uint32_t timelineBinaryPacketType = (timelineBinaryPacketHeaderWord0 >> 16) & 0x00000007;
86 uint32_t timelineBinaryPacketStreamId = (timelineBinaryPacketHeaderWord0 >> 0) & 0x00000007;
87 BOOST_CHECK(timelineBinaryPacketFamily == 1);
88 BOOST_CHECK(timelineBinaryPacketClass == 0);
89 BOOST_CHECK(timelineBinaryPacketType == 1);
90 BOOST_CHECK(timelineBinaryPacketStreamId == 0);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000091 offset += uint32_t_size;
Finn Williams0a336dc2020-05-11 15:39:58 +010092 uint32_t timelineBinaryPacketHeaderWord1 = ReadUint32(readableData, offset);
93 uint32_t timelineBinaryPacketSequenceNumber = (timelineBinaryPacketHeaderWord1 >> 24) & 0x00000001;
94 uint32_t timelineBinaryPacketDataLength = (timelineBinaryPacketHeaderWord1 >> 0) & 0x00FFFFFF;
95 BOOST_CHECK(timelineBinaryPacketSequenceNumber == 0);
96 BOOST_CHECK(timelineBinaryPacketDataLength == packetDataLength);
Keith Davis97da5e22020-03-05 16:25:28 +000097 offset += uint32_t_size;
98}
99
Jim Flynn6398a982020-05-27 17:05:21 +0100100ProfilingGuid VerifyTimelineLabelBinaryPacketData(Optional<ProfilingGuid> guid,
101 const std::string& label,
102 const unsigned char* readableData,
103 unsigned int& offset)
Keith Davis97da5e22020-03-05 16:25:28 +0000104{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100105 ARMNN_ASSERT(readableData);
Keith Davis97da5e22020-03-05 16:25:28 +0000106
107 // Utils
108 unsigned int uint32_t_size = sizeof(uint32_t);
109 unsigned int uint64_t_size = sizeof(uint64_t);
Matthew Sloyan371b70e2020-09-11 10:14:57 +0100110 unsigned int label_size = armnn::numeric_cast<unsigned int>(label.size());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000111
112 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000113 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
114 BOOST_CHECK(eventClassDeclId == 0);
115
116 // Check the profiling GUID
117 offset += uint32_t_size;
118 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
119 if (guid.has_value())
120 {
121 BOOST_CHECK(readProfilingGuid == guid.value());
122 }
123 else
124 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000125 armnn::profiling::ProfilingService profilingService;
126 BOOST_CHECK(readProfilingGuid == profilingService.GetStaticId(label));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000127 }
128
129 // Check the SWTrace label
130 offset += uint64_t_size;
131 uint32_t swTraceLabelLength = ReadUint32(readableData, offset);
Keith Davis97da5e22020-03-05 16:25:28 +0000132 BOOST_CHECK(swTraceLabelLength == label_size + 1); // Label length including the null-terminator
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000133 offset += uint32_t_size;
134 BOOST_CHECK(std::memcmp(readableData + offset, // Offset to the label in the buffer
Keith Davis97da5e22020-03-05 16:25:28 +0000135 label.data(), // The original label
136 swTraceLabelLength - 1) == 0); // The length of the label
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000137
138 // SWTrace strings are written in blocks of words, so the offset has to be updated to the next whole word
139 offset += OffsetToNextWord(swTraceLabelLength);
Jim Flynn6398a982020-05-27 17:05:21 +0100140
141 ProfilingGuid labelGuid(readProfilingGuid);
142 return labelGuid;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000143}
144
Keith Davis97da5e22020-03-05 16:25:28 +0000145void VerifyTimelineEventClassBinaryPacketData(ProfilingGuid guid,
Jim Flynn1892d212020-05-26 21:10:49 +0100146 ProfilingGuid nameGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000147 const unsigned char* readableData,
148 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000149{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100150 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000151
152 // Utils
153 unsigned int uint32_t_size = sizeof(uint32_t);
154 unsigned int uint64_t_size = sizeof(uint64_t);
155
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000156 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000157 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
158 BOOST_CHECK(eventClassDeclId == 2);
159
160 // Check the profiling GUID
161 offset += uint32_t_size;
162 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
163 BOOST_CHECK(readProfilingGuid == guid);
164
Jim Flynn1892d212020-05-26 21:10:49 +0100165 offset += uint64_t_size;
166 uint64_t readProfiilngNameGuid = ReadUint64(readableData, offset);
167 BOOST_CHECK(readProfiilngNameGuid == nameGuid);
168
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000169 // Update the offset to allow parsing to be continued after this function returns
170 offset += uint64_t_size;
171}
172
Keith Davis97da5e22020-03-05 16:25:28 +0000173void VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType relationshipType,
Jim Flynn6398a982020-05-27 17:05:21 +0100174 Optional<ProfilingGuid> relationshipGuid,
175 Optional<ProfilingGuid> headGuid,
176 Optional<ProfilingGuid> tailGuid,
177 Optional<ProfilingGuid> attributeGuid,
178 const unsigned char* readableData,
179 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000180{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100181 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000182
183 uint32_t relationshipTypeUint = 0;
184 switch (relationshipType)
185 {
186 case ProfilingRelationshipType::RetentionLink:
187 relationshipTypeUint = 0;
188 break;
189 case ProfilingRelationshipType::ExecutionLink:
190 relationshipTypeUint = 1;
191 break;
192 case ProfilingRelationshipType::DataLink:
193 relationshipTypeUint = 2;
194 break;
195 case ProfilingRelationshipType::LabelLink:
196 relationshipTypeUint = 3;
197 break;
198 default:
199 BOOST_ERROR("Unknown relationship type");
200 }
201
202 // Utils
203 unsigned int uint32_t_size = sizeof(uint32_t);
204 unsigned int uint64_t_size = sizeof(uint64_t);
205
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000206 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000207 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
208 BOOST_CHECK(eventClassDeclId == 3);
209
210 // Check the relationship type
211 offset += uint32_t_size;
212 uint32_t readRelationshipTypeUint = ReadUint32(readableData, offset);
213 BOOST_CHECK(readRelationshipTypeUint == relationshipTypeUint);
214
215 // Check the relationship GUID
216 offset += uint32_t_size;
217 uint64_t readRelationshipGuid = ReadUint64(readableData, offset);
218 if (relationshipGuid.has_value())
219 {
220 BOOST_CHECK(readRelationshipGuid == relationshipGuid.value());
221 }
222 else
223 {
224 BOOST_CHECK(readRelationshipGuid != ProfilingGuid(0));
225 }
226
Jim Flynn6398a982020-05-27 17:05:21 +0100227 // Check the head GUID of the relationship
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000228 offset += uint64_t_size;
229 uint64_t readHeadRelationshipGuid = ReadUint64(readableData, offset);
230 if (headGuid.has_value())
231 {
232 BOOST_CHECK(readHeadRelationshipGuid == headGuid.value());
233 }
234 else
235 {
236 BOOST_CHECK(readHeadRelationshipGuid != ProfilingGuid(0));
237 }
238
Jim Flynn6398a982020-05-27 17:05:21 +0100239 // Check the tail GUID of the relationship
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000240 offset += uint64_t_size;
241 uint64_t readTailRelationshipGuid = ReadUint64(readableData, offset);
242 if (tailGuid.has_value())
243 {
244 BOOST_CHECK(readTailRelationshipGuid == tailGuid.value());
245 }
246 else
247 {
248 BOOST_CHECK(readTailRelationshipGuid != ProfilingGuid(0));
249 }
250
Jim Flynn6398a982020-05-27 17:05:21 +0100251 // Check the attribute GUID of the relationship
Finn Williams0a336dc2020-05-11 15:39:58 +0100252 offset += uint64_t_size;
253 uint64_t readAttributeRelationshipGuid = ReadUint64(readableData, offset);
254 if (attributeGuid.has_value())
255 {
256 BOOST_CHECK(readAttributeRelationshipGuid == attributeGuid.value());
257 }
258 else
259 {
260 BOOST_CHECK(readAttributeRelationshipGuid == ProfilingGuid(0));
261 }
262
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000263 // Update the offset to allow parsing to be continued after this function returns
264 offset += uint64_t_size;
265}
266
Jim Flynn6398a982020-05-27 17:05:21 +0100267ProfilingGuid VerifyTimelineEntityBinaryPacketData(Optional<ProfilingGuid> guid,
268 const unsigned char* readableData,
269 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000270{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100271 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000272
273 // Utils
274 unsigned int uint32_t_size = sizeof(uint32_t);
275 unsigned int uint64_t_size = sizeof(uint64_t);
276
277 // Reading TimelineEntityClassBinaryPacket
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000278 // Check the decl_id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000279 uint32_t entityDeclId = ReadUint32(readableData, offset);
280 BOOST_CHECK(entityDeclId == 1);
281
282 // Check the profiling GUID
283 offset += uint32_t_size;
284 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
285
286 if (guid.has_value())
287 {
288 BOOST_CHECK(readProfilingGuid == guid.value());
289 }
290 else
291 {
292 BOOST_CHECK(readProfilingGuid != ProfilingGuid(0));
293 }
294
295 offset += uint64_t_size;
Jim Flynn6398a982020-05-27 17:05:21 +0100296
297 ProfilingGuid entityGuid(readProfilingGuid);
298 return entityGuid;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000299}
300
Jim Flynn6398a982020-05-27 17:05:21 +0100301ProfilingGuid VerifyTimelineEventBinaryPacket(Optional<uint64_t> timestamp,
Jim Flynn1fdeb992020-07-09 07:28:37 +0100302 Optional<int> threadId,
Jim Flynn6398a982020-05-27 17:05:21 +0100303 Optional<ProfilingGuid> eventGuid,
304 const unsigned char* readableData,
305 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000306{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100307 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000308
309 // Utils
310 unsigned int uint32_t_size = sizeof(uint32_t);
311 unsigned int uint64_t_size = sizeof(uint64_t);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000312
313 // Reading TimelineEventBinaryPacket
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000314 // Check the decl_id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000315 uint32_t entityDeclId = ReadUint32(readableData, offset);
316 BOOST_CHECK(entityDeclId == 4);
317
318 // Check the timestamp
319 offset += uint32_t_size;
320 uint64_t readTimestamp = ReadUint64(readableData, offset);
321 if (timestamp.has_value())
322 {
323 BOOST_CHECK(readTimestamp == timestamp.value());
324 }
325 else
326 {
327 BOOST_CHECK(readTimestamp != 0);
328 }
329
330 // Check the thread id
331 offset += uint64_t_size;
Colm Donelan5bb3d8a2020-05-12 16:36:46 +0100332 std::vector<uint8_t> readThreadId(ThreadIdSize, 0);
333 ReadBytes(readableData, offset, ThreadIdSize, readThreadId.data());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000334 if (threadId.has_value())
335 {
336 BOOST_CHECK(readThreadId == threadId.value());
337 }
338 else
339 {
Jim Flynn1fdeb992020-07-09 07:28:37 +0100340 BOOST_CHECK(readThreadId == armnnUtils::Threads::GetCurrentThreadId());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000341 }
342
343 // Check the event GUID
Colm Donelan5bb3d8a2020-05-12 16:36:46 +0100344 offset += ThreadIdSize;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000345 uint64_t readEventGuid = ReadUint64(readableData, offset);
346 if (eventGuid.has_value())
347 {
348 BOOST_CHECK(readEventGuid == eventGuid.value());
349 }
350 else
351 {
352 BOOST_CHECK(readEventGuid != ProfilingGuid(0));
353 }
354
355 offset += uint64_t_size;
Jim Flynn6398a982020-05-27 17:05:21 +0100356
357 ProfilingGuid eventid(readEventGuid);
358 return eventid;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000359}
360
361void VerifyPostOptimisationStructureTestImpl(armnn::BackendId backendId)
362{
363 using namespace armnn;
364
365 // Create runtime in which test will run
366 armnn::IRuntime::CreationOptions options;
367 options.m_ProfilingOptions.m_EnableProfiling = true;
Keith Davis33ed2212020-03-30 10:43:41 +0100368 options.m_ProfilingOptions.m_TimelineEnabled = true;
Sadik Armagan3184c902020-03-18 10:57:30 +0000369 armnn::Runtime runtime(options);
Keith Davis33ed2212020-03-30 10:43:41 +0100370 GetProfilingService(&runtime).ResetExternalProfilingOptions(options.m_ProfilingOptions, false);
371
372 profiling::ProfilingServiceRuntimeHelper profilingServiceHelper(GetProfilingService(&runtime));
373 profilingServiceHelper.ForceTransitionToState(ProfilingState::NotConnected);
374 profilingServiceHelper.ForceTransitionToState(ProfilingState::WaitingForAck);
375 profilingServiceHelper.ForceTransitionToState(ProfilingState::Active);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000376
377 // build up the structure of the network
378 INetworkPtr net(INetwork::Create());
379
380 // Convolution details
381 TensorInfo inputInfo({ 1, 2, 5, 1 }, DataType::Float32);
Keith Davis97da5e22020-03-05 16:25:28 +0000382 TensorInfo weightInfo({ 3, 2, 3, 1 }, DataType::Float32);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000383 TensorInfo biasInfo({ 3 }, DataType::Float32);
Keith Davis97da5e22020-03-05 16:25:28 +0000384 TensorInfo outputInfo({ 1, 3, 7, 1 }, DataType::Float32);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000385 std::vector<float> weightsData{
Keith Davis97da5e22020-03-05 16:25:28 +0000386 1.0f, 0.0f, 0.0f,
387 0.0f, 2.0f, -1.5f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000388
Keith Davis97da5e22020-03-05 16:25:28 +0000389 0.0f, 0.0f, 0.0f,
390 0.2f, 0.2f, 0.2f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000391
Keith Davis97da5e22020-03-05 16:25:28 +0000392 0.5f, 0.0f, 0.5f,
393 0.0f, -1.0f, 0.0f
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000394 };
395 ConstTensor weights(weightInfo, weightsData);
396
397 Optional<ConstTensor> optionalBiases;
398 std::vector<float> biasesData{ 1.0f, 0.0f, 0.0f };
399 ConstTensor biases(biasInfo, biasesData);
400 optionalBiases = Optional<ConstTensor>(biases);
401
402 // Input layer
403 IConnectableLayer* input = net->AddInputLayer(0, "input");
404
405 // Convolution2d layer
406 Convolution2dDescriptor conv2dDesc;
Keith Davis97da5e22020-03-05 16:25:28 +0000407 conv2dDesc.m_StrideX = 1;
408 conv2dDesc.m_StrideY = 1;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000409 conv2dDesc.m_PadLeft = 0;
410 conv2dDesc.m_PadRight = 0;
411 conv2dDesc.m_PadTop = 2;
412 conv2dDesc.m_PadBottom = 2;
413 conv2dDesc.m_BiasEnabled = true;
414 IConnectableLayer* conv2d = net->AddConvolution2dLayer(conv2dDesc, weights, optionalBiases);
415
416 // Activation layer
417 armnn::ActivationDescriptor activationDesc;
418 armnn::IConnectableLayer* const activation = net->AddActivationLayer(activationDesc, "activation");
419
420 // Output layer
421 IConnectableLayer* output = net->AddOutputLayer(0, "output");
422
423 input->GetOutputSlot(0).Connect(conv2d->GetInputSlot(0));
424 conv2d->GetOutputSlot(0).Connect(activation->GetInputSlot(0));
425 activation->GetOutputSlot(0).Connect(output->GetInputSlot(0));
426
427 input->GetOutputSlot(0).SetTensorInfo(inputInfo);
428 conv2d->GetOutputSlot(0).SetTensorInfo(outputInfo);
429 activation->GetOutputSlot(0).SetTensorInfo(outputInfo);
430
431 // optimize the network
432 std::vector<armnn::BackendId> backends = { backendId };
Sadik Armagan3184c902020-03-18 10:57:30 +0000433 IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime.GetDeviceSpec());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000434
435 ProfilingGuid optNetGuid = optNet->GetGuid();
436
437 // Load it into the runtime. It should success.
438 armnn::NetworkId netId;
Sadik Armagan3184c902020-03-18 10:57:30 +0000439 BOOST_TEST(runtime.LoadNetwork(netId, std::move(optNet)) == Status::Success);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000440
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000441 profiling::BufferManager& bufferManager = profilingServiceHelper.GetProfilingBufferManager();
442 auto readableBuffer = bufferManager.GetReadableBuffer();
443
Jim Flynnf7713212020-07-14 09:50:59 +0100444 // Profiling is enabled, the post-optimisation structure should be created
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000445 BOOST_CHECK(readableBuffer != nullptr);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000446 unsigned int size = readableBuffer->GetSize();
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000447
448 const unsigned char* readableData = readableBuffer->GetReadableData();
449 BOOST_CHECK(readableData != nullptr);
450
451 unsigned int offset = 0;
452
Keith Davis97da5e22020-03-05 16:25:28 +0000453 // Verify Header
Jim Flynnf7713212020-07-14 09:50:59 +0100454 VerifyTimelineHeaderBinary(readableData, offset, size - 8);
Jim Flynn6398a982020-05-27 17:05:21 +0100455 BOOST_TEST_MESSAGE("HEADER OK");
Keith Davis97da5e22020-03-05 16:25:28 +0000456
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000457 // Post-optimisation network
458 // Network entity
Keith Davis97da5e22020-03-05 16:25:28 +0000459 VerifyTimelineEntityBinaryPacketData(optNetGuid, readableData, offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100460 BOOST_TEST_MESSAGE("NETWORK ENTITY OK");
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);
Jim Flynn6398a982020-05-27 17:05:21 +0100470 BOOST_TEST_MESSAGE("NETWORK TYPE RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000471
Jim Flynnf7713212020-07-14 09:50:59 +0100472 // Network - START OF LIFE
473 ProfilingGuid networkSolEventGuid = VerifyTimelineEventBinaryPacket(EmptyOptional(),
474 EmptyOptional(),
475 EmptyOptional(),
476 readableData,
477 offset);
478 BOOST_TEST_MESSAGE("NETWORK START OF LIFE EVENT OK");
479
480 // Network - START OF LIFE event relationship
481 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
482 EmptyOptional(),
483 optNetGuid,
484 networkSolEventGuid,
485 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
486 readableData,
487 offset);
488 BOOST_TEST_MESSAGE("NETWORK START OF LIFE RELATIONSHIP OK");
489
490 // Process ID Label
491 int processID = armnnUtils::Processes::GetCurrentId();
492 std::stringstream ss;
493 ss << processID;
494 std::string processIdLabel = ss.str();
495 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), processIdLabel, readableData, offset);
496 BOOST_TEST_MESSAGE("PROCESS ID LABEL OK");
497
498 // Entity - Process ID relationship
499 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
500 EmptyOptional(),
501 optNetGuid,
502 EmptyOptional(),
503 LabelsAndEventClasses::PROCESS_ID_GUID,
504 readableData,
505 offset);
506 BOOST_TEST_MESSAGE("NETWORK PROCESS ID RELATIONSHIP OK");
507
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000508 // Input layer
509 // Input layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000510 VerifyTimelineEntityBinaryPacketData(input->GetGuid(), readableData, offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100511 BOOST_TEST_MESSAGE("INPUT ENTITY OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000512
513 // Name Entity
Jim Flynn6398a982020-05-27 17:05:21 +0100514 ProfilingGuid inputLabelGuid = VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "input", readableData, offset);
515 BOOST_TEST_MESSAGE("INPUT NAME LABEL OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000516
517 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000518 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
519 EmptyOptional(),
520 input->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100521 inputLabelGuid,
Finn Williams0a336dc2020-05-11 15:39:58 +0100522 LabelsAndEventClasses::NAME_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000523 readableData,
524 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100525 BOOST_TEST_MESSAGE("INPUT NAME RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000526
527 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000528 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
529 EmptyOptional(),
530 input->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100531 LabelsAndEventClasses::LAYER_GUID,
Finn Williams0a336dc2020-05-11 15:39:58 +0100532 LabelsAndEventClasses::TYPE_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000533 readableData,
534 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100535 BOOST_TEST_MESSAGE("INPUT TYPE RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000536
537 // Network - Input layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000538 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
539 EmptyOptional(),
540 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);
Jim Flynn6398a982020-05-27 17:05:21 +0100545 BOOST_TEST_MESSAGE("NETWORK - INPUT CHILD RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000546
547 // Conv2d layer
548 // Conv2d layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000549 VerifyTimelineEntityBinaryPacketData(conv2d->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000550
551 // Name entity
Jim Flynn6398a982020-05-27 17:05:21 +0100552 ProfilingGuid conv2dNameLabelGuid = VerifyTimelineLabelBinaryPacketData(
553 EmptyOptional(), "<Unnamed>", readableData, offset);
554 BOOST_TEST_MESSAGE("CONV2D NAME LABEL OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000555
556 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000557 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
558 EmptyOptional(),
559 conv2d->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100560 conv2dNameLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000561 LabelsAndEventClasses::NAME_GUID,
562 readableData,
563 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100564 BOOST_TEST_MESSAGE("CONV2D NAME RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000565
566 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000567 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
568 EmptyOptional(),
569 conv2d->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100570 LabelsAndEventClasses::LAYER_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000571 LabelsAndEventClasses::TYPE_GUID,
572 readableData,
573 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100574 BOOST_TEST_MESSAGE("CONV2D TYPE RELATIONSHIP OK");
Finn Williams0a336dc2020-05-11 15:39:58 +0100575
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000576 // Network - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000577 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
578 EmptyOptional(),
579 optNetGuid,
580 conv2d->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100581 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000582 readableData,
583 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100584 BOOST_TEST_MESSAGE("NETWORK - CONV2D CHILD RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000585
586 // Input layer - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000587 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
588 EmptyOptional(),
589 input->GetGuid(),
590 conv2d->GetGuid(),
Keith Davis97da5e22020-03-05 16:25:28 +0000591 LabelsAndEventClasses::CONNECTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000592 readableData,
593 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100594 BOOST_TEST_MESSAGE("INPUT - CONV2D LAYER CONNECTION OK");
Finn Williams0a336dc2020-05-11 15:39:58 +0100595
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000596 // Conv2d workload
597 // Conv2d workload entity
Jim Flynn6398a982020-05-27 17:05:21 +0100598 ProfilingGuid conv2DWorkloadGuid = VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
599 BOOST_TEST_MESSAGE("CONV2D WORKLOAD ENTITY OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000600
601 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000602 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
603 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100604 conv2DWorkloadGuid,
605 LabelsAndEventClasses::WORKLOAD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000606 LabelsAndEventClasses::TYPE_GUID,
607 readableData,
608 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100609 BOOST_TEST_MESSAGE("CONV2D WORKLOAD TYPE RELATIONSHIP OK");
Finn Williams0a336dc2020-05-11 15:39:58 +0100610
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000611 // BackendId entity
Jim Flynn6398a982020-05-27 17:05:21 +0100612 ProfilingGuid backendIdLabelGuid = VerifyTimelineLabelBinaryPacketData(
613 EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000614
615 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000616 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
617 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100618 conv2DWorkloadGuid,
619 backendIdLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000620 LabelsAndEventClasses::BACKENDID_GUID,
621 readableData,
622 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100623 BOOST_TEST_MESSAGE("CONV2D WORKLOAD BACKEND ID RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000624
Finn Williams0a336dc2020-05-11 15:39:58 +0100625
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000626 // Conv2d layer - Conv2d workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000627 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
628 EmptyOptional(),
629 conv2d->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100630 conv2DWorkloadGuid,
631 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000632 readableData,
633 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100634 BOOST_TEST_MESSAGE("CONV2D LAYER - WORKLOAD CHILD RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000635
636 // Activation layer
637 // Activation layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000638 VerifyTimelineEntityBinaryPacketData(activation->GetGuid(), readableData, offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100639 BOOST_TEST_MESSAGE("ACTIVATION ENTITY OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000640
641 // Name entity
Jim Flynn6398a982020-05-27 17:05:21 +0100642 ProfilingGuid activationLabelGuid = VerifyTimelineLabelBinaryPacketData(
643 EmptyOptional(), "activation", readableData, offset);
644 BOOST_TEST_MESSAGE("ACTIVATION NAME LABEL OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000645
646 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000647 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
648 EmptyOptional(),
649 activation->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100650 activationLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000651 LabelsAndEventClasses::NAME_GUID,
652 readableData,
653 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100654 BOOST_TEST_MESSAGE("ACTIVATION LAYER - NAME RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000655
656 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000657 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
658 EmptyOptional(),
659 activation->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100660 LabelsAndEventClasses::LAYER_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000661 LabelsAndEventClasses::TYPE_GUID,
662 readableData,
663 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100664 BOOST_TEST_MESSAGE("ACTIVATION LAYER TYPE RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000665
666 // Network - Activation layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000667 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
668 EmptyOptional(),
669 optNetGuid,
670 activation->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100671 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000672 readableData,
673 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100674 BOOST_TEST_MESSAGE("NETWORK - ACTIVATION LAYER CHILD RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000675
676 // Conv2d layer - Activation layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000677 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
678 EmptyOptional(),
679 conv2d->GetGuid(),
680 activation->GetGuid(),
Keith Davis97da5e22020-03-05 16:25:28 +0000681 LabelsAndEventClasses::CONNECTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000682 readableData,
683 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100684 BOOST_TEST_MESSAGE("CONV2D LAYER - ACTIVATION LAYER CONNECTION OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000685
686 // Activation workload
687 // Activation workload entity
Jim Flynn6398a982020-05-27 17:05:21 +0100688 ProfilingGuid activationWorkloadGuid = VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
689 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD ENTITY OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000690
691 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000692 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
693 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100694 activationWorkloadGuid,
695 LabelsAndEventClasses::WORKLOAD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000696 LabelsAndEventClasses::TYPE_GUID,
697 readableData,
698 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100699 BOOST_TEST_MESSAGE("ACTIVATION WORKLAD TYPE RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000700
701 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000702 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100703 BOOST_TEST_MESSAGE("BACKEND ID LABEL OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000704
705 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000706 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
707 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100708 activationWorkloadGuid,
709 backendIdLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000710 LabelsAndEventClasses::BACKENDID_GUID,
711 readableData,
712 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100713 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD BACKEND ID RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000714
715 // Activation layer - Activation workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000716 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
717 EmptyOptional(),
718 activation->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100719 activationWorkloadGuid,
720 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000721 readableData,
722 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100723 BOOST_TEST_MESSAGE("ACTIVATION LAYER - WORKLOAD CHILD RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000724
725 // Output layer
726 // Output layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000727 VerifyTimelineEntityBinaryPacketData(output->GetGuid(), readableData, offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100728 BOOST_TEST_MESSAGE("OUTPUT LAYER ENTITY OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000729
730 // Name entity
Jim Flynn6398a982020-05-27 17:05:21 +0100731 ProfilingGuid outputLabelGuid = VerifyTimelineLabelBinaryPacketData(
732 EmptyOptional(), "output", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000733
734 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000735 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
736 EmptyOptional(),
737 output->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100738 outputLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000739 LabelsAndEventClasses::NAME_GUID,
740 readableData,
741 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100742 BOOST_TEST_MESSAGE("OUTPUT LAYER NAME RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000743
744 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000745 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
746 EmptyOptional(),
747 output->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100748 LabelsAndEventClasses::LAYER_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000749 LabelsAndEventClasses::TYPE_GUID,
750 readableData,
751 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100752 BOOST_TEST_MESSAGE("OUTPUT LAYER TYPE RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000753
754 // Network - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000755 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
756 EmptyOptional(),
757 optNetGuid,
758 output->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100759 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000760 readableData,
761 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100762 BOOST_TEST_MESSAGE("NETWORK - OUTPUT LAYER CHILD RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000763
764 // Activation layer - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000765 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
766 EmptyOptional(),
767 activation->GetGuid(),
768 output->GetGuid(),
Keith Davis97da5e22020-03-05 16:25:28 +0000769 LabelsAndEventClasses::CONNECTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000770 readableData,
771 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100772 BOOST_TEST_MESSAGE("ACTIVATION LAYER - OUTPUT LAYER CONNECTION OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000773
774 bufferManager.MarkRead(readableBuffer);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000775
776 // Creates structures for input & output.
777 std::vector<float> inputData(inputInfo.GetNumElements());
778 std::vector<float> outputData(outputInfo.GetNumElements());
779
780 InputTensors inputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000781 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000782 {0, ConstTensor(runtime.GetInputTensorInfo(netId, 0), inputData.data())}
Keith Davis97da5e22020-03-05 16:25:28 +0000783 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000784 OutputTensors outputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000785 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000786 {0, Tensor(runtime.GetOutputTensorInfo(netId, 0), outputData.data())}
Keith Davis97da5e22020-03-05 16:25:28 +0000787 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000788
789 // Does the inference.
Sadik Armagan3184c902020-03-18 10:57:30 +0000790 runtime.EnqueueWorkload(netId, inputTensors, outputTensors);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000791
Finn Williamsb6a402f2020-03-24 13:46:22 +0000792 // Get readable buffer for input workload
793 auto inputReadableBuffer = bufferManager.GetReadableBuffer();
794 BOOST_CHECK(inputReadableBuffer != nullptr);
David Monahan6198fe02019-12-02 08:35:43 +0000795
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000796 // Get readable buffer for output workload
797 auto outputReadableBuffer = bufferManager.GetReadableBuffer();
798 BOOST_CHECK(outputReadableBuffer != nullptr);
799
Finn Williamsb6a402f2020-03-24 13:46:22 +0000800 // Get readable buffer for inference timeline
801 auto inferenceReadableBuffer = bufferManager.GetReadableBuffer();
802 BOOST_CHECK(inferenceReadableBuffer != nullptr);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000803
804 // Validate input workload data
805 size = inputReadableBuffer->GetSize();
Finn Williams0a336dc2020-05-11 15:39:58 +0100806 BOOST_CHECK(size == 164);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000807
808 readableData = inputReadableBuffer->GetReadableData();
809 BOOST_CHECK(readableData != nullptr);
810
811 offset = 0;
812
Keith Davis97da5e22020-03-05 16:25:28 +0000813 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100814 VerifyTimelineHeaderBinary(readableData, offset, 156);
Jim Flynn6398a982020-05-27 17:05:21 +0100815 BOOST_TEST_MESSAGE("INPUT WORKLOAD HEADER OK");
Keith Davis97da5e22020-03-05 16:25:28 +0000816
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000817 // Input workload
818 // Input workload entity
Jim Flynn6398a982020-05-27 17:05:21 +0100819 ProfilingGuid inputWorkloadGuid = VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
820 BOOST_TEST_MESSAGE("INPUT WORKLOAD TYPE RELATIONSHIP OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000821
822 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000823 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
824 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100825 inputWorkloadGuid,
826 LabelsAndEventClasses::WORKLOAD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000827 LabelsAndEventClasses::TYPE_GUID,
828 readableData,
829 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100830 BOOST_TEST_MESSAGE("INPUT WORKLOAD TYPE RELATIONSHIP OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000831
832 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000833 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000834
835 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000836 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
837 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100838 inputWorkloadGuid,
839 backendIdLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000840 LabelsAndEventClasses::BACKENDID_GUID,
841 readableData,
842 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100843 BOOST_TEST_MESSAGE("INPUT WORKLOAD BACKEND ID RELATIONSHIP OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000844
845 // Input layer - Input workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000846 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
847 EmptyOptional(),
848 input->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100849 inputWorkloadGuid,
850 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000851 readableData,
852 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100853 BOOST_TEST_MESSAGE("INPUT LAYER - INPUT WORKLOAD CHILD RELATIONSHIP OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000854
855 bufferManager.MarkRead(inputReadableBuffer);
856
857 // Validate output workload data
858 size = outputReadableBuffer->GetSize();
Finn Williams0a336dc2020-05-11 15:39:58 +0100859 BOOST_CHECK(size == 164);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000860
861 readableData = outputReadableBuffer->GetReadableData();
862 BOOST_CHECK(readableData != nullptr);
863
864 offset = 0;
865
Keith Davis97da5e22020-03-05 16:25:28 +0000866 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100867 VerifyTimelineHeaderBinary(readableData, offset, 156);
Jim Flynn6398a982020-05-27 17:05:21 +0100868 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD HEADER OK");
Keith Davis97da5e22020-03-05 16:25:28 +0000869
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000870 // Output workload
871 // Output workload entity
Jim Flynn6398a982020-05-27 17:05:21 +0100872 ProfilingGuid outputWorkloadGuid = VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
873 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD ENTITY OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000874
875 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000876 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
877 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100878 outputWorkloadGuid,
879 LabelsAndEventClasses::WORKLOAD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000880 LabelsAndEventClasses::TYPE_GUID,
881 readableData,
882 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100883 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD TYPE RELATIONSHIP OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000884
885 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000886 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100887 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD LABEL OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000888
889 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000890 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
891 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100892 outputWorkloadGuid,
893 backendIdLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000894 LabelsAndEventClasses::BACKENDID_GUID,
895 readableData,
896 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100897 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD BACKEND ID RELATIONSHIP OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000898
899 // Output layer - Output workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000900 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
901 EmptyOptional(),
902 output->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100903 outputWorkloadGuid,
904 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000905 readableData,
906 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100907 BOOST_TEST_MESSAGE("OUTPUT LAYER - OUTPUT WORKLOAD CHILD RELATIONSHIP OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000908
909 bufferManager.MarkRead(outputReadableBuffer);
David Monahan6198fe02019-12-02 08:35:43 +0000910
911 // Validate inference data
912 size = inferenceReadableBuffer->GetSize();
Jan Eilersa10e2a22020-03-26 12:04:54 +0000913
Finn Williams0a336dc2020-05-11 15:39:58 +0100914 BOOST_CHECK(size == 1228 + 10 * ThreadIdSize);
David Monahan6198fe02019-12-02 08:35:43 +0000915
916 readableData = inferenceReadableBuffer->GetReadableData();
917 BOOST_CHECK(readableData != nullptr);
918
919 offset = 0;
920
Keith Davis97da5e22020-03-05 16:25:28 +0000921 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100922 VerifyTimelineHeaderBinary(readableData, offset, 1220 + 10 * ThreadIdSize);
Jim Flynn6398a982020-05-27 17:05:21 +0100923 BOOST_TEST_MESSAGE("INFERENCE HEADER OK");
Keith Davis97da5e22020-03-05 16:25:28 +0000924
David Monahan6198fe02019-12-02 08:35:43 +0000925 // Inference timeline trace
926 // Inference entity
Jim Flynn6398a982020-05-27 17:05:21 +0100927 ProfilingGuid inferenceGuid = VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
928 BOOST_TEST_MESSAGE("INFERENCE ENTITY OK");
David Monahan6198fe02019-12-02 08:35:43 +0000929
930 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000931 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
932 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100933 inferenceGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000934 LabelsAndEventClasses::INFERENCE_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000935 LabelsAndEventClasses::TYPE_GUID,
936 readableData,
937 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100938 BOOST_TEST_MESSAGE("INFERENCE TYPE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000939
940 // Network - Inference relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000941 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
942 EmptyOptional(),
943 optNetGuid,
Jim Flynn6398a982020-05-27 17:05:21 +0100944 inferenceGuid,
945 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000946 readableData,
947 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100948 BOOST_TEST_MESSAGE("NETWORK - INFERENCE EXECUTION_OF RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000949
950 // Start Inference life
951 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +0100952 ProfilingGuid inferenceEventGuid = VerifyTimelineEventBinaryPacket(
953 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
954 BOOST_TEST_MESSAGE("INFERENCE START OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +0000955
956 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000957 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
958 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100959 inferenceGuid,
960 inferenceEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000961 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
962 readableData,
963 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100964 BOOST_TEST_MESSAGE("INFERENCE START OF LIFE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000965
966 // Execution
967 // Input workload execution
968 // Input workload execution entity
Jim Flynn6398a982020-05-27 17:05:21 +0100969 ProfilingGuid inputWorkloadExecutionGuid = VerifyTimelineEntityBinaryPacketData(
970 EmptyOptional(), readableData, offset);
971 BOOST_TEST_MESSAGE("INPUT WORKLOAD EXECUTION ENTITY OK");
David Monahan6198fe02019-12-02 08:35:43 +0000972
973 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000974 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
975 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100976 inputWorkloadExecutionGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000977 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000978 LabelsAndEventClasses::TYPE_GUID,
979 readableData,
980 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100981 BOOST_TEST_MESSAGE("INPUT WORKLOAD EXECUTION TYPE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000982
983 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000984 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
985 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100986 inferenceGuid,
987 inputWorkloadExecutionGuid,
988 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000989 readableData,
990 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100991 BOOST_TEST_MESSAGE("INPUT WORKLOAD - INPUT WORKLOAD EXECUTION RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000992
993 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000994 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
995 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100996 inputWorkloadGuid,
997 inputWorkloadExecutionGuid,
998 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000999 readableData,
1000 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001001 BOOST_TEST_MESSAGE("INPUT WORKLOAD - INPUT WORKLOAD EXECUTION RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001002
1003 // Start Input workload execution life
1004 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001005 ProfilingGuid inputWorkloadExecutionSOLEventId = VerifyTimelineEventBinaryPacket(
1006 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1007 BOOST_TEST_MESSAGE("INPUT WORKLOAD EXECUTION - START OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001008
1009 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001010 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1011 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001012 inputWorkloadExecutionGuid,
1013 inputWorkloadExecutionSOLEventId,
Keith Davis97da5e22020-03-05 16:25:28 +00001014 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1015 readableData,
1016 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001017 BOOST_TEST_MESSAGE("INPUT WORKLOAD EXECUTION - START OF LIFE EVENT RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001018
1019 // End of Input workload execution life
1020 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001021 ProfilingGuid inputWorkloadExecutionEOLEventId = VerifyTimelineEventBinaryPacket(
1022 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1023 BOOST_TEST_MESSAGE("INPUT WORKLOAD EXECUTION - END OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001024
1025 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001026 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1027 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001028 inputWorkloadExecutionGuid,
1029 inputWorkloadExecutionEOLEventId,
Keith Davis97da5e22020-03-05 16:25:28 +00001030 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1031 readableData,
1032 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001033 BOOST_TEST_MESSAGE("INPUT WORKLOAD EXECUTION - END OF LIFE EVENT RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001034
1035 // Conv2d workload execution
1036 // Conv2d workload execution entity
Jim Flynn6398a982020-05-27 17:05:21 +01001037 ProfilingGuid conv2DWorkloadExecutionGuid = VerifyTimelineEntityBinaryPacketData(
1038 EmptyOptional(), readableData, offset);
1039 BOOST_TEST_MESSAGE("CONV2D WORKLOAD EXECUTION ENTITY OK");
David Monahan6198fe02019-12-02 08:35:43 +00001040
1041 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001042 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1043 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001044 conv2DWorkloadExecutionGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001045 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001046 LabelsAndEventClasses::TYPE_GUID,
1047 readableData,
1048 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001049 BOOST_TEST_MESSAGE("CONV2D WORKLOAD EXECUTION TYPE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001050
1051 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001052 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1053 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001054 inferenceGuid,
1055 conv2DWorkloadExecutionGuid,
1056 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001057 readableData,
1058 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001059 BOOST_TEST_MESSAGE("INFERENCE - CONV2D WORKLOAD EXECUTION CHILD RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001060
1061 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001062 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1063 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001064 conv2DWorkloadGuid,
1065 conv2DWorkloadExecutionGuid,
1066 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001067 readableData,
1068 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001069 BOOST_TEST_MESSAGE("CONV2D WORKLOAD - CONV2D WORKLOAD EXECUTION RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001070
1071 // Start Conv2d workload execution life
1072 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001073 ProfilingGuid conv2DWorkloadExecutionSOLEventGuid = VerifyTimelineEventBinaryPacket(
1074 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1075 BOOST_TEST_MESSAGE("CONV2D WORKLOAD EXECUTION START OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001076
1077 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001078 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1079 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001080 conv2DWorkloadExecutionGuid,
1081 conv2DWorkloadExecutionSOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001082 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1083 readableData,
1084 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001085 BOOST_TEST_MESSAGE("CONV2D WORKLOAD EXECUTION START OF LIFE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001086
1087 // End of Conv2d workload execution life
1088 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001089 ProfilingGuid conv2DWorkloadExecutionEOLEventGuid = VerifyTimelineEventBinaryPacket(
1090 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1091 BOOST_TEST_MESSAGE("CONV2D WORKLOAD EXECUTION END OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001092
1093 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001094 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1095 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001096 conv2DWorkloadExecutionGuid,
1097 conv2DWorkloadExecutionEOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001098 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1099 readableData,
1100 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001101 BOOST_TEST_MESSAGE("CONV2D WORKLOAD EXECUTION END OF LIFE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001102
1103 // Activation workload execution
1104 // Activation workload execution entity
Jim Flynn6398a982020-05-27 17:05:21 +01001105 ProfilingGuid activationWorkloadExecutionGuid = VerifyTimelineEntityBinaryPacketData(
1106 EmptyOptional(), readableData, offset);
1107 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD EXECUTION ENTITY OK");
David Monahan6198fe02019-12-02 08:35:43 +00001108
1109 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001110 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1111 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001112 activationWorkloadExecutionGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001113 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001114 LabelsAndEventClasses::TYPE_GUID,
1115 readableData,
1116 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001117 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD EXECUTION TYPE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001118
1119 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001120 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1121 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001122 inferenceGuid,
1123 activationWorkloadExecutionGuid,
1124 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001125 readableData,
1126 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001127 BOOST_TEST_MESSAGE("INFERENCE - ACTIVATION WORKLOAD EXECUTION CHILD RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001128
1129 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001130 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1131 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001132 activationWorkloadGuid,
1133 activationWorkloadExecutionGuid,
1134 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001135 readableData,
1136 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001137 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD - ACTIVATION WORKLOAD EXECUTION RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001138
1139 // Start Activation workload execution life
1140 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001141 ProfilingGuid activationWorkloadExecutionSOLEventGuid = VerifyTimelineEventBinaryPacket(
1142 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1143 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD EXECUTION START OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001144
1145 // Activation workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001146 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1147 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001148 activationWorkloadExecutionGuid,
1149 activationWorkloadExecutionSOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001150 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1151 readableData,
1152 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001153 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD EXECUTION START OF LIFE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001154
1155 // End of Activation workload execution life
1156 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001157 ProfilingGuid activationWorkloadExecutionEOLEventGuid = VerifyTimelineEventBinaryPacket(
1158 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1159 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD EXECUTION END OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001160
1161 // Activation workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001162 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1163 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001164 activationWorkloadExecutionGuid,
1165 activationWorkloadExecutionEOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001166 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1167 readableData,
1168 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001169 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD EXECUTION END OF LIFE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001170
1171 // Output workload execution
1172 // Output workload execution entity
Jim Flynn6398a982020-05-27 17:05:21 +01001173 ProfilingGuid outputWorkloadExecutionGuid = VerifyTimelineEntityBinaryPacketData(
1174 EmptyOptional(), readableData, offset);
1175 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD EXECUTION ENTITY OK");
David Monahan6198fe02019-12-02 08:35:43 +00001176
1177 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001178 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1179 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001180 outputWorkloadExecutionGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001181 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001182 LabelsAndEventClasses::TYPE_GUID,
1183 readableData,
1184 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001185 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD EXECUTION TYPE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001186
1187 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001188 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1189 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001190 inferenceGuid,
1191 outputWorkloadExecutionGuid,
1192 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001193 readableData,
1194 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001195 BOOST_TEST_MESSAGE("INFERENCE - OUTPUT WORKLOAD EXECUTION CHILD RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001196
1197 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001198 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1199 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001200 outputWorkloadGuid,
1201 outputWorkloadExecutionGuid,
1202 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001203 readableData,
1204 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001205 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD - OUTPUT WORKLOAD EXECUTION EXECUTION_OF RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001206
1207 // Start Output workload execution life
1208 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001209 ProfilingGuid outputWorkloadExecutionSOLEventGuid = VerifyTimelineEventBinaryPacket(
1210 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1211 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD EXECUTION START OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001212
1213 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001214 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1215 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001216 outputWorkloadExecutionGuid,
1217 outputWorkloadExecutionSOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001218 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1219 readableData,
1220 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001221 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD EXECUTION - START OF LIFE EVENT RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001222
1223 // End of Normalize workload execution life
1224 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001225 ProfilingGuid outputWorkloadExecutionEOLEventGuid = VerifyTimelineEventBinaryPacket(
1226 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1227 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD EXECUTION END OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001228
1229 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001230 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1231 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001232 outputWorkloadExecutionGuid,
1233 outputWorkloadExecutionEOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001234 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1235 readableData,
1236 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001237 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD EXECUTION - END OF LIFE EVENT RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001238
1239 // End of Inference life
1240 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001241 ProfilingGuid inferenceEOLEventGuid = VerifyTimelineEventBinaryPacket(
1242 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1243 BOOST_TEST_MESSAGE("INFERENCE END OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001244
1245 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001246 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1247 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001248 inferenceGuid,
1249 inferenceEOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001250 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1251 readableData,
1252 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001253 BOOST_TEST_MESSAGE("INFERENCE - END OF LIFE EVENT RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001254
1255 bufferManager.MarkRead(inferenceReadableBuffer);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00001256}
Jim Flynn6398a982020-05-27 17:05:21 +01001257
Jim Flynn6398a982020-05-27 17:05:21 +01001258bool CompareOutput(std::vector<std::string> output, std::vector<std::string> expectedOutput)
1259{
1260 if (output.size() != expectedOutput.size())
1261 {
1262 std::cerr << "output has [" << output.size() << "] lines, expected was ["
1263 << expectedOutput.size() << "] lines" << std::endl;
1264 std::cerr << std::endl << "actual" << std::endl << std::endl;
1265 for (auto line : output)
1266 {
1267 std::cerr << line << std::endl;
1268 }
1269 std::cerr << std::endl << "expected" << std::endl << std::endl;
1270 for (auto line : expectedOutput)
1271 {
1272 std::cerr << line << std::endl;
1273 }
1274 return false;
1275 }
1276 bool bRet = true;
1277 for (unsigned long i = 0; i < output.size(); ++i)
1278 {
1279 if (output[i] != expectedOutput[i])
1280 {
1281 bRet = false;
1282 std::cerr << i << ": actual [" << output[i] << "] expected [" << expectedOutput[i] << "]" << std::endl;
1283 }
1284 }
1285 return bRet;
1286}