blob: 325cb401110058569c61d5076516363c2d962a02 [file] [log] [blame]
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00001//
2// Copyright © 2019 Arm Ltd. All rights reserved.
3// 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
17inline unsigned int OffsetToNextWord(unsigned int numberOfBytes)
18{
19 unsigned int uint32_t_size = sizeof(uint32_t);
20
21 unsigned int remainder = numberOfBytes % uint32_t_size;
22 if (remainder == 0)
23 {
24 return numberOfBytes;
25 }
26
27 return numberOfBytes + uint32_t_size - remainder;
28}
29
Keith Davis97da5e22020-03-05 16:25:28 +000030void VerifyTimelineHeaderBinary(const unsigned char* readableData,
31 unsigned int& offset,
32 uint32_t packetDataLength)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000033{
34 BOOST_ASSERT(readableData);
35
36 // Utils
37 unsigned int uint32_t_size = sizeof(uint32_t);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000038
Keith Davis97da5e22020-03-05 16:25:28 +000039 // Check the TimelineEventClassBinaryPacket header
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000040 uint32_t entityBinaryPacketHeaderWord0 = ReadUint32(readableData, offset);
41 uint32_t entityBinaryPacketFamily = (entityBinaryPacketHeaderWord0 >> 26) & 0x0000003F;
42 uint32_t entityBinaryPacketClass = (entityBinaryPacketHeaderWord0 >> 19) & 0x0000007F;
43 uint32_t entityBinaryPacketType = (entityBinaryPacketHeaderWord0 >> 16) & 0x00000007;
44 uint32_t entityBinaryPacketStreamId = (entityBinaryPacketHeaderWord0 >> 0) & 0x00000007;
45 BOOST_CHECK(entityBinaryPacketFamily == 1);
46 BOOST_CHECK(entityBinaryPacketClass == 0);
47 BOOST_CHECK(entityBinaryPacketType == 1);
48 BOOST_CHECK(entityBinaryPacketStreamId == 0);
49 offset += uint32_t_size;
50 uint32_t entityBinaryPacketHeaderWord1 = ReadUint32(readableData, offset);
51 uint32_t eventBinaryPacketSequenceNumber = (entityBinaryPacketHeaderWord1 >> 24) & 0x00000001;
52 uint32_t eventBinaryPacketDataLength = (entityBinaryPacketHeaderWord1 >> 0) & 0x00FFFFFF;
53 BOOST_CHECK(eventBinaryPacketSequenceNumber == 0);
Keith Davis97da5e22020-03-05 16:25:28 +000054 BOOST_CHECK(eventBinaryPacketDataLength == packetDataLength);
55 offset += uint32_t_size;
56}
57
58void VerifyTimelineLabelBinaryPacketData(Optional<ProfilingGuid> guid,
59 const std::string& label,
60 const unsigned char* readableData,
61 unsigned int& offset)
62{
63 BOOST_ASSERT(readableData);
64
65 // Utils
66 unsigned int uint32_t_size = sizeof(uint32_t);
67 unsigned int uint64_t_size = sizeof(uint64_t);
68 unsigned int label_size = boost::numeric_cast<unsigned int>(label.size());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000069
70 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000071 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
72 BOOST_CHECK(eventClassDeclId == 0);
73
74 // Check the profiling GUID
75 offset += uint32_t_size;
76 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
77 if (guid.has_value())
78 {
79 BOOST_CHECK(readProfilingGuid == guid.value());
80 }
81 else
82 {
Sadik Armagan3184c902020-03-18 10:57:30 +000083 armnn::profiling::ProfilingService profilingService;
84 BOOST_CHECK(readProfilingGuid == profilingService.GetStaticId(label));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000085 }
86
87 // Check the SWTrace label
88 offset += uint64_t_size;
89 uint32_t swTraceLabelLength = ReadUint32(readableData, offset);
Keith Davis97da5e22020-03-05 16:25:28 +000090 BOOST_CHECK(swTraceLabelLength == label_size + 1); // Label length including the null-terminator
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000091 offset += uint32_t_size;
92 BOOST_CHECK(std::memcmp(readableData + offset, // Offset to the label in the buffer
Keith Davis97da5e22020-03-05 16:25:28 +000093 label.data(), // The original label
94 swTraceLabelLength - 1) == 0); // The length of the label
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000095
96 // SWTrace strings are written in blocks of words, so the offset has to be updated to the next whole word
97 offset += OffsetToNextWord(swTraceLabelLength);
98}
99
Keith Davis97da5e22020-03-05 16:25:28 +0000100void VerifyTimelineEventClassBinaryPacketData(ProfilingGuid guid,
101 const unsigned char* readableData,
102 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000103{
104 BOOST_ASSERT(readableData);
105
106 // Utils
107 unsigned int uint32_t_size = sizeof(uint32_t);
108 unsigned int uint64_t_size = sizeof(uint64_t);
109
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000110 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000111 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
112 BOOST_CHECK(eventClassDeclId == 2);
113
114 // Check the profiling GUID
115 offset += uint32_t_size;
116 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
117 BOOST_CHECK(readProfilingGuid == guid);
118
119 // Update the offset to allow parsing to be continued after this function returns
120 offset += uint64_t_size;
121}
122
Keith Davis97da5e22020-03-05 16:25:28 +0000123void VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType relationshipType,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000124 Optional<ProfilingGuid> relationshipGuid,
125 Optional<ProfilingGuid> headGuid,
126 Optional<ProfilingGuid> tailGuid,
127 const unsigned char* readableData,
128 unsigned int& offset)
129{
130 BOOST_ASSERT(readableData);
131
132 uint32_t relationshipTypeUint = 0;
133 switch (relationshipType)
134 {
135 case ProfilingRelationshipType::RetentionLink:
136 relationshipTypeUint = 0;
137 break;
138 case ProfilingRelationshipType::ExecutionLink:
139 relationshipTypeUint = 1;
140 break;
141 case ProfilingRelationshipType::DataLink:
142 relationshipTypeUint = 2;
143 break;
144 case ProfilingRelationshipType::LabelLink:
145 relationshipTypeUint = 3;
146 break;
147 default:
148 BOOST_ERROR("Unknown relationship type");
149 }
150
151 // Utils
152 unsigned int uint32_t_size = sizeof(uint32_t);
153 unsigned int uint64_t_size = sizeof(uint64_t);
154
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000155 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000156 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
157 BOOST_CHECK(eventClassDeclId == 3);
158
159 // Check the relationship type
160 offset += uint32_t_size;
161 uint32_t readRelationshipTypeUint = ReadUint32(readableData, offset);
162 BOOST_CHECK(readRelationshipTypeUint == relationshipTypeUint);
163
164 // Check the relationship GUID
165 offset += uint32_t_size;
166 uint64_t readRelationshipGuid = ReadUint64(readableData, offset);
167 if (relationshipGuid.has_value())
168 {
169 BOOST_CHECK(readRelationshipGuid == relationshipGuid.value());
170 }
171 else
172 {
173 BOOST_CHECK(readRelationshipGuid != ProfilingGuid(0));
174 }
175
176 // Check the head of relationship GUID
177 offset += uint64_t_size;
178 uint64_t readHeadRelationshipGuid = ReadUint64(readableData, offset);
179 if (headGuid.has_value())
180 {
181 BOOST_CHECK(readHeadRelationshipGuid == headGuid.value());
182 }
183 else
184 {
185 BOOST_CHECK(readHeadRelationshipGuid != ProfilingGuid(0));
186 }
187
188 // Check the tail of relationship GUID
189 offset += uint64_t_size;
190 uint64_t readTailRelationshipGuid = ReadUint64(readableData, offset);
191 if (tailGuid.has_value())
192 {
193 BOOST_CHECK(readTailRelationshipGuid == tailGuid.value());
194 }
195 else
196 {
197 BOOST_CHECK(readTailRelationshipGuid != ProfilingGuid(0));
198 }
199
200 // Update the offset to allow parsing to be continued after this function returns
201 offset += uint64_t_size;
202}
203
Keith Davis97da5e22020-03-05 16:25:28 +0000204void VerifyTimelineEntityBinaryPacketData(Optional<ProfilingGuid> guid,
205 const unsigned char* readableData,
206 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000207{
208 BOOST_ASSERT(readableData);
209
210 // Utils
211 unsigned int uint32_t_size = sizeof(uint32_t);
212 unsigned int uint64_t_size = sizeof(uint64_t);
213
214 // Reading TimelineEntityClassBinaryPacket
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000215 // Check the decl_id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000216 uint32_t entityDeclId = ReadUint32(readableData, offset);
217 BOOST_CHECK(entityDeclId == 1);
218
219 // Check the profiling GUID
220 offset += uint32_t_size;
221 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
222
223 if (guid.has_value())
224 {
225 BOOST_CHECK(readProfilingGuid == guid.value());
226 }
227 else
228 {
229 BOOST_CHECK(readProfilingGuid != ProfilingGuid(0));
230 }
231
232 offset += uint64_t_size;
233}
234
235void VerifyTimelineEventBinaryPacket(Optional<uint64_t> timestamp,
236 Optional<std::thread::id> threadId,
237 Optional<ProfilingGuid> eventGuid,
238 const unsigned char* readableData,
239 unsigned int& offset)
240{
241 BOOST_ASSERT(readableData);
242
243 // Utils
244 unsigned int uint32_t_size = sizeof(uint32_t);
245 unsigned int uint64_t_size = sizeof(uint64_t);
246 unsigned int threadId_size = sizeof(std::thread::id);
247
248 // Reading TimelineEventBinaryPacket
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000249 // Check the decl_id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000250 uint32_t entityDeclId = ReadUint32(readableData, offset);
251 BOOST_CHECK(entityDeclId == 4);
252
253 // Check the timestamp
254 offset += uint32_t_size;
255 uint64_t readTimestamp = ReadUint64(readableData, offset);
256 if (timestamp.has_value())
257 {
258 BOOST_CHECK(readTimestamp == timestamp.value());
259 }
260 else
261 {
262 BOOST_CHECK(readTimestamp != 0);
263 }
264
265 // Check the thread id
266 offset += uint64_t_size;
267 std::vector<uint8_t> readThreadId(threadId_size, 0);
268 ReadBytes(readableData, offset, threadId_size, readThreadId.data());
269 if (threadId.has_value())
270 {
271 BOOST_CHECK(readThreadId == threadId.value());
272 }
273 else
274 {
275 BOOST_CHECK(readThreadId == std::this_thread::get_id());
276 }
277
278 // Check the event GUID
279 offset += threadId_size;
280 uint64_t readEventGuid = ReadUint64(readableData, offset);
281 if (eventGuid.has_value())
282 {
283 BOOST_CHECK(readEventGuid == eventGuid.value());
284 }
285 else
286 {
287 BOOST_CHECK(readEventGuid != ProfilingGuid(0));
288 }
289
290 offset += uint64_t_size;
291}
292
293void VerifyPostOptimisationStructureTestImpl(armnn::BackendId backendId)
294{
295 using namespace armnn;
296
297 // Create runtime in which test will run
298 armnn::IRuntime::CreationOptions options;
299 options.m_ProfilingOptions.m_EnableProfiling = true;
Sadik Armagan3184c902020-03-18 10:57:30 +0000300 armnn::Runtime runtime(options);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000301
302 // build up the structure of the network
303 INetworkPtr net(INetwork::Create());
304
305 // Convolution details
306 TensorInfo inputInfo({ 1, 2, 5, 1 }, DataType::Float32);
Keith Davis97da5e22020-03-05 16:25:28 +0000307 TensorInfo weightInfo({ 3, 2, 3, 1 }, DataType::Float32);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000308 TensorInfo biasInfo({ 3 }, DataType::Float32);
Keith Davis97da5e22020-03-05 16:25:28 +0000309 TensorInfo outputInfo({ 1, 3, 7, 1 }, DataType::Float32);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000310 std::vector<float> weightsData{
Keith Davis97da5e22020-03-05 16:25:28 +0000311 1.0f, 0.0f, 0.0f,
312 0.0f, 2.0f, -1.5f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000313
Keith Davis97da5e22020-03-05 16:25:28 +0000314 0.0f, 0.0f, 0.0f,
315 0.2f, 0.2f, 0.2f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000316
Keith Davis97da5e22020-03-05 16:25:28 +0000317 0.5f, 0.0f, 0.5f,
318 0.0f, -1.0f, 0.0f
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000319 };
320 ConstTensor weights(weightInfo, weightsData);
321
322 Optional<ConstTensor> optionalBiases;
323 std::vector<float> biasesData{ 1.0f, 0.0f, 0.0f };
324 ConstTensor biases(biasInfo, biasesData);
325 optionalBiases = Optional<ConstTensor>(biases);
326
327 // Input layer
328 IConnectableLayer* input = net->AddInputLayer(0, "input");
329
330 // Convolution2d layer
331 Convolution2dDescriptor conv2dDesc;
Keith Davis97da5e22020-03-05 16:25:28 +0000332 conv2dDesc.m_StrideX = 1;
333 conv2dDesc.m_StrideY = 1;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000334 conv2dDesc.m_PadLeft = 0;
335 conv2dDesc.m_PadRight = 0;
336 conv2dDesc.m_PadTop = 2;
337 conv2dDesc.m_PadBottom = 2;
338 conv2dDesc.m_BiasEnabled = true;
339 IConnectableLayer* conv2d = net->AddConvolution2dLayer(conv2dDesc, weights, optionalBiases);
340
341 // Activation layer
342 armnn::ActivationDescriptor activationDesc;
343 armnn::IConnectableLayer* const activation = net->AddActivationLayer(activationDesc, "activation");
344
345 // Output layer
346 IConnectableLayer* output = net->AddOutputLayer(0, "output");
347
348 input->GetOutputSlot(0).Connect(conv2d->GetInputSlot(0));
349 conv2d->GetOutputSlot(0).Connect(activation->GetInputSlot(0));
350 activation->GetOutputSlot(0).Connect(output->GetInputSlot(0));
351
352 input->GetOutputSlot(0).SetTensorInfo(inputInfo);
353 conv2d->GetOutputSlot(0).SetTensorInfo(outputInfo);
354 activation->GetOutputSlot(0).SetTensorInfo(outputInfo);
355
356 // optimize the network
357 std::vector<armnn::BackendId> backends = { backendId };
Sadik Armagan3184c902020-03-18 10:57:30 +0000358 IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime.GetDeviceSpec());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000359
360 ProfilingGuid optNetGuid = optNet->GetGuid();
361
362 // Load it into the runtime. It should success.
363 armnn::NetworkId netId;
Sadik Armagan3184c902020-03-18 10:57:30 +0000364 BOOST_TEST(runtime.LoadNetwork(netId, std::move(optNet)) == Status::Success);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000365
Sadik Armagan3184c902020-03-18 10:57:30 +0000366 profiling::ProfilingServiceRuntimeHelper profilingServiceHelper(GetProfilingService(&runtime));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000367 profiling::BufferManager& bufferManager = profilingServiceHelper.GetProfilingBufferManager();
368 auto readableBuffer = bufferManager.GetReadableBuffer();
369
370 // Profiling is enable, the post-optimisation structure should be created
371 BOOST_CHECK(readableBuffer != nullptr);
372
373 unsigned int size = readableBuffer->GetSize();
Keith Davis97da5e22020-03-05 16:25:28 +0000374 BOOST_CHECK(size == 1556);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000375
376 const unsigned char* readableData = readableBuffer->GetReadableData();
377 BOOST_CHECK(readableData != nullptr);
378
379 unsigned int offset = 0;
380
Keith Davis97da5e22020-03-05 16:25:28 +0000381 // Verify Header
382 VerifyTimelineHeaderBinary(readableData, offset, 1548);
383
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000384 // Post-optimisation network
385 // Network entity
Keith Davis97da5e22020-03-05 16:25:28 +0000386 VerifyTimelineEntityBinaryPacketData(optNetGuid, readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000387
388 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000389 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
390 EmptyOptional(),
391 optNetGuid,
392 EmptyOptional(),
393 readableData,
394 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000395
396 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000397 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
398 EmptyOptional(),
399 EmptyOptional(),
400 LabelsAndEventClasses::TYPE_GUID,
401 readableData,
402 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000403
404 // Input layer
405 // Input layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000406 VerifyTimelineEntityBinaryPacketData(input->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000407
408 // Name Entity
Keith Davis97da5e22020-03-05 16:25:28 +0000409 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "input", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000410
411 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000412 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
413 EmptyOptional(),
414 input->GetGuid(),
415 EmptyOptional(),
416 readableData,
417 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000418
419 // Name label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000420 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
421 EmptyOptional(),
422 EmptyOptional(),
423 LabelsAndEventClasses::NAME_GUID,
424 readableData,
425 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000426
427 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000428 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
429 EmptyOptional(),
430 input->GetGuid(),
431 EmptyOptional(),
432 readableData,
433 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000434
435 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000436 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
437 EmptyOptional(),
438 EmptyOptional(),
439 LabelsAndEventClasses::TYPE_GUID,
440 readableData,
441 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000442
443 // Network - Input layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000444 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
445 EmptyOptional(),
446 optNetGuid,
447 input->GetGuid(),
448 readableData,
449 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000450
451 // Conv2d layer
452 // Conv2d layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000453 VerifyTimelineEntityBinaryPacketData(conv2d->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000454
455 // Name entity
Keith Davis97da5e22020-03-05 16:25:28 +0000456 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "<Unnamed>", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000457
458 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000459 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
460 EmptyOptional(),
461 conv2d->GetGuid(),
462 EmptyOptional(),
463 readableData,
464 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000465
466 // Name label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000467 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
468 EmptyOptional(),
469 EmptyOptional(),
470 LabelsAndEventClasses::NAME_GUID,
471 readableData,
472 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000473
474 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000475 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
476 EmptyOptional(),
477 conv2d->GetGuid(),
478 EmptyOptional(),
479 readableData,
480 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000481
482 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000483 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
484 EmptyOptional(),
485 EmptyOptional(),
486 LabelsAndEventClasses::TYPE_GUID,
487 readableData,
488 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000489
490 // Network - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000491 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
492 EmptyOptional(),
493 optNetGuid,
494 conv2d->GetGuid(),
495 readableData,
496 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000497
498 // Input layer - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000499 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
500 EmptyOptional(),
501 input->GetGuid(),
502 conv2d->GetGuid(),
503 readableData,
504 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000505
506 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000507 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
508 EmptyOptional(),
509 EmptyOptional(),
510 LabelsAndEventClasses::CONNECTION_GUID,
511 readableData,
512 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000513
514 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000515 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
516 EmptyOptional(),
517 EmptyOptional(),
518 LabelsAndEventClasses::TYPE_GUID,
519 readableData,
520 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000521
522 // Conv2d workload
523 // Conv2d workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000524 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000525
526 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000527 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
528 EmptyOptional(),
529 EmptyOptional(),
530 EmptyOptional(),
531 readableData,
532 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000533
534 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000535 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
536 EmptyOptional(),
537 EmptyOptional(),
538 LabelsAndEventClasses::TYPE_GUID,
539 readableData,
540 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000541
542 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000543 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000544
545 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000546 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
547 EmptyOptional(),
548 EmptyOptional(),
549 EmptyOptional(),
550 readableData,
551 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000552
553 // BackendId label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000554 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
555 EmptyOptional(),
556 EmptyOptional(),
557 LabelsAndEventClasses::BACKENDID_GUID,
558 readableData,
559 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000560
561 // Conv2d layer - Conv2d workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000562 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
563 EmptyOptional(),
564 conv2d->GetGuid(),
565 EmptyOptional(),
566 readableData,
567 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000568
569 // Activation layer
570 // Activation layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000571 VerifyTimelineEntityBinaryPacketData(activation->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000572
573 // Name entity
Keith Davis97da5e22020-03-05 16:25:28 +0000574 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "activation", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000575
576 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000577 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
578 EmptyOptional(),
579 activation->GetGuid(),
580 EmptyOptional(),
581 readableData,
582 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000583
584 // Name label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000585 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
586 EmptyOptional(),
587 EmptyOptional(),
588 LabelsAndEventClasses::NAME_GUID,
589 readableData,
590 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000591
592 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000593 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
594 EmptyOptional(),
595 activation->GetGuid(),
596 EmptyOptional(),
597 readableData,
598 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000599
600 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000601 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
602 EmptyOptional(),
603 EmptyOptional(),
604 LabelsAndEventClasses::TYPE_GUID,
605 readableData,
606 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000607
608 // Network - Activation layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000609 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
610 EmptyOptional(),
611 optNetGuid,
612 activation->GetGuid(),
613 readableData,
614 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000615
616 // Conv2d layer - Activation layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000617 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
618 EmptyOptional(),
619 conv2d->GetGuid(),
620 activation->GetGuid(),
621 readableData,
622 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000623
624 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000625 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
626 EmptyOptional(),
627 EmptyOptional(),
628 LabelsAndEventClasses::CONNECTION_GUID,
629 readableData,
630 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000631
632 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000633 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
634 EmptyOptional(),
635 EmptyOptional(),
636 LabelsAndEventClasses::TYPE_GUID,
637 readableData,
638 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000639
640 // Activation workload
641 // Activation workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000642 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000643
644 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000645 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
646 EmptyOptional(),
647 EmptyOptional(),
648 EmptyOptional(),
649 readableData,
650 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000651
652 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000653 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
654 EmptyOptional(),
655 EmptyOptional(),
656 LabelsAndEventClasses::TYPE_GUID,
657 readableData,
658 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000659
660 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000661 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000662
663 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000664 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
665 EmptyOptional(),
666 EmptyOptional(),
667 EmptyOptional(),
668 readableData,
669 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000670
671 // BackendId label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000672 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
673 EmptyOptional(),
674 EmptyOptional(),
675 LabelsAndEventClasses::BACKENDID_GUID,
676 readableData,
677 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000678
679 // Activation layer - Activation workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000680 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
681 EmptyOptional(),
682 activation->GetGuid(),
683 EmptyOptional(),
684 readableData,
685 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000686
687 // Output layer
688 // Output layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000689 VerifyTimelineEntityBinaryPacketData(output->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000690
691 // Name entity
Keith Davis97da5e22020-03-05 16:25:28 +0000692 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "output", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000693
694 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000695 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
696 EmptyOptional(),
697 output->GetGuid(),
698 EmptyOptional(),
699 readableData,
700 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000701
702 // Name label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000703 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
704 EmptyOptional(),
705 EmptyOptional(),
706 LabelsAndEventClasses::NAME_GUID,
707 readableData,
708 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000709
710 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000711 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
712 EmptyOptional(),
713 output->GetGuid(),
714 EmptyOptional(),
715 readableData,
716 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000717
718 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000719 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
720 EmptyOptional(),
721 EmptyOptional(),
722 LabelsAndEventClasses::TYPE_GUID,
723 readableData,
724 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000725
726 // Network - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000727 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
728 EmptyOptional(),
729 optNetGuid,
730 output->GetGuid(),
731 readableData,
732 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000733
734 // Activation layer - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000735 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
736 EmptyOptional(),
737 activation->GetGuid(),
738 output->GetGuid(),
739 readableData,
740 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000741
742 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000743 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
744 EmptyOptional(),
745 EmptyOptional(),
746 LabelsAndEventClasses::CONNECTION_GUID,
747 readableData,
748 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000749
750 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000751 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
752 EmptyOptional(),
753 EmptyOptional(),
754 LabelsAndEventClasses::TYPE_GUID,
755 readableData,
756 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000757
758 bufferManager.MarkRead(readableBuffer);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000759
760 // Creates structures for input & output.
761 std::vector<float> inputData(inputInfo.GetNumElements());
762 std::vector<float> outputData(outputInfo.GetNumElements());
763
764 InputTensors inputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000765 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000766 {0, ConstTensor(runtime.GetInputTensorInfo(netId, 0), inputData.data())}
Keith Davis97da5e22020-03-05 16:25:28 +0000767 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000768 OutputTensors outputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000769 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000770 {0, Tensor(runtime.GetOutputTensorInfo(netId, 0), outputData.data())}
Keith Davis97da5e22020-03-05 16:25:28 +0000771 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000772
773 // Does the inference.
Sadik Armagan3184c902020-03-18 10:57:30 +0000774 runtime.EnqueueWorkload(netId, inputTensors, outputTensors);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000775
David Monahan6198fe02019-12-02 08:35:43 +0000776 // Get readable buffer for inference timeline
777 auto inferenceReadableBuffer = bufferManager.GetReadableBuffer();
778 BOOST_CHECK(inferenceReadableBuffer != nullptr);
779
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000780 // Get readable buffer for output workload
781 auto outputReadableBuffer = bufferManager.GetReadableBuffer();
782 BOOST_CHECK(outputReadableBuffer != nullptr);
783
784 // Get readable buffer for input workload
785 auto inputReadableBuffer = bufferManager.GetReadableBuffer();
786 BOOST_CHECK(inputReadableBuffer != nullptr);
787
788 // Validate input workload data
789 size = inputReadableBuffer->GetSize();
Keith Davis97da5e22020-03-05 16:25:28 +0000790 BOOST_CHECK(size == 204);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000791
792 readableData = inputReadableBuffer->GetReadableData();
793 BOOST_CHECK(readableData != nullptr);
794
795 offset = 0;
796
Keith Davis97da5e22020-03-05 16:25:28 +0000797 // Verify Header
798 VerifyTimelineHeaderBinary(readableData, offset, 196);
799
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000800 // Input workload
801 // Input workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000802 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000803
804 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000805 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
806 EmptyOptional(),
807 EmptyOptional(),
808 EmptyOptional(),
809 readableData,
810 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000811
812 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000813 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
814 EmptyOptional(),
815 EmptyOptional(),
816 LabelsAndEventClasses::TYPE_GUID,
817 readableData,
818 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000819
820 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000821 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000822
823 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000824 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
825 EmptyOptional(),
826 EmptyOptional(),
827 EmptyOptional(),
828 readableData,
829 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000830
831 // BackendId label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000832 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
833 EmptyOptional(),
834 EmptyOptional(),
835 LabelsAndEventClasses::BACKENDID_GUID,
836 readableData,
837 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000838
839 // Input layer - Input workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000840 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
841 EmptyOptional(),
842 input->GetGuid(),
843 EmptyOptional(),
844 readableData,
845 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000846
847 bufferManager.MarkRead(inputReadableBuffer);
848
849 // Validate output workload data
850 size = outputReadableBuffer->GetSize();
Keith Davis97da5e22020-03-05 16:25:28 +0000851 BOOST_CHECK(size == 204);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000852
853 readableData = outputReadableBuffer->GetReadableData();
854 BOOST_CHECK(readableData != nullptr);
855
856 offset = 0;
857
Keith Davis97da5e22020-03-05 16:25:28 +0000858 // Verify Header
859 VerifyTimelineHeaderBinary(readableData, offset, 196);
860
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000861 // Output workload
862 // Output workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000863 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000864
865 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000866 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
867 EmptyOptional(),
868 EmptyOptional(),
869 EmptyOptional(),
870 readableData,
871 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000872
873 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000874 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
875 EmptyOptional(),
876 EmptyOptional(),
877 LabelsAndEventClasses::TYPE_GUID,
878 readableData,
879 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000880
881 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000882 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000883
884 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000885 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
886 EmptyOptional(),
887 EmptyOptional(),
888 EmptyOptional(),
889 readableData,
890 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000891
892 // BackendId label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000893 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
894 EmptyOptional(),
895 EmptyOptional(),
896 LabelsAndEventClasses::BACKENDID_GUID,
897 readableData,
898 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000899
900 // Output layer - Output workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000901 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
902 EmptyOptional(),
903 output->GetGuid(),
904 EmptyOptional(),
905 readableData,
906 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000907
908 bufferManager.MarkRead(outputReadableBuffer);
David Monahan6198fe02019-12-02 08:35:43 +0000909
910 // Validate inference data
911 size = inferenceReadableBuffer->GetSize();
Keith Davis97da5e22020-03-05 16:25:28 +0000912 BOOST_CHECK(size == 1596);
David Monahan6198fe02019-12-02 08:35:43 +0000913
914 readableData = inferenceReadableBuffer->GetReadableData();
915 BOOST_CHECK(readableData != nullptr);
916
917 offset = 0;
918
Keith Davis97da5e22020-03-05 16:25:28 +0000919 // Verify Header
920 VerifyTimelineHeaderBinary(readableData, offset, 1588);
921
David Monahan6198fe02019-12-02 08:35:43 +0000922 // Inference timeline trace
923 // Inference entity
Keith Davis97da5e22020-03-05 16:25:28 +0000924 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000925
926 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000927 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
928 EmptyOptional(),
929 EmptyOptional(),
930 LabelsAndEventClasses::INFERENCE_GUID,
931 readableData,
932 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000933
934 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000935 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
936 EmptyOptional(),
937 EmptyOptional(),
938 LabelsAndEventClasses::TYPE_GUID,
939 readableData,
940 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000941
942 // Network - Inference relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000943 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
944 EmptyOptional(),
945 optNetGuid,
946 EmptyOptional(),
947 readableData,
948 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000949
950 // Start Inference life
951 // Event packet - timeline, threadId, eventGuid
952 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
953
954 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000955 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
956 EmptyOptional(),
957 EmptyOptional(),
958 EmptyOptional(),
959 readableData,
960 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000961
962 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000963 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
964 EmptyOptional(),
965 EmptyOptional(),
966 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
967 readableData,
968 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000969
970 // Execution
971 // Input workload execution
972 // Input workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +0000973 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000974
975 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000976 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
977 EmptyOptional(),
978 EmptyOptional(),
979 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
980 readableData,
981 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000982
983 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000984 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
985 EmptyOptional(),
986 EmptyOptional(),
987 LabelsAndEventClasses::TYPE_GUID,
988 readableData,
989 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000990
991 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000992 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
993 EmptyOptional(),
994 EmptyOptional(),
995 EmptyOptional(),
996 readableData,
997 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000998
999 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001000 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1001 EmptyOptional(),
1002 EmptyOptional(),
1003 EmptyOptional(),
1004 readableData,
1005 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001006
1007 // Start Input workload execution life
1008 // Event packet - timeline, threadId, eventGuid
1009 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1010
1011 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001012 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1013 EmptyOptional(),
1014 EmptyOptional(),
1015 EmptyOptional(),
1016 readableData,
1017 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001018
1019 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001020 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1021 EmptyOptional(),
1022 EmptyOptional(),
1023 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1024 readableData,
1025 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001026
1027 // End of Input workload execution life
1028 // Event packet - timeline, threadId, eventGuid
1029 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1030
1031 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001032 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1033 EmptyOptional(),
1034 EmptyOptional(),
1035 EmptyOptional(),
1036 readableData,
1037 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001038
1039 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001040 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1041 EmptyOptional(),
1042 EmptyOptional(),
1043 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1044 readableData,
1045 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001046
1047 // Conv2d workload execution
1048 // Conv2d workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +00001049 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001050
1051 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001052 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1053 EmptyOptional(),
1054 EmptyOptional(),
1055 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1056 readableData,
1057 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001058
1059 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001060 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1061 EmptyOptional(),
1062 EmptyOptional(),
1063 LabelsAndEventClasses::TYPE_GUID,
1064 readableData,
1065 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001066
1067 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001068 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1069 EmptyOptional(),
1070 EmptyOptional(),
1071 EmptyOptional(),
1072 readableData,
1073 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001074
1075 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001076 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1077 EmptyOptional(),
1078 EmptyOptional(),
1079 EmptyOptional(),
1080 readableData,
1081 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001082
1083 // Start Conv2d workload execution life
1084 // Event packet - timeline, threadId, eventGuid
1085 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1086
1087 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001088 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1089 EmptyOptional(),
1090 EmptyOptional(),
1091 EmptyOptional(),
1092 readableData,
1093 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001094
1095 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001096 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1097 EmptyOptional(),
1098 EmptyOptional(),
1099 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1100 readableData,
1101 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001102
1103 // End of Conv2d workload execution life
1104 // Event packet - timeline, threadId, eventGuid
1105 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1106
1107 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001108 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1109 EmptyOptional(),
1110 EmptyOptional(),
1111 EmptyOptional(),
1112 readableData,
1113 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001114
1115 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001116 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1117 EmptyOptional(),
1118 EmptyOptional(),
1119 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1120 readableData,
1121 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001122
1123 // Activation workload execution
1124 // Activation workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +00001125 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001126
1127 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001128 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1129 EmptyOptional(),
1130 EmptyOptional(),
1131 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1132 readableData,
1133 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001134
1135 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001136 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1137 EmptyOptional(),
1138 EmptyOptional(),
1139 LabelsAndEventClasses::TYPE_GUID,
1140 readableData,
1141 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001142
1143 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001144 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1145 EmptyOptional(),
1146 EmptyOptional(),
1147 EmptyOptional(),
1148 readableData,
1149 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001150
1151 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001152 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1153 EmptyOptional(),
1154 EmptyOptional(),
1155 EmptyOptional(),
1156 readableData,
1157 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001158
1159 // Start Activation workload execution life
1160 // Event packet - timeline, threadId, eventGuid
1161 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1162
1163 // Activation workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001164 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1165 EmptyOptional(),
1166 EmptyOptional(),
1167 EmptyOptional(),
1168 readableData,
1169 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001170
1171 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001172 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1173 EmptyOptional(),
1174 EmptyOptional(),
1175 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1176 readableData,
1177 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001178
1179 // End of Activation workload execution life
1180 // Event packet - timeline, threadId, eventGuid
1181 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1182
1183 // Activation workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001184 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1185 EmptyOptional(),
1186 EmptyOptional(),
1187 EmptyOptional(),
1188 readableData,
1189 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001190
1191 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001192 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1193 EmptyOptional(),
1194 EmptyOptional(),
1195 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1196 readableData,
1197 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001198
1199 // Output workload execution
1200 // Output workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +00001201 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001202
1203 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001204 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1205 EmptyOptional(),
1206 EmptyOptional(),
1207 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1208 readableData,
1209 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001210
1211 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001212 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1213 EmptyOptional(),
1214 EmptyOptional(),
1215 LabelsAndEventClasses::TYPE_GUID,
1216 readableData,
1217 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001218
1219 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001220 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1221 EmptyOptional(),
1222 EmptyOptional(),
1223 EmptyOptional(),
1224 readableData,
1225 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001226
1227 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001228 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1229 EmptyOptional(),
1230 EmptyOptional(),
1231 EmptyOptional(),
1232 readableData,
1233 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001234
1235 // Start Output workload execution life
1236 // Event packet - timeline, threadId, eventGuid
1237 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1238
1239 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001240 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1241 EmptyOptional(),
1242 EmptyOptional(),
1243 EmptyOptional(),
1244 readableData,
1245 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001246
1247 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001248 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1249 EmptyOptional(),
1250 EmptyOptional(),
1251 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1252 readableData,
1253 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001254
1255 // End of Normalize workload execution life
1256 // Event packet - timeline, threadId, eventGuid
1257 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1258
1259 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001260 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1261 EmptyOptional(),
1262 EmptyOptional(),
1263 EmptyOptional(),
1264 readableData,
1265 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001266
1267 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001268 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1269 EmptyOptional(),
1270 EmptyOptional(),
1271 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1272 readableData,
1273 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001274
1275 // End of Inference life
1276 // Event packet - timeline, threadId, eventGuid
1277 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1278
1279 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001280 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1281 EmptyOptional(),
1282 EmptyOptional(),
1283 EmptyOptional(),
1284 readableData,
1285 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001286
1287 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001288 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1289 EmptyOptional(),
1290 EmptyOptional(),
1291 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1292 readableData,
1293 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001294
1295 bufferManager.MarkRead(inferenceReadableBuffer);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00001296}