blob: 758d959b023e9b04e632e364828a9c0a9304b914 [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>
10#include <LabelsAndEventClasses.hpp>
11#include <ProfilingService.hpp>
Sadik Armaganea41b572020-03-19 18:16:46 +000012
13#include <test/TestUtils.hpp>
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000014
15#include <boost/test/unit_test.hpp>
16
Finn Williamsa0de0562020-04-22 12:27:37 +010017uint32_t GetStreamMetaDataPacketSize()
18{
19 uint32_t sizeUint32 = sizeof(uint32_t);
20 uint32_t payloadSize = 0;
21 payloadSize += boost::numeric_cast<uint32_t>(GetSoftwareInfo().size()) + 1;
22 payloadSize += boost::numeric_cast<uint32_t>(GetHardwareVersion().size()) + 1;
23 payloadSize += boost::numeric_cast<uint32_t>(GetSoftwareVersion().size()) + 1;
24 payloadSize += boost::numeric_cast<uint32_t>(GetProcessName().size()) + 1;
25
26 // Add packetVersionEntries
27 payloadSize += 6 * 2 * sizeUint32;
28 // Add packetVersionCountSize
29 payloadSize += sizeUint32;
30
31 uint32_t headerSize = 2 * sizeUint32;
32 uint32_t bodySize = 10 * sizeUint32;
33
34 return headerSize + bodySize + payloadSize;
35}
36
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000037inline unsigned int OffsetToNextWord(unsigned int numberOfBytes)
38{
39 unsigned int uint32_t_size = sizeof(uint32_t);
40
41 unsigned int remainder = numberOfBytes % uint32_t_size;
42 if (remainder == 0)
43 {
44 return numberOfBytes;
45 }
46
47 return numberOfBytes + uint32_t_size - remainder;
48}
49
Keith Davis97da5e22020-03-05 16:25:28 +000050void VerifyTimelineHeaderBinary(const unsigned char* readableData,
51 unsigned int& offset,
52 uint32_t packetDataLength)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000053{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +010054 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000055
56 // Utils
57 unsigned int uint32_t_size = sizeof(uint32_t);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000058
Keith Davis97da5e22020-03-05 16:25:28 +000059 // Check the TimelineEventClassBinaryPacket header
Finn Williams0a336dc2020-05-11 15:39:58 +010060 uint32_t timelineBinaryPacketHeaderWord0 = ReadUint32(readableData, offset);
61 uint32_t timelineBinaryPacketFamily = (timelineBinaryPacketHeaderWord0 >> 26) & 0x0000003F;
62 uint32_t timelineBinaryPacketClass = (timelineBinaryPacketHeaderWord0 >> 19) & 0x0000007F;
63 uint32_t timelineBinaryPacketType = (timelineBinaryPacketHeaderWord0 >> 16) & 0x00000007;
64 uint32_t timelineBinaryPacketStreamId = (timelineBinaryPacketHeaderWord0 >> 0) & 0x00000007;
65 BOOST_CHECK(timelineBinaryPacketFamily == 1);
66 BOOST_CHECK(timelineBinaryPacketClass == 0);
67 BOOST_CHECK(timelineBinaryPacketType == 1);
68 BOOST_CHECK(timelineBinaryPacketStreamId == 0);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000069 offset += uint32_t_size;
Finn Williams0a336dc2020-05-11 15:39:58 +010070 uint32_t timelineBinaryPacketHeaderWord1 = ReadUint32(readableData, offset);
71 uint32_t timelineBinaryPacketSequenceNumber = (timelineBinaryPacketHeaderWord1 >> 24) & 0x00000001;
72 uint32_t timelineBinaryPacketDataLength = (timelineBinaryPacketHeaderWord1 >> 0) & 0x00FFFFFF;
73 BOOST_CHECK(timelineBinaryPacketSequenceNumber == 0);
74 BOOST_CHECK(timelineBinaryPacketDataLength == packetDataLength);
Keith Davis97da5e22020-03-05 16:25:28 +000075 offset += uint32_t_size;
76}
77
Jim Flynn6398a982020-05-27 17:05:21 +010078ProfilingGuid VerifyTimelineLabelBinaryPacketData(Optional<ProfilingGuid> guid,
79 const std::string& label,
80 const unsigned char* readableData,
81 unsigned int& offset)
Keith Davis97da5e22020-03-05 16:25:28 +000082{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +010083 ARMNN_ASSERT(readableData);
Keith Davis97da5e22020-03-05 16:25:28 +000084
85 // Utils
86 unsigned int uint32_t_size = sizeof(uint32_t);
87 unsigned int uint64_t_size = sizeof(uint64_t);
88 unsigned int label_size = boost::numeric_cast<unsigned int>(label.size());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000089
90 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000091 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
92 BOOST_CHECK(eventClassDeclId == 0);
93
94 // Check the profiling GUID
95 offset += uint32_t_size;
96 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
97 if (guid.has_value())
98 {
99 BOOST_CHECK(readProfilingGuid == guid.value());
100 }
101 else
102 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000103 armnn::profiling::ProfilingService profilingService;
104 BOOST_CHECK(readProfilingGuid == profilingService.GetStaticId(label));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000105 }
106
107 // Check the SWTrace label
108 offset += uint64_t_size;
109 uint32_t swTraceLabelLength = ReadUint32(readableData, offset);
Keith Davis97da5e22020-03-05 16:25:28 +0000110 BOOST_CHECK(swTraceLabelLength == label_size + 1); // Label length including the null-terminator
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000111 offset += uint32_t_size;
112 BOOST_CHECK(std::memcmp(readableData + offset, // Offset to the label in the buffer
Keith Davis97da5e22020-03-05 16:25:28 +0000113 label.data(), // The original label
114 swTraceLabelLength - 1) == 0); // The length of the label
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000115
116 // SWTrace strings are written in blocks of words, so the offset has to be updated to the next whole word
117 offset += OffsetToNextWord(swTraceLabelLength);
Jim Flynn6398a982020-05-27 17:05:21 +0100118
119 ProfilingGuid labelGuid(readProfilingGuid);
120 return labelGuid;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000121}
122
Keith Davis97da5e22020-03-05 16:25:28 +0000123void VerifyTimelineEventClassBinaryPacketData(ProfilingGuid guid,
Jim Flynn1892d212020-05-26 21:10:49 +0100124 ProfilingGuid nameGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000125 const unsigned char* readableData,
126 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000127{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100128 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000129
130 // Utils
131 unsigned int uint32_t_size = sizeof(uint32_t);
132 unsigned int uint64_t_size = sizeof(uint64_t);
133
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000134 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000135 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
136 BOOST_CHECK(eventClassDeclId == 2);
137
138 // Check the profiling GUID
139 offset += uint32_t_size;
140 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
141 BOOST_CHECK(readProfilingGuid == guid);
142
Jim Flynn1892d212020-05-26 21:10:49 +0100143 offset += uint64_t_size;
144 uint64_t readProfiilngNameGuid = ReadUint64(readableData, offset);
145 BOOST_CHECK(readProfiilngNameGuid == nameGuid);
146
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000147 // Update the offset to allow parsing to be continued after this function returns
148 offset += uint64_t_size;
149}
150
Keith Davis97da5e22020-03-05 16:25:28 +0000151void VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType relationshipType,
Jim Flynn6398a982020-05-27 17:05:21 +0100152 Optional<ProfilingGuid> relationshipGuid,
153 Optional<ProfilingGuid> headGuid,
154 Optional<ProfilingGuid> tailGuid,
155 Optional<ProfilingGuid> attributeGuid,
156 const unsigned char* readableData,
157 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000158{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100159 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000160
161 uint32_t relationshipTypeUint = 0;
162 switch (relationshipType)
163 {
164 case ProfilingRelationshipType::RetentionLink:
165 relationshipTypeUint = 0;
166 break;
167 case ProfilingRelationshipType::ExecutionLink:
168 relationshipTypeUint = 1;
169 break;
170 case ProfilingRelationshipType::DataLink:
171 relationshipTypeUint = 2;
172 break;
173 case ProfilingRelationshipType::LabelLink:
174 relationshipTypeUint = 3;
175 break;
176 default:
177 BOOST_ERROR("Unknown relationship type");
178 }
179
180 // Utils
181 unsigned int uint32_t_size = sizeof(uint32_t);
182 unsigned int uint64_t_size = sizeof(uint64_t);
183
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000184 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000185 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
186 BOOST_CHECK(eventClassDeclId == 3);
187
188 // Check the relationship type
189 offset += uint32_t_size;
190 uint32_t readRelationshipTypeUint = ReadUint32(readableData, offset);
191 BOOST_CHECK(readRelationshipTypeUint == relationshipTypeUint);
192
193 // Check the relationship GUID
194 offset += uint32_t_size;
195 uint64_t readRelationshipGuid = ReadUint64(readableData, offset);
196 if (relationshipGuid.has_value())
197 {
198 BOOST_CHECK(readRelationshipGuid == relationshipGuid.value());
199 }
200 else
201 {
202 BOOST_CHECK(readRelationshipGuid != ProfilingGuid(0));
203 }
204
Jim Flynn6398a982020-05-27 17:05:21 +0100205 // Check the head GUID of the relationship
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000206 offset += uint64_t_size;
207 uint64_t readHeadRelationshipGuid = ReadUint64(readableData, offset);
208 if (headGuid.has_value())
209 {
210 BOOST_CHECK(readHeadRelationshipGuid == headGuid.value());
211 }
212 else
213 {
214 BOOST_CHECK(readHeadRelationshipGuid != ProfilingGuid(0));
215 }
216
Jim Flynn6398a982020-05-27 17:05:21 +0100217 // Check the tail GUID of the relationship
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000218 offset += uint64_t_size;
219 uint64_t readTailRelationshipGuid = ReadUint64(readableData, offset);
220 if (tailGuid.has_value())
221 {
222 BOOST_CHECK(readTailRelationshipGuid == tailGuid.value());
223 }
224 else
225 {
226 BOOST_CHECK(readTailRelationshipGuid != ProfilingGuid(0));
227 }
228
Jim Flynn6398a982020-05-27 17:05:21 +0100229 // Check the attribute GUID of the relationship
Finn Williams0a336dc2020-05-11 15:39:58 +0100230 offset += uint64_t_size;
231 uint64_t readAttributeRelationshipGuid = ReadUint64(readableData, offset);
232 if (attributeGuid.has_value())
233 {
234 BOOST_CHECK(readAttributeRelationshipGuid == attributeGuid.value());
235 }
236 else
237 {
238 BOOST_CHECK(readAttributeRelationshipGuid == ProfilingGuid(0));
239 }
240
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000241 // Update the offset to allow parsing to be continued after this function returns
242 offset += uint64_t_size;
243}
244
Jim Flynn6398a982020-05-27 17:05:21 +0100245ProfilingGuid VerifyTimelineEntityBinaryPacketData(Optional<ProfilingGuid> guid,
246 const unsigned char* readableData,
247 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000248{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100249 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000250
251 // Utils
252 unsigned int uint32_t_size = sizeof(uint32_t);
253 unsigned int uint64_t_size = sizeof(uint64_t);
254
255 // Reading TimelineEntityClassBinaryPacket
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000256 // Check the decl_id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000257 uint32_t entityDeclId = ReadUint32(readableData, offset);
258 BOOST_CHECK(entityDeclId == 1);
259
260 // Check the profiling GUID
261 offset += uint32_t_size;
262 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
263
264 if (guid.has_value())
265 {
266 BOOST_CHECK(readProfilingGuid == guid.value());
267 }
268 else
269 {
270 BOOST_CHECK(readProfilingGuid != ProfilingGuid(0));
271 }
272
273 offset += uint64_t_size;
Jim Flynn6398a982020-05-27 17:05:21 +0100274
275 ProfilingGuid entityGuid(readProfilingGuid);
276 return entityGuid;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000277}
278
Jim Flynn6398a982020-05-27 17:05:21 +0100279ProfilingGuid VerifyTimelineEventBinaryPacket(Optional<uint64_t> timestamp,
280 Optional<std::thread::id> threadId,
281 Optional<ProfilingGuid> eventGuid,
282 const unsigned char* readableData,
283 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000284{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100285 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000286
287 // Utils
288 unsigned int uint32_t_size = sizeof(uint32_t);
289 unsigned int uint64_t_size = sizeof(uint64_t);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000290
291 // Reading TimelineEventBinaryPacket
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000292 // Check the decl_id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000293 uint32_t entityDeclId = ReadUint32(readableData, offset);
294 BOOST_CHECK(entityDeclId == 4);
295
296 // Check the timestamp
297 offset += uint32_t_size;
298 uint64_t readTimestamp = ReadUint64(readableData, offset);
299 if (timestamp.has_value())
300 {
301 BOOST_CHECK(readTimestamp == timestamp.value());
302 }
303 else
304 {
305 BOOST_CHECK(readTimestamp != 0);
306 }
307
308 // Check the thread id
309 offset += uint64_t_size;
Colm Donelan5bb3d8a2020-05-12 16:36:46 +0100310 std::vector<uint8_t> readThreadId(ThreadIdSize, 0);
311 ReadBytes(readableData, offset, ThreadIdSize, readThreadId.data());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000312 if (threadId.has_value())
313 {
314 BOOST_CHECK(readThreadId == threadId.value());
315 }
316 else
317 {
318 BOOST_CHECK(readThreadId == std::this_thread::get_id());
319 }
320
321 // Check the event GUID
Colm Donelan5bb3d8a2020-05-12 16:36:46 +0100322 offset += ThreadIdSize;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000323 uint64_t readEventGuid = ReadUint64(readableData, offset);
324 if (eventGuid.has_value())
325 {
326 BOOST_CHECK(readEventGuid == eventGuid.value());
327 }
328 else
329 {
330 BOOST_CHECK(readEventGuid != ProfilingGuid(0));
331 }
332
333 offset += uint64_t_size;
Jim Flynn6398a982020-05-27 17:05:21 +0100334
335 ProfilingGuid eventid(readEventGuid);
336 return eventid;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000337}
338
339void VerifyPostOptimisationStructureTestImpl(armnn::BackendId backendId)
340{
341 using namespace armnn;
342
343 // Create runtime in which test will run
344 armnn::IRuntime::CreationOptions options;
345 options.m_ProfilingOptions.m_EnableProfiling = true;
Keith Davis33ed2212020-03-30 10:43:41 +0100346 options.m_ProfilingOptions.m_TimelineEnabled = true;
Sadik Armagan3184c902020-03-18 10:57:30 +0000347 armnn::Runtime runtime(options);
Keith Davis33ed2212020-03-30 10:43:41 +0100348 GetProfilingService(&runtime).ResetExternalProfilingOptions(options.m_ProfilingOptions, false);
349
350 profiling::ProfilingServiceRuntimeHelper profilingServiceHelper(GetProfilingService(&runtime));
351 profilingServiceHelper.ForceTransitionToState(ProfilingState::NotConnected);
352 profilingServiceHelper.ForceTransitionToState(ProfilingState::WaitingForAck);
353 profilingServiceHelper.ForceTransitionToState(ProfilingState::Active);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000354
355 // build up the structure of the network
356 INetworkPtr net(INetwork::Create());
357
358 // Convolution details
359 TensorInfo inputInfo({ 1, 2, 5, 1 }, DataType::Float32);
Keith Davis97da5e22020-03-05 16:25:28 +0000360 TensorInfo weightInfo({ 3, 2, 3, 1 }, DataType::Float32);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000361 TensorInfo biasInfo({ 3 }, DataType::Float32);
Keith Davis97da5e22020-03-05 16:25:28 +0000362 TensorInfo outputInfo({ 1, 3, 7, 1 }, DataType::Float32);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000363 std::vector<float> weightsData{
Keith Davis97da5e22020-03-05 16:25:28 +0000364 1.0f, 0.0f, 0.0f,
365 0.0f, 2.0f, -1.5f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000366
Keith Davis97da5e22020-03-05 16:25:28 +0000367 0.0f, 0.0f, 0.0f,
368 0.2f, 0.2f, 0.2f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000369
Keith Davis97da5e22020-03-05 16:25:28 +0000370 0.5f, 0.0f, 0.5f,
371 0.0f, -1.0f, 0.0f
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000372 };
373 ConstTensor weights(weightInfo, weightsData);
374
375 Optional<ConstTensor> optionalBiases;
376 std::vector<float> biasesData{ 1.0f, 0.0f, 0.0f };
377 ConstTensor biases(biasInfo, biasesData);
378 optionalBiases = Optional<ConstTensor>(biases);
379
380 // Input layer
381 IConnectableLayer* input = net->AddInputLayer(0, "input");
382
383 // Convolution2d layer
384 Convolution2dDescriptor conv2dDesc;
Keith Davis97da5e22020-03-05 16:25:28 +0000385 conv2dDesc.m_StrideX = 1;
386 conv2dDesc.m_StrideY = 1;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000387 conv2dDesc.m_PadLeft = 0;
388 conv2dDesc.m_PadRight = 0;
389 conv2dDesc.m_PadTop = 2;
390 conv2dDesc.m_PadBottom = 2;
391 conv2dDesc.m_BiasEnabled = true;
392 IConnectableLayer* conv2d = net->AddConvolution2dLayer(conv2dDesc, weights, optionalBiases);
393
394 // Activation layer
395 armnn::ActivationDescriptor activationDesc;
396 armnn::IConnectableLayer* const activation = net->AddActivationLayer(activationDesc, "activation");
397
398 // Output layer
399 IConnectableLayer* output = net->AddOutputLayer(0, "output");
400
401 input->GetOutputSlot(0).Connect(conv2d->GetInputSlot(0));
402 conv2d->GetOutputSlot(0).Connect(activation->GetInputSlot(0));
403 activation->GetOutputSlot(0).Connect(output->GetInputSlot(0));
404
405 input->GetOutputSlot(0).SetTensorInfo(inputInfo);
406 conv2d->GetOutputSlot(0).SetTensorInfo(outputInfo);
407 activation->GetOutputSlot(0).SetTensorInfo(outputInfo);
408
409 // optimize the network
410 std::vector<armnn::BackendId> backends = { backendId };
Sadik Armagan3184c902020-03-18 10:57:30 +0000411 IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime.GetDeviceSpec());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000412
413 ProfilingGuid optNetGuid = optNet->GetGuid();
414
415 // Load it into the runtime. It should success.
416 armnn::NetworkId netId;
Sadik Armagan3184c902020-03-18 10:57:30 +0000417 BOOST_TEST(runtime.LoadNetwork(netId, std::move(optNet)) == Status::Success);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000418
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000419 profiling::BufferManager& bufferManager = profilingServiceHelper.GetProfilingBufferManager();
420 auto readableBuffer = bufferManager.GetReadableBuffer();
421
422 // Profiling is enable, the post-optimisation structure should be created
423 BOOST_CHECK(readableBuffer != nullptr);
424
425 unsigned int size = readableBuffer->GetSize();
Jim Flynn6398a982020-05-27 17:05:21 +0100426 BOOST_CHECK(size == 1124);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000427
428 const unsigned char* readableData = readableBuffer->GetReadableData();
429 BOOST_CHECK(readableData != nullptr);
430
431 unsigned int offset = 0;
432
Keith Davis97da5e22020-03-05 16:25:28 +0000433 // Verify Header
Jim Flynn6398a982020-05-27 17:05:21 +0100434 VerifyTimelineHeaderBinary(readableData, offset, 1116);
435 BOOST_TEST_MESSAGE("HEADER OK");
Keith Davis97da5e22020-03-05 16:25:28 +0000436
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000437 // Post-optimisation network
438 // Network entity
Keith Davis97da5e22020-03-05 16:25:28 +0000439 VerifyTimelineEntityBinaryPacketData(optNetGuid, readableData, offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100440 BOOST_TEST_MESSAGE("NETWORK ENTITY OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000441
442 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000443 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
444 EmptyOptional(),
445 optNetGuid,
Jim Flynn6398a982020-05-27 17:05:21 +0100446 LabelsAndEventClasses::NETWORK_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000447 LabelsAndEventClasses::TYPE_GUID,
448 readableData,
449 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100450 BOOST_TEST_MESSAGE("NETWORK TYPE RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000451
452 // Input layer
453 // Input layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000454 VerifyTimelineEntityBinaryPacketData(input->GetGuid(), readableData, offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100455 BOOST_TEST_MESSAGE("INPUT ENTITY OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000456
457 // Name Entity
Jim Flynn6398a982020-05-27 17:05:21 +0100458 ProfilingGuid inputLabelGuid = VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "input", readableData, offset);
459 BOOST_TEST_MESSAGE("INPUT NAME LABEL OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000460
461 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000462 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
463 EmptyOptional(),
464 input->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100465 inputLabelGuid,
Finn Williams0a336dc2020-05-11 15:39:58 +0100466 LabelsAndEventClasses::NAME_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000467 readableData,
468 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100469 BOOST_TEST_MESSAGE("INPUT NAME RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000470
471 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000472 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
473 EmptyOptional(),
474 input->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100475 LabelsAndEventClasses::LAYER_GUID,
Finn Williams0a336dc2020-05-11 15:39:58 +0100476 LabelsAndEventClasses::TYPE_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000477 readableData,
478 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100479 BOOST_TEST_MESSAGE("INPUT TYPE RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000480
481 // Network - Input layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000482 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
483 EmptyOptional(),
484 optNetGuid,
485 input->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100486 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000487 readableData,
488 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100489 BOOST_TEST_MESSAGE("NETWORK - INPUT CHILD RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000490
491 // Conv2d layer
492 // Conv2d layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000493 VerifyTimelineEntityBinaryPacketData(conv2d->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000494
495 // Name entity
Jim Flynn6398a982020-05-27 17:05:21 +0100496 ProfilingGuid conv2dNameLabelGuid = VerifyTimelineLabelBinaryPacketData(
497 EmptyOptional(), "<Unnamed>", readableData, offset);
498 BOOST_TEST_MESSAGE("CONV2D NAME LABEL OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000499
500 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000501 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
502 EmptyOptional(),
503 conv2d->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100504 conv2dNameLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000505 LabelsAndEventClasses::NAME_GUID,
506 readableData,
507 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100508 BOOST_TEST_MESSAGE("CONV2D NAME RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000509
510 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000511 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
512 EmptyOptional(),
513 conv2d->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100514 LabelsAndEventClasses::LAYER_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000515 LabelsAndEventClasses::TYPE_GUID,
516 readableData,
517 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100518 BOOST_TEST_MESSAGE("CONV2D TYPE RELATIONSHIP OK");
Finn Williams0a336dc2020-05-11 15:39:58 +0100519
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000520 // Network - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000521 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
522 EmptyOptional(),
523 optNetGuid,
524 conv2d->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100525 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000526 readableData,
527 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100528 BOOST_TEST_MESSAGE("NETWORK - CONV2D CHILD RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000529
530 // Input layer - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000531 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
532 EmptyOptional(),
533 input->GetGuid(),
534 conv2d->GetGuid(),
Keith Davis97da5e22020-03-05 16:25:28 +0000535 LabelsAndEventClasses::CONNECTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000536 readableData,
537 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100538 BOOST_TEST_MESSAGE("INPUT - CONV2D LAYER CONNECTION OK");
Finn Williams0a336dc2020-05-11 15:39:58 +0100539
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000540 // Conv2d workload
541 // Conv2d workload entity
Jim Flynn6398a982020-05-27 17:05:21 +0100542 ProfilingGuid conv2DWorkloadGuid = VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
543 BOOST_TEST_MESSAGE("CONV2D WORKLOAD ENTITY OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000544
545 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000546 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
547 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100548 conv2DWorkloadGuid,
549 LabelsAndEventClasses::WORKLOAD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000550 LabelsAndEventClasses::TYPE_GUID,
551 readableData,
552 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100553 BOOST_TEST_MESSAGE("CONV2D WORKLOAD TYPE RELATIONSHIP OK");
Finn Williams0a336dc2020-05-11 15:39:58 +0100554
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000555 // BackendId entity
Jim Flynn6398a982020-05-27 17:05:21 +0100556 ProfilingGuid backendIdLabelGuid = VerifyTimelineLabelBinaryPacketData(
557 EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000558
559 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000560 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
561 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100562 conv2DWorkloadGuid,
563 backendIdLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000564 LabelsAndEventClasses::BACKENDID_GUID,
565 readableData,
566 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100567 BOOST_TEST_MESSAGE("CONV2D WORKLOAD BACKEND ID RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000568
Finn Williams0a336dc2020-05-11 15:39:58 +0100569
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000570 // Conv2d layer - Conv2d workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000571 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
572 EmptyOptional(),
573 conv2d->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100574 conv2DWorkloadGuid,
575 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000576 readableData,
577 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100578 BOOST_TEST_MESSAGE("CONV2D LAYER - WORKLOAD CHILD RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000579
580 // Activation layer
581 // Activation layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000582 VerifyTimelineEntityBinaryPacketData(activation->GetGuid(), readableData, offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100583 BOOST_TEST_MESSAGE("ACTIVATION ENTITY OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000584
585 // Name entity
Jim Flynn6398a982020-05-27 17:05:21 +0100586 ProfilingGuid activationLabelGuid = VerifyTimelineLabelBinaryPacketData(
587 EmptyOptional(), "activation", readableData, offset);
588 BOOST_TEST_MESSAGE("ACTIVATION NAME LABEL OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000589
590 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000591 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
592 EmptyOptional(),
593 activation->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100594 activationLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000595 LabelsAndEventClasses::NAME_GUID,
596 readableData,
597 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100598 BOOST_TEST_MESSAGE("ACTIVATION LAYER - NAME RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000599
600 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000601 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
602 EmptyOptional(),
603 activation->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100604 LabelsAndEventClasses::LAYER_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000605 LabelsAndEventClasses::TYPE_GUID,
606 readableData,
607 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100608 BOOST_TEST_MESSAGE("ACTIVATION LAYER TYPE RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000609
610 // Network - Activation layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000611 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
612 EmptyOptional(),
613 optNetGuid,
614 activation->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100615 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000616 readableData,
617 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100618 BOOST_TEST_MESSAGE("NETWORK - ACTIVATION LAYER CHILD RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000619
620 // Conv2d layer - Activation layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000621 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
622 EmptyOptional(),
623 conv2d->GetGuid(),
624 activation->GetGuid(),
Keith Davis97da5e22020-03-05 16:25:28 +0000625 LabelsAndEventClasses::CONNECTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000626 readableData,
627 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100628 BOOST_TEST_MESSAGE("CONV2D LAYER - ACTIVATION LAYER CONNECTION OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000629
630 // Activation workload
631 // Activation workload entity
Jim Flynn6398a982020-05-27 17:05:21 +0100632 ProfilingGuid activationWorkloadGuid = VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
633 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD ENTITY OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000634
635 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000636 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
637 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100638 activationWorkloadGuid,
639 LabelsAndEventClasses::WORKLOAD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000640 LabelsAndEventClasses::TYPE_GUID,
641 readableData,
642 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100643 BOOST_TEST_MESSAGE("ACTIVATION WORKLAD TYPE RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000644
645 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000646 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100647 BOOST_TEST_MESSAGE("BACKEND ID LABEL OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000648
649 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000650 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
651 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100652 activationWorkloadGuid,
653 backendIdLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000654 LabelsAndEventClasses::BACKENDID_GUID,
655 readableData,
656 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100657 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD BACKEND ID RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000658
659 // Activation layer - Activation workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000660 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
661 EmptyOptional(),
662 activation->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100663 activationWorkloadGuid,
664 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000665 readableData,
666 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100667 BOOST_TEST_MESSAGE("ACTIVATION LAYER - WORKLOAD CHILD RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000668
669 // Output layer
670 // Output layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000671 VerifyTimelineEntityBinaryPacketData(output->GetGuid(), readableData, offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100672 BOOST_TEST_MESSAGE("OUTPUT LAYER ENTITY OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000673
674 // Name entity
Jim Flynn6398a982020-05-27 17:05:21 +0100675 ProfilingGuid outputLabelGuid = VerifyTimelineLabelBinaryPacketData(
676 EmptyOptional(), "output", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000677
678 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000679 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
680 EmptyOptional(),
681 output->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100682 outputLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000683 LabelsAndEventClasses::NAME_GUID,
684 readableData,
685 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100686 BOOST_TEST_MESSAGE("OUTPUT LAYER NAME RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000687
688 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000689 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
690 EmptyOptional(),
691 output->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100692 LabelsAndEventClasses::LAYER_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000693 LabelsAndEventClasses::TYPE_GUID,
694 readableData,
695 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100696 BOOST_TEST_MESSAGE("OUTPUT LAYER TYPE RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000697
698 // Network - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000699 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
700 EmptyOptional(),
701 optNetGuid,
702 output->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100703 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000704 readableData,
705 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100706 BOOST_TEST_MESSAGE("NETWORK - OUTPUT LAYER CHILD RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000707
708 // Activation layer - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000709 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
710 EmptyOptional(),
711 activation->GetGuid(),
712 output->GetGuid(),
Keith Davis97da5e22020-03-05 16:25:28 +0000713 LabelsAndEventClasses::CONNECTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000714 readableData,
715 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100716 BOOST_TEST_MESSAGE("ACTIVATION LAYER - OUTPUT LAYER CONNECTION OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000717
718 bufferManager.MarkRead(readableBuffer);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000719
720 // Creates structures for input & output.
721 std::vector<float> inputData(inputInfo.GetNumElements());
722 std::vector<float> outputData(outputInfo.GetNumElements());
723
724 InputTensors inputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000725 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000726 {0, ConstTensor(runtime.GetInputTensorInfo(netId, 0), inputData.data())}
Keith Davis97da5e22020-03-05 16:25:28 +0000727 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000728 OutputTensors outputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000729 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000730 {0, Tensor(runtime.GetOutputTensorInfo(netId, 0), outputData.data())}
Keith Davis97da5e22020-03-05 16:25:28 +0000731 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000732
733 // Does the inference.
Sadik Armagan3184c902020-03-18 10:57:30 +0000734 runtime.EnqueueWorkload(netId, inputTensors, outputTensors);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000735
Finn Williamsb6a402f2020-03-24 13:46:22 +0000736 // Get readable buffer for input workload
737 auto inputReadableBuffer = bufferManager.GetReadableBuffer();
738 BOOST_CHECK(inputReadableBuffer != nullptr);
David Monahan6198fe02019-12-02 08:35:43 +0000739
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000740 // Get readable buffer for output workload
741 auto outputReadableBuffer = bufferManager.GetReadableBuffer();
742 BOOST_CHECK(outputReadableBuffer != nullptr);
743
Finn Williamsb6a402f2020-03-24 13:46:22 +0000744 // Get readable buffer for inference timeline
745 auto inferenceReadableBuffer = bufferManager.GetReadableBuffer();
746 BOOST_CHECK(inferenceReadableBuffer != nullptr);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000747
748 // Validate input workload data
749 size = inputReadableBuffer->GetSize();
Finn Williams0a336dc2020-05-11 15:39:58 +0100750 BOOST_CHECK(size == 164);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000751
752 readableData = inputReadableBuffer->GetReadableData();
753 BOOST_CHECK(readableData != nullptr);
754
755 offset = 0;
756
Keith Davis97da5e22020-03-05 16:25:28 +0000757 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100758 VerifyTimelineHeaderBinary(readableData, offset, 156);
Jim Flynn6398a982020-05-27 17:05:21 +0100759 BOOST_TEST_MESSAGE("INPUT WORKLOAD HEADER OK");
Keith Davis97da5e22020-03-05 16:25:28 +0000760
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000761 // Input workload
762 // Input workload entity
Jim Flynn6398a982020-05-27 17:05:21 +0100763 ProfilingGuid inputWorkloadGuid = VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
764 BOOST_TEST_MESSAGE("INPUT WORKLOAD TYPE RELATIONSHIP OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000765
766 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000767 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
768 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100769 inputWorkloadGuid,
770 LabelsAndEventClasses::WORKLOAD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000771 LabelsAndEventClasses::TYPE_GUID,
772 readableData,
773 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100774 BOOST_TEST_MESSAGE("INPUT WORKLOAD TYPE RELATIONSHIP OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000775
776 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000777 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000778
779 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000780 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
781 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100782 inputWorkloadGuid,
783 backendIdLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000784 LabelsAndEventClasses::BACKENDID_GUID,
785 readableData,
786 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100787 BOOST_TEST_MESSAGE("INPUT WORKLOAD BACKEND ID RELATIONSHIP OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000788
789 // Input layer - Input workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000790 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
791 EmptyOptional(),
792 input->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100793 inputWorkloadGuid,
794 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000795 readableData,
796 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100797 BOOST_TEST_MESSAGE("INPUT LAYER - INPUT WORKLOAD CHILD RELATIONSHIP OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000798
799 bufferManager.MarkRead(inputReadableBuffer);
800
801 // Validate output workload data
802 size = outputReadableBuffer->GetSize();
Finn Williams0a336dc2020-05-11 15:39:58 +0100803 BOOST_CHECK(size == 164);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000804
805 readableData = outputReadableBuffer->GetReadableData();
806 BOOST_CHECK(readableData != nullptr);
807
808 offset = 0;
809
Keith Davis97da5e22020-03-05 16:25:28 +0000810 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100811 VerifyTimelineHeaderBinary(readableData, offset, 156);
Jim Flynn6398a982020-05-27 17:05:21 +0100812 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD HEADER OK");
Keith Davis97da5e22020-03-05 16:25:28 +0000813
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000814 // Output workload
815 // Output workload entity
Jim Flynn6398a982020-05-27 17:05:21 +0100816 ProfilingGuid outputWorkloadGuid = VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
817 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD ENTITY OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000818
819 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000820 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
821 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100822 outputWorkloadGuid,
823 LabelsAndEventClasses::WORKLOAD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000824 LabelsAndEventClasses::TYPE_GUID,
825 readableData,
826 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100827 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD TYPE RELATIONSHIP OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000828
829 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000830 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100831 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD LABEL OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000832
833 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000834 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
835 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100836 outputWorkloadGuid,
837 backendIdLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000838 LabelsAndEventClasses::BACKENDID_GUID,
839 readableData,
840 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100841 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD BACKEND ID RELATIONSHIP OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000842
843 // Output layer - Output workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000844 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
845 EmptyOptional(),
846 output->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100847 outputWorkloadGuid,
848 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000849 readableData,
850 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100851 BOOST_TEST_MESSAGE("OUTPUT LAYER - OUTPUT WORKLOAD CHILD RELATIONSHIP OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000852
853 bufferManager.MarkRead(outputReadableBuffer);
David Monahan6198fe02019-12-02 08:35:43 +0000854
855 // Validate inference data
856 size = inferenceReadableBuffer->GetSize();
Jan Eilersa10e2a22020-03-26 12:04:54 +0000857
Finn Williams0a336dc2020-05-11 15:39:58 +0100858 BOOST_CHECK(size == 1228 + 10 * ThreadIdSize);
David Monahan6198fe02019-12-02 08:35:43 +0000859
860 readableData = inferenceReadableBuffer->GetReadableData();
861 BOOST_CHECK(readableData != nullptr);
862
863 offset = 0;
864
Keith Davis97da5e22020-03-05 16:25:28 +0000865 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100866 VerifyTimelineHeaderBinary(readableData, offset, 1220 + 10 * ThreadIdSize);
Jim Flynn6398a982020-05-27 17:05:21 +0100867 BOOST_TEST_MESSAGE("INFERENCE HEADER OK");
Keith Davis97da5e22020-03-05 16:25:28 +0000868
David Monahan6198fe02019-12-02 08:35:43 +0000869 // Inference timeline trace
870 // Inference entity
Jim Flynn6398a982020-05-27 17:05:21 +0100871 ProfilingGuid inferenceGuid = VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
872 BOOST_TEST_MESSAGE("INFERENCE ENTITY OK");
David Monahan6198fe02019-12-02 08:35:43 +0000873
874 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000875 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
876 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100877 inferenceGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000878 LabelsAndEventClasses::INFERENCE_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000879 LabelsAndEventClasses::TYPE_GUID,
880 readableData,
881 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100882 BOOST_TEST_MESSAGE("INFERENCE TYPE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000883
884 // Network - Inference relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000885 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
886 EmptyOptional(),
887 optNetGuid,
Jim Flynn6398a982020-05-27 17:05:21 +0100888 inferenceGuid,
889 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000890 readableData,
891 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100892 BOOST_TEST_MESSAGE("NETWORK - INFERENCE EXECUTION_OF RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000893
894 // Start Inference life
895 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +0100896 ProfilingGuid inferenceEventGuid = VerifyTimelineEventBinaryPacket(
897 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
898 BOOST_TEST_MESSAGE("INFERENCE START OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +0000899
900 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000901 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
902 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100903 inferenceGuid,
904 inferenceEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000905 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
906 readableData,
907 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100908 BOOST_TEST_MESSAGE("INFERENCE START OF LIFE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000909
910 // Execution
911 // Input workload execution
912 // Input workload execution entity
Jim Flynn6398a982020-05-27 17:05:21 +0100913 ProfilingGuid inputWorkloadExecutionGuid = VerifyTimelineEntityBinaryPacketData(
914 EmptyOptional(), readableData, offset);
915 BOOST_TEST_MESSAGE("INPUT WORKLOAD EXECUTION ENTITY OK");
David Monahan6198fe02019-12-02 08:35:43 +0000916
917 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000918 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
919 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100920 inputWorkloadExecutionGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000921 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000922 LabelsAndEventClasses::TYPE_GUID,
923 readableData,
924 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100925 BOOST_TEST_MESSAGE("INPUT WORKLOAD EXECUTION TYPE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000926
927 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000928 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
929 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100930 inferenceGuid,
931 inputWorkloadExecutionGuid,
932 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000933 readableData,
934 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100935 BOOST_TEST_MESSAGE("INPUT WORKLOAD - INPUT WORKLOAD EXECUTION RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000936
937 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000938 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
939 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100940 inputWorkloadGuid,
941 inputWorkloadExecutionGuid,
942 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000943 readableData,
944 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100945 BOOST_TEST_MESSAGE("INPUT WORKLOAD - INPUT WORKLOAD EXECUTION RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000946
947 // Start Input workload execution life
948 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +0100949 ProfilingGuid inputWorkloadExecutionSOLEventId = VerifyTimelineEventBinaryPacket(
950 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
951 BOOST_TEST_MESSAGE("INPUT WORKLOAD EXECUTION - START OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +0000952
953 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000954 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
955 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100956 inputWorkloadExecutionGuid,
957 inputWorkloadExecutionSOLEventId,
Keith Davis97da5e22020-03-05 16:25:28 +0000958 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
959 readableData,
960 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100961 BOOST_TEST_MESSAGE("INPUT WORKLOAD EXECUTION - START OF LIFE EVENT RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000962
963 // End of Input workload execution life
964 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +0100965 ProfilingGuid inputWorkloadExecutionEOLEventId = VerifyTimelineEventBinaryPacket(
966 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
967 BOOST_TEST_MESSAGE("INPUT WORKLOAD EXECUTION - END OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +0000968
969 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000970 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
971 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100972 inputWorkloadExecutionGuid,
973 inputWorkloadExecutionEOLEventId,
Keith Davis97da5e22020-03-05 16:25:28 +0000974 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
975 readableData,
976 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100977 BOOST_TEST_MESSAGE("INPUT WORKLOAD EXECUTION - END OF LIFE EVENT RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000978
979 // Conv2d workload execution
980 // Conv2d workload execution entity
Jim Flynn6398a982020-05-27 17:05:21 +0100981 ProfilingGuid conv2DWorkloadExecutionGuid = VerifyTimelineEntityBinaryPacketData(
982 EmptyOptional(), readableData, offset);
983 BOOST_TEST_MESSAGE("CONV2D WORKLOAD EXECUTION ENTITY OK");
David Monahan6198fe02019-12-02 08:35:43 +0000984
985 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000986 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
987 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100988 conv2DWorkloadExecutionGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000989 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000990 LabelsAndEventClasses::TYPE_GUID,
991 readableData,
992 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100993 BOOST_TEST_MESSAGE("CONV2D WORKLOAD EXECUTION TYPE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000994
995 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000996 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
997 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100998 inferenceGuid,
999 conv2DWorkloadExecutionGuid,
1000 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001001 readableData,
1002 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001003 BOOST_TEST_MESSAGE("INFERENCE - CONV2D WORKLOAD EXECUTION CHILD RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001004
1005 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001006 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1007 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001008 conv2DWorkloadGuid,
1009 conv2DWorkloadExecutionGuid,
1010 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001011 readableData,
1012 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001013 BOOST_TEST_MESSAGE("CONV2D WORKLOAD - CONV2D WORKLOAD EXECUTION RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001014
1015 // Start Conv2d workload execution life
1016 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001017 ProfilingGuid conv2DWorkloadExecutionSOLEventGuid = VerifyTimelineEventBinaryPacket(
1018 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1019 BOOST_TEST_MESSAGE("CONV2D WORKLOAD EXECUTION START OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001020
1021 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001022 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1023 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001024 conv2DWorkloadExecutionGuid,
1025 conv2DWorkloadExecutionSOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001026 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1027 readableData,
1028 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001029 BOOST_TEST_MESSAGE("CONV2D WORKLOAD EXECUTION START OF LIFE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001030
1031 // End of Conv2d workload execution life
1032 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001033 ProfilingGuid conv2DWorkloadExecutionEOLEventGuid = VerifyTimelineEventBinaryPacket(
1034 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1035 BOOST_TEST_MESSAGE("CONV2D WORKLOAD EXECUTION END OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001036
1037 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001038 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1039 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001040 conv2DWorkloadExecutionGuid,
1041 conv2DWorkloadExecutionEOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001042 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1043 readableData,
1044 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001045 BOOST_TEST_MESSAGE("CONV2D WORKLOAD EXECUTION END OF LIFE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001046
1047 // Activation workload execution
1048 // Activation workload execution entity
Jim Flynn6398a982020-05-27 17:05:21 +01001049 ProfilingGuid activationWorkloadExecutionGuid = VerifyTimelineEntityBinaryPacketData(
1050 EmptyOptional(), readableData, offset);
1051 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD EXECUTION ENTITY OK");
David Monahan6198fe02019-12-02 08:35:43 +00001052
1053 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001054 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1055 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001056 activationWorkloadExecutionGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001057 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001058 LabelsAndEventClasses::TYPE_GUID,
1059 readableData,
1060 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001061 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD EXECUTION TYPE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001062
1063 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001064 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1065 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001066 inferenceGuid,
1067 activationWorkloadExecutionGuid,
1068 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001069 readableData,
1070 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001071 BOOST_TEST_MESSAGE("INFERENCE - ACTIVATION WORKLOAD EXECUTION CHILD RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001072
1073 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001074 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1075 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001076 activationWorkloadGuid,
1077 activationWorkloadExecutionGuid,
1078 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001079 readableData,
1080 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001081 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD - ACTIVATION WORKLOAD EXECUTION RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001082
1083 // Start Activation workload execution life
1084 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001085 ProfilingGuid activationWorkloadExecutionSOLEventGuid = VerifyTimelineEventBinaryPacket(
1086 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1087 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD EXECUTION START OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001088
1089 // Activation workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001090 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1091 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001092 activationWorkloadExecutionGuid,
1093 activationWorkloadExecutionSOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001094 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1095 readableData,
1096 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001097 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD EXECUTION START OF LIFE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001098
1099 // End of Activation workload execution life
1100 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001101 ProfilingGuid activationWorkloadExecutionEOLEventGuid = VerifyTimelineEventBinaryPacket(
1102 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1103 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD EXECUTION END OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001104
1105 // Activation workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001106 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1107 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001108 activationWorkloadExecutionGuid,
1109 activationWorkloadExecutionEOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001110 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1111 readableData,
1112 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001113 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD EXECUTION END OF LIFE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001114
1115 // Output workload execution
1116 // Output workload execution entity
Jim Flynn6398a982020-05-27 17:05:21 +01001117 ProfilingGuid outputWorkloadExecutionGuid = VerifyTimelineEntityBinaryPacketData(
1118 EmptyOptional(), readableData, offset);
1119 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD EXECUTION ENTITY OK");
David Monahan6198fe02019-12-02 08:35:43 +00001120
1121 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001122 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1123 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001124 outputWorkloadExecutionGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001125 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001126 LabelsAndEventClasses::TYPE_GUID,
1127 readableData,
1128 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001129 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD EXECUTION TYPE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001130
1131 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001132 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1133 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001134 inferenceGuid,
1135 outputWorkloadExecutionGuid,
1136 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001137 readableData,
1138 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001139 BOOST_TEST_MESSAGE("INFERENCE - OUTPUT WORKLOAD EXECUTION CHILD RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001140
1141 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001142 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1143 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001144 outputWorkloadGuid,
1145 outputWorkloadExecutionGuid,
1146 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001147 readableData,
1148 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001149 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD - OUTPUT WORKLOAD EXECUTION EXECUTION_OF RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001150
1151 // Start Output workload execution life
1152 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001153 ProfilingGuid outputWorkloadExecutionSOLEventGuid = VerifyTimelineEventBinaryPacket(
1154 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1155 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD EXECUTION START OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001156
1157 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001158 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1159 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001160 outputWorkloadExecutionGuid,
1161 outputWorkloadExecutionSOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001162 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1163 readableData,
1164 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001165 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD EXECUTION - START OF LIFE EVENT RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001166
1167 // End of Normalize workload execution life
1168 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001169 ProfilingGuid outputWorkloadExecutionEOLEventGuid = VerifyTimelineEventBinaryPacket(
1170 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1171 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD EXECUTION END OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001172
1173 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001174 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1175 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001176 outputWorkloadExecutionGuid,
1177 outputWorkloadExecutionEOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001178 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1179 readableData,
1180 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001181 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD EXECUTION - END OF LIFE EVENT RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001182
1183 // End of Inference life
1184 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001185 ProfilingGuid inferenceEOLEventGuid = VerifyTimelineEventBinaryPacket(
1186 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1187 BOOST_TEST_MESSAGE("INFERENCE END OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001188
1189 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001190 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1191 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001192 inferenceGuid,
1193 inferenceEOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001194 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1195 readableData,
1196 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001197 BOOST_TEST_MESSAGE("INFERENCE - END OF LIFE EVENT RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001198
1199 bufferManager.MarkRead(inferenceReadableBuffer);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00001200}
Jim Flynn6398a982020-05-27 17:05:21 +01001201
1202bool HasSuitableBackendRegistered()
1203{
1204 if (BackendRegistryInstance().IsBackendRegistered(GetComputeDeviceAsCString(armnn::Compute::CpuRef)))
1205 {
1206 return true;
1207 }
1208 if (BackendRegistryInstance().IsBackendRegistered(GetComputeDeviceAsCString(armnn::Compute::CpuAcc)))
1209 {
1210 return true;
1211 }
1212 if (BackendRegistryInstance().IsBackendRegistered(GetComputeDeviceAsCString(armnn::Compute::GpuAcc)))
1213 {
1214 return true;
1215 }
1216 return false;
1217}
1218
1219bool CompareOutput(std::vector<std::string> output, std::vector<std::string> expectedOutput)
1220{
1221 if (output.size() != expectedOutput.size())
1222 {
1223 std::cerr << "output has [" << output.size() << "] lines, expected was ["
1224 << expectedOutput.size() << "] lines" << std::endl;
1225 std::cerr << std::endl << "actual" << std::endl << std::endl;
1226 for (auto line : output)
1227 {
1228 std::cerr << line << std::endl;
1229 }
1230 std::cerr << std::endl << "expected" << std::endl << std::endl;
1231 for (auto line : expectedOutput)
1232 {
1233 std::cerr << line << std::endl;
1234 }
1235 return false;
1236 }
1237 bool bRet = true;
1238 for (unsigned long i = 0; i < output.size(); ++i)
1239 {
1240 if (output[i] != expectedOutput[i])
1241 {
1242 bRet = false;
1243 std::cerr << i << ": actual [" << output[i] << "] expected [" << expectedOutput[i] << "]" << std::endl;
1244 }
1245 }
1246 return bRet;
1247}