blob: 244051c7856fa2fb8679bf4ad13cafb5494baf1f [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
Finn Williamsb6a402f2020-03-24 13:46:22 +0000776 // Get readable buffer for input workload
777 auto inputReadableBuffer = bufferManager.GetReadableBuffer();
778 BOOST_CHECK(inputReadableBuffer != nullptr);
David Monahan6198fe02019-12-02 08:35:43 +0000779
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
Finn Williamsb6a402f2020-03-24 13:46:22 +0000784 // Get readable buffer for inference timeline
785 auto inferenceReadableBuffer = bufferManager.GetReadableBuffer();
786 BOOST_CHECK(inferenceReadableBuffer != nullptr);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000787
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();
Jan Eilersa10e2a22020-03-26 12:04:54 +0000912
913 unsigned int threadId_size = sizeof(std::thread::id); // Is platform dependent
914 BOOST_CHECK(size == 1516 + 10 * threadId_size);
David Monahan6198fe02019-12-02 08:35:43 +0000915
916 readableData = inferenceReadableBuffer->GetReadableData();
917 BOOST_CHECK(readableData != nullptr);
918
919 offset = 0;
920
Keith Davis97da5e22020-03-05 16:25:28 +0000921 // Verify Header
Jan Eilersa10e2a22020-03-26 12:04:54 +0000922 VerifyTimelineHeaderBinary(readableData, offset, 1508 + 10 * threadId_size);
Keith Davis97da5e22020-03-05 16:25:28 +0000923
David Monahan6198fe02019-12-02 08:35:43 +0000924 // Inference timeline trace
925 // Inference entity
Keith Davis97da5e22020-03-05 16:25:28 +0000926 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000927
928 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000929 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
930 EmptyOptional(),
931 EmptyOptional(),
932 LabelsAndEventClasses::INFERENCE_GUID,
933 readableData,
934 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000935
936 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000937 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
938 EmptyOptional(),
939 EmptyOptional(),
940 LabelsAndEventClasses::TYPE_GUID,
941 readableData,
942 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000943
944 // Network - Inference relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000945 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
946 EmptyOptional(),
947 optNetGuid,
948 EmptyOptional(),
949 readableData,
950 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000951
952 // Start Inference life
953 // Event packet - timeline, threadId, eventGuid
954 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
955
956 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000957 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
958 EmptyOptional(),
959 EmptyOptional(),
960 EmptyOptional(),
961 readableData,
962 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000963
964 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000965 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
966 EmptyOptional(),
967 EmptyOptional(),
968 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
969 readableData,
970 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000971
972 // Execution
973 // Input workload execution
974 // Input workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +0000975 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000976
977 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000978 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
979 EmptyOptional(),
980 EmptyOptional(),
981 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
982 readableData,
983 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000984
985 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000986 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
987 EmptyOptional(),
988 EmptyOptional(),
989 LabelsAndEventClasses::TYPE_GUID,
990 readableData,
991 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000992
993 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000994 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
995 EmptyOptional(),
996 EmptyOptional(),
997 EmptyOptional(),
998 readableData,
999 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001000
1001 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001002 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1003 EmptyOptional(),
1004 EmptyOptional(),
1005 EmptyOptional(),
1006 readableData,
1007 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001008
1009 // Start Input workload execution life
1010 // Event packet - timeline, threadId, eventGuid
1011 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1012
1013 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001014 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1015 EmptyOptional(),
1016 EmptyOptional(),
1017 EmptyOptional(),
1018 readableData,
1019 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001020
1021 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001022 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1023 EmptyOptional(),
1024 EmptyOptional(),
1025 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1026 readableData,
1027 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001028
1029 // End of Input workload execution life
1030 // Event packet - timeline, threadId, eventGuid
1031 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1032
1033 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001034 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1035 EmptyOptional(),
1036 EmptyOptional(),
1037 EmptyOptional(),
1038 readableData,
1039 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001040
1041 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001042 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1043 EmptyOptional(),
1044 EmptyOptional(),
1045 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1046 readableData,
1047 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001048
1049 // Conv2d workload execution
1050 // Conv2d workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +00001051 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
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(),
1056 EmptyOptional(),
1057 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1058 readableData,
1059 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001060
1061 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001062 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1063 EmptyOptional(),
1064 EmptyOptional(),
1065 LabelsAndEventClasses::TYPE_GUID,
1066 readableData,
1067 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001068
1069 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001070 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1071 EmptyOptional(),
1072 EmptyOptional(),
1073 EmptyOptional(),
1074 readableData,
1075 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001076
1077 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001078 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1079 EmptyOptional(),
1080 EmptyOptional(),
1081 EmptyOptional(),
1082 readableData,
1083 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001084
1085 // Start Conv2d workload execution life
1086 // Event packet - timeline, threadId, eventGuid
1087 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1088
1089 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001090 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1091 EmptyOptional(),
1092 EmptyOptional(),
1093 EmptyOptional(),
1094 readableData,
1095 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001096
1097 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001098 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1099 EmptyOptional(),
1100 EmptyOptional(),
1101 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1102 readableData,
1103 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001104
1105 // End of Conv2d workload execution life
1106 // Event packet - timeline, threadId, eventGuid
1107 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1108
1109 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001110 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1111 EmptyOptional(),
1112 EmptyOptional(),
1113 EmptyOptional(),
1114 readableData,
1115 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001116
1117 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001118 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1119 EmptyOptional(),
1120 EmptyOptional(),
1121 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1122 readableData,
1123 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001124
1125 // Activation workload execution
1126 // Activation workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +00001127 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001128
1129 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001130 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1131 EmptyOptional(),
1132 EmptyOptional(),
1133 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1134 readableData,
1135 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001136
1137 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001138 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1139 EmptyOptional(),
1140 EmptyOptional(),
1141 LabelsAndEventClasses::TYPE_GUID,
1142 readableData,
1143 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001144
1145 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001146 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1147 EmptyOptional(),
1148 EmptyOptional(),
1149 EmptyOptional(),
1150 readableData,
1151 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001152
1153 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001154 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1155 EmptyOptional(),
1156 EmptyOptional(),
1157 EmptyOptional(),
1158 readableData,
1159 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001160
1161 // Start Activation workload execution life
1162 // Event packet - timeline, threadId, eventGuid
1163 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1164
1165 // Activation workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001166 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1167 EmptyOptional(),
1168 EmptyOptional(),
1169 EmptyOptional(),
1170 readableData,
1171 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001172
1173 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001174 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1175 EmptyOptional(),
1176 EmptyOptional(),
1177 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1178 readableData,
1179 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001180
1181 // End of Activation workload execution life
1182 // Event packet - timeline, threadId, eventGuid
1183 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1184
1185 // Activation workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001186 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1187 EmptyOptional(),
1188 EmptyOptional(),
1189 EmptyOptional(),
1190 readableData,
1191 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001192
1193 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001194 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1195 EmptyOptional(),
1196 EmptyOptional(),
1197 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1198 readableData,
1199 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001200
1201 // Output workload execution
1202 // Output workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +00001203 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001204
1205 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001206 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1207 EmptyOptional(),
1208 EmptyOptional(),
1209 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1210 readableData,
1211 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001212
1213 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001214 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1215 EmptyOptional(),
1216 EmptyOptional(),
1217 LabelsAndEventClasses::TYPE_GUID,
1218 readableData,
1219 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001220
1221 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001222 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1223 EmptyOptional(),
1224 EmptyOptional(),
1225 EmptyOptional(),
1226 readableData,
1227 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001228
1229 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001230 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1231 EmptyOptional(),
1232 EmptyOptional(),
1233 EmptyOptional(),
1234 readableData,
1235 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001236
1237 // Start Output workload execution life
1238 // Event packet - timeline, threadId, eventGuid
1239 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1240
1241 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001242 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1243 EmptyOptional(),
1244 EmptyOptional(),
1245 EmptyOptional(),
1246 readableData,
1247 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001248
1249 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001250 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1251 EmptyOptional(),
1252 EmptyOptional(),
1253 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1254 readableData,
1255 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001256
1257 // End of Normalize workload execution life
1258 // Event packet - timeline, threadId, eventGuid
1259 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1260
1261 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001262 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1263 EmptyOptional(),
1264 EmptyOptional(),
1265 EmptyOptional(),
1266 readableData,
1267 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001268
1269 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001270 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1271 EmptyOptional(),
1272 EmptyOptional(),
1273 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1274 readableData,
1275 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001276
1277 // End of Inference life
1278 // Event packet - timeline, threadId, eventGuid
1279 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1280
1281 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001282 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1283 EmptyOptional(),
1284 EmptyOptional(),
1285 EmptyOptional(),
1286 readableData,
1287 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001288
1289 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001290 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1291 EmptyOptional(),
1292 EmptyOptional(),
1293 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1294 readableData,
1295 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001296
1297 bufferManager.MarkRead(inferenceReadableBuffer);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00001298}