blob: 17291bad64b2a900b4d64e06f3a45f2bcde8e980 [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 Armagan3184c902020-03-18 10:57:30 +000012#include <Runtime.hpp>
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000013
14#include <boost/test/unit_test.hpp>
15
16inline unsigned int OffsetToNextWord(unsigned int numberOfBytes)
17{
18 unsigned int uint32_t_size = sizeof(uint32_t);
19
20 unsigned int remainder = numberOfBytes % uint32_t_size;
21 if (remainder == 0)
22 {
23 return numberOfBytes;
24 }
25
26 return numberOfBytes + uint32_t_size - remainder;
27}
28
Keith Davis97da5e22020-03-05 16:25:28 +000029void VerifyTimelineHeaderBinary(const unsigned char* readableData,
30 unsigned int& offset,
31 uint32_t packetDataLength)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000032{
33 BOOST_ASSERT(readableData);
34
35 // Utils
36 unsigned int uint32_t_size = sizeof(uint32_t);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000037
Keith Davis97da5e22020-03-05 16:25:28 +000038 // Check the TimelineEventClassBinaryPacket header
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000039 uint32_t entityBinaryPacketHeaderWord0 = ReadUint32(readableData, offset);
40 uint32_t entityBinaryPacketFamily = (entityBinaryPacketHeaderWord0 >> 26) & 0x0000003F;
41 uint32_t entityBinaryPacketClass = (entityBinaryPacketHeaderWord0 >> 19) & 0x0000007F;
42 uint32_t entityBinaryPacketType = (entityBinaryPacketHeaderWord0 >> 16) & 0x00000007;
43 uint32_t entityBinaryPacketStreamId = (entityBinaryPacketHeaderWord0 >> 0) & 0x00000007;
44 BOOST_CHECK(entityBinaryPacketFamily == 1);
45 BOOST_CHECK(entityBinaryPacketClass == 0);
46 BOOST_CHECK(entityBinaryPacketType == 1);
47 BOOST_CHECK(entityBinaryPacketStreamId == 0);
48 offset += uint32_t_size;
49 uint32_t entityBinaryPacketHeaderWord1 = ReadUint32(readableData, offset);
50 uint32_t eventBinaryPacketSequenceNumber = (entityBinaryPacketHeaderWord1 >> 24) & 0x00000001;
51 uint32_t eventBinaryPacketDataLength = (entityBinaryPacketHeaderWord1 >> 0) & 0x00FFFFFF;
52 BOOST_CHECK(eventBinaryPacketSequenceNumber == 0);
Keith Davis97da5e22020-03-05 16:25:28 +000053 BOOST_CHECK(eventBinaryPacketDataLength == packetDataLength);
54 offset += uint32_t_size;
55}
56
57void VerifyTimelineLabelBinaryPacketData(Optional<ProfilingGuid> guid,
58 const std::string& label,
59 const unsigned char* readableData,
60 unsigned int& offset)
61{
62 BOOST_ASSERT(readableData);
63
64 // Utils
65 unsigned int uint32_t_size = sizeof(uint32_t);
66 unsigned int uint64_t_size = sizeof(uint64_t);
67 unsigned int label_size = boost::numeric_cast<unsigned int>(label.size());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000068
69 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000070 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
71 BOOST_CHECK(eventClassDeclId == 0);
72
73 // Check the profiling GUID
74 offset += uint32_t_size;
75 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
76 if (guid.has_value())
77 {
78 BOOST_CHECK(readProfilingGuid == guid.value());
79 }
80 else
81 {
Sadik Armagan3184c902020-03-18 10:57:30 +000082 armnn::profiling::ProfilingService profilingService;
83 BOOST_CHECK(readProfilingGuid == profilingService.GetStaticId(label));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000084 }
85
86 // Check the SWTrace label
87 offset += uint64_t_size;
88 uint32_t swTraceLabelLength = ReadUint32(readableData, offset);
Keith Davis97da5e22020-03-05 16:25:28 +000089 BOOST_CHECK(swTraceLabelLength == label_size + 1); // Label length including the null-terminator
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000090 offset += uint32_t_size;
91 BOOST_CHECK(std::memcmp(readableData + offset, // Offset to the label in the buffer
Keith Davis97da5e22020-03-05 16:25:28 +000092 label.data(), // The original label
93 swTraceLabelLength - 1) == 0); // The length of the label
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000094
95 // SWTrace strings are written in blocks of words, so the offset has to be updated to the next whole word
96 offset += OffsetToNextWord(swTraceLabelLength);
97}
98
Keith Davis97da5e22020-03-05 16:25:28 +000099void VerifyTimelineEventClassBinaryPacketData(ProfilingGuid guid,
100 const unsigned char* readableData,
101 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000102{
103 BOOST_ASSERT(readableData);
104
105 // Utils
106 unsigned int uint32_t_size = sizeof(uint32_t);
107 unsigned int uint64_t_size = sizeof(uint64_t);
108
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000109 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000110 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
111 BOOST_CHECK(eventClassDeclId == 2);
112
113 // Check the profiling GUID
114 offset += uint32_t_size;
115 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
116 BOOST_CHECK(readProfilingGuid == guid);
117
118 // Update the offset to allow parsing to be continued after this function returns
119 offset += uint64_t_size;
120}
121
Keith Davis97da5e22020-03-05 16:25:28 +0000122void VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType relationshipType,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000123 Optional<ProfilingGuid> relationshipGuid,
124 Optional<ProfilingGuid> headGuid,
125 Optional<ProfilingGuid> tailGuid,
126 const unsigned char* readableData,
127 unsigned int& offset)
128{
129 BOOST_ASSERT(readableData);
130
131 uint32_t relationshipTypeUint = 0;
132 switch (relationshipType)
133 {
134 case ProfilingRelationshipType::RetentionLink:
135 relationshipTypeUint = 0;
136 break;
137 case ProfilingRelationshipType::ExecutionLink:
138 relationshipTypeUint = 1;
139 break;
140 case ProfilingRelationshipType::DataLink:
141 relationshipTypeUint = 2;
142 break;
143 case ProfilingRelationshipType::LabelLink:
144 relationshipTypeUint = 3;
145 break;
146 default:
147 BOOST_ERROR("Unknown relationship type");
148 }
149
150 // Utils
151 unsigned int uint32_t_size = sizeof(uint32_t);
152 unsigned int uint64_t_size = sizeof(uint64_t);
153
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000154 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000155 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
156 BOOST_CHECK(eventClassDeclId == 3);
157
158 // Check the relationship type
159 offset += uint32_t_size;
160 uint32_t readRelationshipTypeUint = ReadUint32(readableData, offset);
161 BOOST_CHECK(readRelationshipTypeUint == relationshipTypeUint);
162
163 // Check the relationship GUID
164 offset += uint32_t_size;
165 uint64_t readRelationshipGuid = ReadUint64(readableData, offset);
166 if (relationshipGuid.has_value())
167 {
168 BOOST_CHECK(readRelationshipGuid == relationshipGuid.value());
169 }
170 else
171 {
172 BOOST_CHECK(readRelationshipGuid != ProfilingGuid(0));
173 }
174
175 // Check the head of relationship GUID
176 offset += uint64_t_size;
177 uint64_t readHeadRelationshipGuid = ReadUint64(readableData, offset);
178 if (headGuid.has_value())
179 {
180 BOOST_CHECK(readHeadRelationshipGuid == headGuid.value());
181 }
182 else
183 {
184 BOOST_CHECK(readHeadRelationshipGuid != ProfilingGuid(0));
185 }
186
187 // Check the tail of relationship GUID
188 offset += uint64_t_size;
189 uint64_t readTailRelationshipGuid = ReadUint64(readableData, offset);
190 if (tailGuid.has_value())
191 {
192 BOOST_CHECK(readTailRelationshipGuid == tailGuid.value());
193 }
194 else
195 {
196 BOOST_CHECK(readTailRelationshipGuid != ProfilingGuid(0));
197 }
198
199 // Update the offset to allow parsing to be continued after this function returns
200 offset += uint64_t_size;
201}
202
Keith Davis97da5e22020-03-05 16:25:28 +0000203void VerifyTimelineEntityBinaryPacketData(Optional<ProfilingGuid> guid,
204 const unsigned char* readableData,
205 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000206{
207 BOOST_ASSERT(readableData);
208
209 // Utils
210 unsigned int uint32_t_size = sizeof(uint32_t);
211 unsigned int uint64_t_size = sizeof(uint64_t);
212
213 // Reading TimelineEntityClassBinaryPacket
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000214 // Check the decl_id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000215 uint32_t entityDeclId = ReadUint32(readableData, offset);
216 BOOST_CHECK(entityDeclId == 1);
217
218 // Check the profiling GUID
219 offset += uint32_t_size;
220 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
221
222 if (guid.has_value())
223 {
224 BOOST_CHECK(readProfilingGuid == guid.value());
225 }
226 else
227 {
228 BOOST_CHECK(readProfilingGuid != ProfilingGuid(0));
229 }
230
231 offset += uint64_t_size;
232}
233
234void VerifyTimelineEventBinaryPacket(Optional<uint64_t> timestamp,
235 Optional<std::thread::id> threadId,
236 Optional<ProfilingGuid> eventGuid,
237 const unsigned char* readableData,
238 unsigned int& offset)
239{
240 BOOST_ASSERT(readableData);
241
242 // Utils
243 unsigned int uint32_t_size = sizeof(uint32_t);
244 unsigned int uint64_t_size = sizeof(uint64_t);
245 unsigned int threadId_size = sizeof(std::thread::id);
246
247 // Reading TimelineEventBinaryPacket
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000248 // Check the decl_id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000249 uint32_t entityDeclId = ReadUint32(readableData, offset);
250 BOOST_CHECK(entityDeclId == 4);
251
252 // Check the timestamp
253 offset += uint32_t_size;
254 uint64_t readTimestamp = ReadUint64(readableData, offset);
255 if (timestamp.has_value())
256 {
257 BOOST_CHECK(readTimestamp == timestamp.value());
258 }
259 else
260 {
261 BOOST_CHECK(readTimestamp != 0);
262 }
263
264 // Check the thread id
265 offset += uint64_t_size;
266 std::vector<uint8_t> readThreadId(threadId_size, 0);
267 ReadBytes(readableData, offset, threadId_size, readThreadId.data());
268 if (threadId.has_value())
269 {
270 BOOST_CHECK(readThreadId == threadId.value());
271 }
272 else
273 {
274 BOOST_CHECK(readThreadId == std::this_thread::get_id());
275 }
276
277 // Check the event GUID
278 offset += threadId_size;
279 uint64_t readEventGuid = ReadUint64(readableData, offset);
280 if (eventGuid.has_value())
281 {
282 BOOST_CHECK(readEventGuid == eventGuid.value());
283 }
284 else
285 {
286 BOOST_CHECK(readEventGuid != ProfilingGuid(0));
287 }
288
289 offset += uint64_t_size;
290}
291
292void VerifyPostOptimisationStructureTestImpl(armnn::BackendId backendId)
293{
294 using namespace armnn;
295
296 // Create runtime in which test will run
297 armnn::IRuntime::CreationOptions options;
298 options.m_ProfilingOptions.m_EnableProfiling = true;
Sadik Armagan3184c902020-03-18 10:57:30 +0000299// armnn::IRuntimePtr runtime(armnn::IRuntime::Create(options));
300 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}