blob: 8de69f14ec81aaa3a45f96b8797a486451e99715 [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;
Keith Davis33ed2212020-03-30 10:43:41 +0100300 options.m_ProfilingOptions.m_TimelineEnabled = true;
Sadik Armagan3184c902020-03-18 10:57:30 +0000301 armnn::Runtime runtime(options);
Keith Davis33ed2212020-03-30 10:43:41 +0100302 GetProfilingService(&runtime).ResetExternalProfilingOptions(options.m_ProfilingOptions, false);
303
304 profiling::ProfilingServiceRuntimeHelper profilingServiceHelper(GetProfilingService(&runtime));
305 profilingServiceHelper.ForceTransitionToState(ProfilingState::NotConnected);
306 profilingServiceHelper.ForceTransitionToState(ProfilingState::WaitingForAck);
307 profilingServiceHelper.ForceTransitionToState(ProfilingState::Active);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000308
309 // build up the structure of the network
310 INetworkPtr net(INetwork::Create());
311
312 // Convolution details
313 TensorInfo inputInfo({ 1, 2, 5, 1 }, DataType::Float32);
Keith Davis97da5e22020-03-05 16:25:28 +0000314 TensorInfo weightInfo({ 3, 2, 3, 1 }, DataType::Float32);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000315 TensorInfo biasInfo({ 3 }, DataType::Float32);
Keith Davis97da5e22020-03-05 16:25:28 +0000316 TensorInfo outputInfo({ 1, 3, 7, 1 }, DataType::Float32);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000317 std::vector<float> weightsData{
Keith Davis97da5e22020-03-05 16:25:28 +0000318 1.0f, 0.0f, 0.0f,
319 0.0f, 2.0f, -1.5f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000320
Keith Davis97da5e22020-03-05 16:25:28 +0000321 0.0f, 0.0f, 0.0f,
322 0.2f, 0.2f, 0.2f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000323
Keith Davis97da5e22020-03-05 16:25:28 +0000324 0.5f, 0.0f, 0.5f,
325 0.0f, -1.0f, 0.0f
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000326 };
327 ConstTensor weights(weightInfo, weightsData);
328
329 Optional<ConstTensor> optionalBiases;
330 std::vector<float> biasesData{ 1.0f, 0.0f, 0.0f };
331 ConstTensor biases(biasInfo, biasesData);
332 optionalBiases = Optional<ConstTensor>(biases);
333
334 // Input layer
335 IConnectableLayer* input = net->AddInputLayer(0, "input");
336
337 // Convolution2d layer
338 Convolution2dDescriptor conv2dDesc;
Keith Davis97da5e22020-03-05 16:25:28 +0000339 conv2dDesc.m_StrideX = 1;
340 conv2dDesc.m_StrideY = 1;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000341 conv2dDesc.m_PadLeft = 0;
342 conv2dDesc.m_PadRight = 0;
343 conv2dDesc.m_PadTop = 2;
344 conv2dDesc.m_PadBottom = 2;
345 conv2dDesc.m_BiasEnabled = true;
346 IConnectableLayer* conv2d = net->AddConvolution2dLayer(conv2dDesc, weights, optionalBiases);
347
348 // Activation layer
349 armnn::ActivationDescriptor activationDesc;
350 armnn::IConnectableLayer* const activation = net->AddActivationLayer(activationDesc, "activation");
351
352 // Output layer
353 IConnectableLayer* output = net->AddOutputLayer(0, "output");
354
355 input->GetOutputSlot(0).Connect(conv2d->GetInputSlot(0));
356 conv2d->GetOutputSlot(0).Connect(activation->GetInputSlot(0));
357 activation->GetOutputSlot(0).Connect(output->GetInputSlot(0));
358
359 input->GetOutputSlot(0).SetTensorInfo(inputInfo);
360 conv2d->GetOutputSlot(0).SetTensorInfo(outputInfo);
361 activation->GetOutputSlot(0).SetTensorInfo(outputInfo);
362
363 // optimize the network
364 std::vector<armnn::BackendId> backends = { backendId };
Sadik Armagan3184c902020-03-18 10:57:30 +0000365 IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime.GetDeviceSpec());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000366
367 ProfilingGuid optNetGuid = optNet->GetGuid();
368
369 // Load it into the runtime. It should success.
370 armnn::NetworkId netId;
Sadik Armagan3184c902020-03-18 10:57:30 +0000371 BOOST_TEST(runtime.LoadNetwork(netId, std::move(optNet)) == Status::Success);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000372
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000373 profiling::BufferManager& bufferManager = profilingServiceHelper.GetProfilingBufferManager();
374 auto readableBuffer = bufferManager.GetReadableBuffer();
375
376 // Profiling is enable, the post-optimisation structure should be created
377 BOOST_CHECK(readableBuffer != nullptr);
378
379 unsigned int size = readableBuffer->GetSize();
Keith Davis97da5e22020-03-05 16:25:28 +0000380 BOOST_CHECK(size == 1556);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000381
382 const unsigned char* readableData = readableBuffer->GetReadableData();
383 BOOST_CHECK(readableData != nullptr);
384
385 unsigned int offset = 0;
386
Keith Davis97da5e22020-03-05 16:25:28 +0000387 // Verify Header
388 VerifyTimelineHeaderBinary(readableData, offset, 1548);
389
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000390 // Post-optimisation network
391 // Network entity
Keith Davis97da5e22020-03-05 16:25:28 +0000392 VerifyTimelineEntityBinaryPacketData(optNetGuid, readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000393
394 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000395 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
396 EmptyOptional(),
397 optNetGuid,
398 EmptyOptional(),
399 readableData,
400 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000401
402 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000403 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
404 EmptyOptional(),
405 EmptyOptional(),
406 LabelsAndEventClasses::TYPE_GUID,
407 readableData,
408 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000409
410 // Input layer
411 // Input layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000412 VerifyTimelineEntityBinaryPacketData(input->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000413
414 // Name Entity
Keith Davis97da5e22020-03-05 16:25:28 +0000415 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "input", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000416
417 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000418 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
419 EmptyOptional(),
420 input->GetGuid(),
421 EmptyOptional(),
422 readableData,
423 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000424
425 // Name label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000426 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
427 EmptyOptional(),
428 EmptyOptional(),
429 LabelsAndEventClasses::NAME_GUID,
430 readableData,
431 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000432
433 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000434 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
435 EmptyOptional(),
436 input->GetGuid(),
437 EmptyOptional(),
438 readableData,
439 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000440
441 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000442 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
443 EmptyOptional(),
444 EmptyOptional(),
445 LabelsAndEventClasses::TYPE_GUID,
446 readableData,
447 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000448
449 // Network - Input layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000450 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
451 EmptyOptional(),
452 optNetGuid,
453 input->GetGuid(),
454 readableData,
455 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000456
457 // Conv2d layer
458 // Conv2d layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000459 VerifyTimelineEntityBinaryPacketData(conv2d->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000460
461 // Name entity
Keith Davis97da5e22020-03-05 16:25:28 +0000462 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "<Unnamed>", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000463
464 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000465 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
466 EmptyOptional(),
467 conv2d->GetGuid(),
468 EmptyOptional(),
469 readableData,
470 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000471
472 // Name label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000473 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
474 EmptyOptional(),
475 EmptyOptional(),
476 LabelsAndEventClasses::NAME_GUID,
477 readableData,
478 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000479
480 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000481 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
482 EmptyOptional(),
483 conv2d->GetGuid(),
484 EmptyOptional(),
485 readableData,
486 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000487
488 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000489 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
490 EmptyOptional(),
491 EmptyOptional(),
492 LabelsAndEventClasses::TYPE_GUID,
493 readableData,
494 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000495
496 // Network - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000497 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
498 EmptyOptional(),
499 optNetGuid,
500 conv2d->GetGuid(),
501 readableData,
502 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000503
504 // Input layer - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000505 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
506 EmptyOptional(),
507 input->GetGuid(),
508 conv2d->GetGuid(),
509 readableData,
510 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000511
512 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000513 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
514 EmptyOptional(),
515 EmptyOptional(),
516 LabelsAndEventClasses::CONNECTION_GUID,
517 readableData,
518 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000519
520 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000521 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
522 EmptyOptional(),
523 EmptyOptional(),
524 LabelsAndEventClasses::TYPE_GUID,
525 readableData,
526 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000527
528 // Conv2d workload
529 // Conv2d workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000530 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000531
532 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000533 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
534 EmptyOptional(),
535 EmptyOptional(),
536 EmptyOptional(),
537 readableData,
538 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000539
540 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000541 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
542 EmptyOptional(),
543 EmptyOptional(),
544 LabelsAndEventClasses::TYPE_GUID,
545 readableData,
546 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000547
548 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000549 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000550
551 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000552 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
553 EmptyOptional(),
554 EmptyOptional(),
555 EmptyOptional(),
556 readableData,
557 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000558
559 // BackendId label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000560 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
561 EmptyOptional(),
562 EmptyOptional(),
563 LabelsAndEventClasses::BACKENDID_GUID,
564 readableData,
565 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000566
567 // Conv2d layer - Conv2d workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000568 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
569 EmptyOptional(),
570 conv2d->GetGuid(),
571 EmptyOptional(),
572 readableData,
573 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000574
575 // Activation layer
576 // Activation layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000577 VerifyTimelineEntityBinaryPacketData(activation->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000578
579 // Name entity
Keith Davis97da5e22020-03-05 16:25:28 +0000580 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "activation", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000581
582 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000583 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
584 EmptyOptional(),
585 activation->GetGuid(),
586 EmptyOptional(),
587 readableData,
588 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000589
590 // Name label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000591 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
592 EmptyOptional(),
593 EmptyOptional(),
594 LabelsAndEventClasses::NAME_GUID,
595 readableData,
596 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000597
598 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000599 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
600 EmptyOptional(),
601 activation->GetGuid(),
602 EmptyOptional(),
603 readableData,
604 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000605
606 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000607 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
608 EmptyOptional(),
609 EmptyOptional(),
610 LabelsAndEventClasses::TYPE_GUID,
611 readableData,
612 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000613
614 // Network - Activation layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000615 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
616 EmptyOptional(),
617 optNetGuid,
618 activation->GetGuid(),
619 readableData,
620 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000621
622 // Conv2d layer - Activation layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000623 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
624 EmptyOptional(),
625 conv2d->GetGuid(),
626 activation->GetGuid(),
627 readableData,
628 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000629
630 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000631 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
632 EmptyOptional(),
633 EmptyOptional(),
634 LabelsAndEventClasses::CONNECTION_GUID,
635 readableData,
636 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000637
638 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000639 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
640 EmptyOptional(),
641 EmptyOptional(),
642 LabelsAndEventClasses::TYPE_GUID,
643 readableData,
644 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000645
646 // Activation workload
647 // Activation workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000648 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000649
650 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000651 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
652 EmptyOptional(),
653 EmptyOptional(),
654 EmptyOptional(),
655 readableData,
656 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000657
658 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000659 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
660 EmptyOptional(),
661 EmptyOptional(),
662 LabelsAndEventClasses::TYPE_GUID,
663 readableData,
664 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000665
666 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000667 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000668
669 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000670 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
671 EmptyOptional(),
672 EmptyOptional(),
673 EmptyOptional(),
674 readableData,
675 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000676
677 // BackendId label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000678 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
679 EmptyOptional(),
680 EmptyOptional(),
681 LabelsAndEventClasses::BACKENDID_GUID,
682 readableData,
683 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000684
685 // Activation layer - Activation workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000686 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
687 EmptyOptional(),
688 activation->GetGuid(),
689 EmptyOptional(),
690 readableData,
691 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000692
693 // Output layer
694 // Output layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000695 VerifyTimelineEntityBinaryPacketData(output->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000696
697 // Name entity
Keith Davis97da5e22020-03-05 16:25:28 +0000698 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "output", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000699
700 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000701 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
702 EmptyOptional(),
703 output->GetGuid(),
704 EmptyOptional(),
705 readableData,
706 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000707
708 // Name label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000709 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
710 EmptyOptional(),
711 EmptyOptional(),
712 LabelsAndEventClasses::NAME_GUID,
713 readableData,
714 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000715
716 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000717 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
718 EmptyOptional(),
719 output->GetGuid(),
720 EmptyOptional(),
721 readableData,
722 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000723
724 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000725 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
726 EmptyOptional(),
727 EmptyOptional(),
728 LabelsAndEventClasses::TYPE_GUID,
729 readableData,
730 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000731
732 // Network - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000733 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
734 EmptyOptional(),
735 optNetGuid,
736 output->GetGuid(),
737 readableData,
738 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000739
740 // Activation layer - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000741 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
742 EmptyOptional(),
743 activation->GetGuid(),
744 output->GetGuid(),
745 readableData,
746 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000747
748 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000749 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
750 EmptyOptional(),
751 EmptyOptional(),
752 LabelsAndEventClasses::CONNECTION_GUID,
753 readableData,
754 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000755
756 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000757 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
758 EmptyOptional(),
759 EmptyOptional(),
760 LabelsAndEventClasses::TYPE_GUID,
761 readableData,
762 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000763
764 bufferManager.MarkRead(readableBuffer);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000765
766 // Creates structures for input & output.
767 std::vector<float> inputData(inputInfo.GetNumElements());
768 std::vector<float> outputData(outputInfo.GetNumElements());
769
770 InputTensors inputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000771 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000772 {0, ConstTensor(runtime.GetInputTensorInfo(netId, 0), inputData.data())}
Keith Davis97da5e22020-03-05 16:25:28 +0000773 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000774 OutputTensors outputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000775 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000776 {0, Tensor(runtime.GetOutputTensorInfo(netId, 0), outputData.data())}
Keith Davis97da5e22020-03-05 16:25:28 +0000777 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000778
779 // Does the inference.
Sadik Armagan3184c902020-03-18 10:57:30 +0000780 runtime.EnqueueWorkload(netId, inputTensors, outputTensors);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000781
Finn Williamsb6a402f2020-03-24 13:46:22 +0000782 // Get readable buffer for input workload
783 auto inputReadableBuffer = bufferManager.GetReadableBuffer();
784 BOOST_CHECK(inputReadableBuffer != nullptr);
David Monahan6198fe02019-12-02 08:35:43 +0000785
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000786 // Get readable buffer for output workload
787 auto outputReadableBuffer = bufferManager.GetReadableBuffer();
788 BOOST_CHECK(outputReadableBuffer != nullptr);
789
Finn Williamsb6a402f2020-03-24 13:46:22 +0000790 // Get readable buffer for inference timeline
791 auto inferenceReadableBuffer = bufferManager.GetReadableBuffer();
792 BOOST_CHECK(inferenceReadableBuffer != nullptr);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000793
794 // Validate input workload data
795 size = inputReadableBuffer->GetSize();
Keith Davis97da5e22020-03-05 16:25:28 +0000796 BOOST_CHECK(size == 204);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000797
798 readableData = inputReadableBuffer->GetReadableData();
799 BOOST_CHECK(readableData != nullptr);
800
801 offset = 0;
802
Keith Davis97da5e22020-03-05 16:25:28 +0000803 // Verify Header
804 VerifyTimelineHeaderBinary(readableData, offset, 196);
805
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000806 // Input workload
807 // Input workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000808 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000809
810 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000811 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
812 EmptyOptional(),
813 EmptyOptional(),
814 EmptyOptional(),
815 readableData,
816 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000817
818 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000819 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
820 EmptyOptional(),
821 EmptyOptional(),
822 LabelsAndEventClasses::TYPE_GUID,
823 readableData,
824 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000825
826 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000827 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000828
829 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000830 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
831 EmptyOptional(),
832 EmptyOptional(),
833 EmptyOptional(),
834 readableData,
835 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000836
837 // BackendId label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000838 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
839 EmptyOptional(),
840 EmptyOptional(),
841 LabelsAndEventClasses::BACKENDID_GUID,
842 readableData,
843 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000844
845 // Input layer - Input workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000846 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
847 EmptyOptional(),
848 input->GetGuid(),
849 EmptyOptional(),
850 readableData,
851 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000852
853 bufferManager.MarkRead(inputReadableBuffer);
854
855 // Validate output workload data
856 size = outputReadableBuffer->GetSize();
Keith Davis97da5e22020-03-05 16:25:28 +0000857 BOOST_CHECK(size == 204);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000858
859 readableData = outputReadableBuffer->GetReadableData();
860 BOOST_CHECK(readableData != nullptr);
861
862 offset = 0;
863
Keith Davis97da5e22020-03-05 16:25:28 +0000864 // Verify Header
865 VerifyTimelineHeaderBinary(readableData, offset, 196);
866
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000867 // Output workload
868 // Output workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000869 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000870
871 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000872 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
873 EmptyOptional(),
874 EmptyOptional(),
875 EmptyOptional(),
876 readableData,
877 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000878
879 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000880 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
881 EmptyOptional(),
882 EmptyOptional(),
883 LabelsAndEventClasses::TYPE_GUID,
884 readableData,
885 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000886
887 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000888 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000889
890 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000891 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
892 EmptyOptional(),
893 EmptyOptional(),
894 EmptyOptional(),
895 readableData,
896 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000897
898 // BackendId label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000899 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
900 EmptyOptional(),
901 EmptyOptional(),
902 LabelsAndEventClasses::BACKENDID_GUID,
903 readableData,
904 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000905
906 // Output layer - Output workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000907 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
908 EmptyOptional(),
909 output->GetGuid(),
910 EmptyOptional(),
911 readableData,
912 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000913
914 bufferManager.MarkRead(outputReadableBuffer);
David Monahan6198fe02019-12-02 08:35:43 +0000915
916 // Validate inference data
917 size = inferenceReadableBuffer->GetSize();
Jan Eilersa10e2a22020-03-26 12:04:54 +0000918
919 unsigned int threadId_size = sizeof(std::thread::id); // Is platform dependent
920 BOOST_CHECK(size == 1516 + 10 * threadId_size);
David Monahan6198fe02019-12-02 08:35:43 +0000921
922 readableData = inferenceReadableBuffer->GetReadableData();
923 BOOST_CHECK(readableData != nullptr);
924
925 offset = 0;
926
Keith Davis97da5e22020-03-05 16:25:28 +0000927 // Verify Header
Jan Eilersa10e2a22020-03-26 12:04:54 +0000928 VerifyTimelineHeaderBinary(readableData, offset, 1508 + 10 * threadId_size);
Keith Davis97da5e22020-03-05 16:25:28 +0000929
David Monahan6198fe02019-12-02 08:35:43 +0000930 // Inference timeline trace
931 // Inference entity
Keith Davis97da5e22020-03-05 16:25:28 +0000932 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000933
934 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000935 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
936 EmptyOptional(),
937 EmptyOptional(),
938 LabelsAndEventClasses::INFERENCE_GUID,
939 readableData,
940 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000941
942 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000943 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
944 EmptyOptional(),
945 EmptyOptional(),
946 LabelsAndEventClasses::TYPE_GUID,
947 readableData,
948 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000949
950 // Network - Inference relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000951 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
952 EmptyOptional(),
953 optNetGuid,
954 EmptyOptional(),
955 readableData,
956 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000957
958 // Start Inference life
959 // Event packet - timeline, threadId, eventGuid
960 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
961
962 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000963 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
964 EmptyOptional(),
965 EmptyOptional(),
966 EmptyOptional(),
967 readableData,
968 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000969
970 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000971 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
972 EmptyOptional(),
973 EmptyOptional(),
974 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
975 readableData,
976 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000977
978 // Execution
979 // Input workload execution
980 // Input workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +0000981 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000982
983 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000984 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
985 EmptyOptional(),
986 EmptyOptional(),
987 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
988 readableData,
989 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000990
991 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000992 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
993 EmptyOptional(),
994 EmptyOptional(),
995 LabelsAndEventClasses::TYPE_GUID,
996 readableData,
997 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000998
999 // Inference - 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 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001008 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1009 EmptyOptional(),
1010 EmptyOptional(),
1011 EmptyOptional(),
1012 readableData,
1013 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001014
1015 // Start Input workload execution life
1016 // Event packet - timeline, threadId, eventGuid
1017 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1018
1019 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001020 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1021 EmptyOptional(),
1022 EmptyOptional(),
1023 EmptyOptional(),
1024 readableData,
1025 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001026
1027 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001028 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1029 EmptyOptional(),
1030 EmptyOptional(),
1031 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1032 readableData,
1033 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001034
1035 // End of Input workload execution life
1036 // Event packet - timeline, threadId, eventGuid
1037 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1038
1039 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001040 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1041 EmptyOptional(),
1042 EmptyOptional(),
1043 EmptyOptional(),
1044 readableData,
1045 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001046
1047 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001048 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1049 EmptyOptional(),
1050 EmptyOptional(),
1051 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1052 readableData,
1053 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001054
1055 // Conv2d workload execution
1056 // Conv2d workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +00001057 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001058
1059 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001060 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1061 EmptyOptional(),
1062 EmptyOptional(),
1063 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1064 readableData,
1065 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001066
1067 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001068 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1069 EmptyOptional(),
1070 EmptyOptional(),
1071 LabelsAndEventClasses::TYPE_GUID,
1072 readableData,
1073 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001074
1075 // Inference - 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 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001084 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1085 EmptyOptional(),
1086 EmptyOptional(),
1087 EmptyOptional(),
1088 readableData,
1089 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001090
1091 // Start Conv2d workload execution life
1092 // Event packet - timeline, threadId, eventGuid
1093 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1094
1095 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001096 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1097 EmptyOptional(),
1098 EmptyOptional(),
1099 EmptyOptional(),
1100 readableData,
1101 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001102
1103 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001104 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1105 EmptyOptional(),
1106 EmptyOptional(),
1107 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1108 readableData,
1109 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001110
1111 // End of Conv2d workload execution life
1112 // Event packet - timeline, threadId, eventGuid
1113 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1114
1115 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001116 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1117 EmptyOptional(),
1118 EmptyOptional(),
1119 EmptyOptional(),
1120 readableData,
1121 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001122
1123 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001124 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1125 EmptyOptional(),
1126 EmptyOptional(),
1127 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1128 readableData,
1129 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001130
1131 // Activation workload execution
1132 // Activation workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +00001133 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001134
1135 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001136 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1137 EmptyOptional(),
1138 EmptyOptional(),
1139 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1140 readableData,
1141 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001142
1143 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001144 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1145 EmptyOptional(),
1146 EmptyOptional(),
1147 LabelsAndEventClasses::TYPE_GUID,
1148 readableData,
1149 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001150
1151 // Inference - 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 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001160 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1161 EmptyOptional(),
1162 EmptyOptional(),
1163 EmptyOptional(),
1164 readableData,
1165 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001166
1167 // Start Activation workload execution life
1168 // Event packet - timeline, threadId, eventGuid
1169 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1170
1171 // Activation workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001172 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1173 EmptyOptional(),
1174 EmptyOptional(),
1175 EmptyOptional(),
1176 readableData,
1177 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001178
1179 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001180 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1181 EmptyOptional(),
1182 EmptyOptional(),
1183 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1184 readableData,
1185 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001186
1187 // End of Activation workload execution life
1188 // Event packet - timeline, threadId, eventGuid
1189 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1190
1191 // Activation workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001192 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1193 EmptyOptional(),
1194 EmptyOptional(),
1195 EmptyOptional(),
1196 readableData,
1197 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001198
1199 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001200 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1201 EmptyOptional(),
1202 EmptyOptional(),
1203 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1204 readableData,
1205 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001206
1207 // Output workload execution
1208 // Output workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +00001209 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001210
1211 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001212 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1213 EmptyOptional(),
1214 EmptyOptional(),
1215 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1216 readableData,
1217 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001218
1219 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001220 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1221 EmptyOptional(),
1222 EmptyOptional(),
1223 LabelsAndEventClasses::TYPE_GUID,
1224 readableData,
1225 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001226
1227 // Inference - 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 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001236 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1237 EmptyOptional(),
1238 EmptyOptional(),
1239 EmptyOptional(),
1240 readableData,
1241 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001242
1243 // Start Output workload execution life
1244 // Event packet - timeline, threadId, eventGuid
1245 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1246
1247 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001248 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1249 EmptyOptional(),
1250 EmptyOptional(),
1251 EmptyOptional(),
1252 readableData,
1253 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001254
1255 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001256 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1257 EmptyOptional(),
1258 EmptyOptional(),
1259 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1260 readableData,
1261 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001262
1263 // End of Normalize workload execution life
1264 // Event packet - timeline, threadId, eventGuid
1265 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1266
1267 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001268 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1269 EmptyOptional(),
1270 EmptyOptional(),
1271 EmptyOptional(),
1272 readableData,
1273 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001274
1275 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001276 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1277 EmptyOptional(),
1278 EmptyOptional(),
1279 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1280 readableData,
1281 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001282
1283 // End of Inference life
1284 // Event packet - timeline, threadId, eventGuid
1285 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1286
1287 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001288 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1289 EmptyOptional(),
1290 EmptyOptional(),
1291 EmptyOptional(),
1292 readableData,
1293 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001294
1295 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001296 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1297 EmptyOptional(),
1298 EmptyOptional(),
1299 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1300 readableData,
1301 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001302
1303 bufferManager.MarkRead(inferenceReadableBuffer);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00001304}