blob: c1386820e88c29fc9c076ebddd3f38af65452163 [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
Finn Williamsa0de0562020-04-22 12:27:37 +010017uint32_t GetStreamMetaDataPacketSize()
18{
19 uint32_t sizeUint32 = sizeof(uint32_t);
20 uint32_t payloadSize = 0;
21 payloadSize += boost::numeric_cast<uint32_t>(GetSoftwareInfo().size()) + 1;
22 payloadSize += boost::numeric_cast<uint32_t>(GetHardwareVersion().size()) + 1;
23 payloadSize += boost::numeric_cast<uint32_t>(GetSoftwareVersion().size()) + 1;
24 payloadSize += boost::numeric_cast<uint32_t>(GetProcessName().size()) + 1;
25
26 // Add packetVersionEntries
27 payloadSize += 6 * 2 * sizeUint32;
28 // Add packetVersionCountSize
29 payloadSize += sizeUint32;
30
31 uint32_t headerSize = 2 * sizeUint32;
32 uint32_t bodySize = 10 * sizeUint32;
33
34 return headerSize + bodySize + payloadSize;
35}
36
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000037inline unsigned int OffsetToNextWord(unsigned int numberOfBytes)
38{
39 unsigned int uint32_t_size = sizeof(uint32_t);
40
41 unsigned int remainder = numberOfBytes % uint32_t_size;
42 if (remainder == 0)
43 {
44 return numberOfBytes;
45 }
46
47 return numberOfBytes + uint32_t_size - remainder;
48}
49
Keith Davis97da5e22020-03-05 16:25:28 +000050void VerifyTimelineHeaderBinary(const unsigned char* readableData,
51 unsigned int& offset,
52 uint32_t packetDataLength)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000053{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +010054 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000055
56 // Utils
57 unsigned int uint32_t_size = sizeof(uint32_t);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000058
Keith Davis97da5e22020-03-05 16:25:28 +000059 // Check the TimelineEventClassBinaryPacket header
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000060 uint32_t entityBinaryPacketHeaderWord0 = ReadUint32(readableData, offset);
61 uint32_t entityBinaryPacketFamily = (entityBinaryPacketHeaderWord0 >> 26) & 0x0000003F;
62 uint32_t entityBinaryPacketClass = (entityBinaryPacketHeaderWord0 >> 19) & 0x0000007F;
63 uint32_t entityBinaryPacketType = (entityBinaryPacketHeaderWord0 >> 16) & 0x00000007;
64 uint32_t entityBinaryPacketStreamId = (entityBinaryPacketHeaderWord0 >> 0) & 0x00000007;
65 BOOST_CHECK(entityBinaryPacketFamily == 1);
66 BOOST_CHECK(entityBinaryPacketClass == 0);
67 BOOST_CHECK(entityBinaryPacketType == 1);
68 BOOST_CHECK(entityBinaryPacketStreamId == 0);
69 offset += uint32_t_size;
70 uint32_t entityBinaryPacketHeaderWord1 = ReadUint32(readableData, offset);
71 uint32_t eventBinaryPacketSequenceNumber = (entityBinaryPacketHeaderWord1 >> 24) & 0x00000001;
72 uint32_t eventBinaryPacketDataLength = (entityBinaryPacketHeaderWord1 >> 0) & 0x00FFFFFF;
73 BOOST_CHECK(eventBinaryPacketSequenceNumber == 0);
Keith Davis97da5e22020-03-05 16:25:28 +000074 BOOST_CHECK(eventBinaryPacketDataLength == packetDataLength);
75 offset += uint32_t_size;
76}
77
78void VerifyTimelineLabelBinaryPacketData(Optional<ProfilingGuid> guid,
79 const std::string& label,
80 const unsigned char* readableData,
81 unsigned int& offset)
82{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +010083 ARMNN_ASSERT(readableData);
Keith Davis97da5e22020-03-05 16:25:28 +000084
85 // Utils
86 unsigned int uint32_t_size = sizeof(uint32_t);
87 unsigned int uint64_t_size = sizeof(uint64_t);
88 unsigned int label_size = boost::numeric_cast<unsigned int>(label.size());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000089
90 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000091 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
92 BOOST_CHECK(eventClassDeclId == 0);
93
94 // Check the profiling GUID
95 offset += uint32_t_size;
96 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
97 if (guid.has_value())
98 {
99 BOOST_CHECK(readProfilingGuid == guid.value());
100 }
101 else
102 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000103 armnn::profiling::ProfilingService profilingService;
104 BOOST_CHECK(readProfilingGuid == profilingService.GetStaticId(label));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000105 }
106
107 // Check the SWTrace label
108 offset += uint64_t_size;
109 uint32_t swTraceLabelLength = ReadUint32(readableData, offset);
Keith Davis97da5e22020-03-05 16:25:28 +0000110 BOOST_CHECK(swTraceLabelLength == label_size + 1); // Label length including the null-terminator
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000111 offset += uint32_t_size;
112 BOOST_CHECK(std::memcmp(readableData + offset, // Offset to the label in the buffer
Keith Davis97da5e22020-03-05 16:25:28 +0000113 label.data(), // The original label
114 swTraceLabelLength - 1) == 0); // The length of the label
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000115
116 // SWTrace strings are written in blocks of words, so the offset has to be updated to the next whole word
117 offset += OffsetToNextWord(swTraceLabelLength);
118}
119
Keith Davis97da5e22020-03-05 16:25:28 +0000120void VerifyTimelineEventClassBinaryPacketData(ProfilingGuid guid,
121 const unsigned char* readableData,
122 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000123{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100124 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000125
126 // Utils
127 unsigned int uint32_t_size = sizeof(uint32_t);
128 unsigned int uint64_t_size = sizeof(uint64_t);
129
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000130 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000131 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
132 BOOST_CHECK(eventClassDeclId == 2);
133
134 // Check the profiling GUID
135 offset += uint32_t_size;
136 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
137 BOOST_CHECK(readProfilingGuid == guid);
138
139 // Update the offset to allow parsing to be continued after this function returns
140 offset += uint64_t_size;
141}
142
Keith Davis97da5e22020-03-05 16:25:28 +0000143void VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType relationshipType,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000144 Optional<ProfilingGuid> relationshipGuid,
145 Optional<ProfilingGuid> headGuid,
146 Optional<ProfilingGuid> tailGuid,
147 const unsigned char* readableData,
148 unsigned int& offset)
149{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100150 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000151
152 uint32_t relationshipTypeUint = 0;
153 switch (relationshipType)
154 {
155 case ProfilingRelationshipType::RetentionLink:
156 relationshipTypeUint = 0;
157 break;
158 case ProfilingRelationshipType::ExecutionLink:
159 relationshipTypeUint = 1;
160 break;
161 case ProfilingRelationshipType::DataLink:
162 relationshipTypeUint = 2;
163 break;
164 case ProfilingRelationshipType::LabelLink:
165 relationshipTypeUint = 3;
166 break;
167 default:
168 BOOST_ERROR("Unknown relationship type");
169 }
170
171 // Utils
172 unsigned int uint32_t_size = sizeof(uint32_t);
173 unsigned int uint64_t_size = sizeof(uint64_t);
174
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000175 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000176 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
177 BOOST_CHECK(eventClassDeclId == 3);
178
179 // Check the relationship type
180 offset += uint32_t_size;
181 uint32_t readRelationshipTypeUint = ReadUint32(readableData, offset);
182 BOOST_CHECK(readRelationshipTypeUint == relationshipTypeUint);
183
184 // Check the relationship GUID
185 offset += uint32_t_size;
186 uint64_t readRelationshipGuid = ReadUint64(readableData, offset);
187 if (relationshipGuid.has_value())
188 {
189 BOOST_CHECK(readRelationshipGuid == relationshipGuid.value());
190 }
191 else
192 {
193 BOOST_CHECK(readRelationshipGuid != ProfilingGuid(0));
194 }
195
196 // Check the head of relationship GUID
197 offset += uint64_t_size;
198 uint64_t readHeadRelationshipGuid = ReadUint64(readableData, offset);
199 if (headGuid.has_value())
200 {
201 BOOST_CHECK(readHeadRelationshipGuid == headGuid.value());
202 }
203 else
204 {
205 BOOST_CHECK(readHeadRelationshipGuid != ProfilingGuid(0));
206 }
207
208 // Check the tail of relationship GUID
209 offset += uint64_t_size;
210 uint64_t readTailRelationshipGuid = ReadUint64(readableData, offset);
211 if (tailGuid.has_value())
212 {
213 BOOST_CHECK(readTailRelationshipGuid == tailGuid.value());
214 }
215 else
216 {
217 BOOST_CHECK(readTailRelationshipGuid != ProfilingGuid(0));
218 }
219
220 // Update the offset to allow parsing to be continued after this function returns
221 offset += uint64_t_size;
222}
223
Keith Davis97da5e22020-03-05 16:25:28 +0000224void VerifyTimelineEntityBinaryPacketData(Optional<ProfilingGuid> guid,
225 const unsigned char* readableData,
226 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000227{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100228 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000229
230 // Utils
231 unsigned int uint32_t_size = sizeof(uint32_t);
232 unsigned int uint64_t_size = sizeof(uint64_t);
233
234 // Reading TimelineEntityClassBinaryPacket
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000235 // Check the decl_id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000236 uint32_t entityDeclId = ReadUint32(readableData, offset);
237 BOOST_CHECK(entityDeclId == 1);
238
239 // Check the profiling GUID
240 offset += uint32_t_size;
241 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
242
243 if (guid.has_value())
244 {
245 BOOST_CHECK(readProfilingGuid == guid.value());
246 }
247 else
248 {
249 BOOST_CHECK(readProfilingGuid != ProfilingGuid(0));
250 }
251
252 offset += uint64_t_size;
253}
254
255void VerifyTimelineEventBinaryPacket(Optional<uint64_t> timestamp,
256 Optional<std::thread::id> threadId,
257 Optional<ProfilingGuid> eventGuid,
258 const unsigned char* readableData,
259 unsigned int& offset)
260{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100261 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000262
263 // Utils
264 unsigned int uint32_t_size = sizeof(uint32_t);
265 unsigned int uint64_t_size = sizeof(uint64_t);
266 unsigned int threadId_size = sizeof(std::thread::id);
267
268 // Reading TimelineEventBinaryPacket
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000269 // Check the decl_id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000270 uint32_t entityDeclId = ReadUint32(readableData, offset);
271 BOOST_CHECK(entityDeclId == 4);
272
273 // Check the timestamp
274 offset += uint32_t_size;
275 uint64_t readTimestamp = ReadUint64(readableData, offset);
276 if (timestamp.has_value())
277 {
278 BOOST_CHECK(readTimestamp == timestamp.value());
279 }
280 else
281 {
282 BOOST_CHECK(readTimestamp != 0);
283 }
284
285 // Check the thread id
286 offset += uint64_t_size;
287 std::vector<uint8_t> readThreadId(threadId_size, 0);
288 ReadBytes(readableData, offset, threadId_size, readThreadId.data());
289 if (threadId.has_value())
290 {
291 BOOST_CHECK(readThreadId == threadId.value());
292 }
293 else
294 {
295 BOOST_CHECK(readThreadId == std::this_thread::get_id());
296 }
297
298 // Check the event GUID
299 offset += threadId_size;
300 uint64_t readEventGuid = ReadUint64(readableData, offset);
301 if (eventGuid.has_value())
302 {
303 BOOST_CHECK(readEventGuid == eventGuid.value());
304 }
305 else
306 {
307 BOOST_CHECK(readEventGuid != ProfilingGuid(0));
308 }
309
310 offset += uint64_t_size;
311}
312
313void VerifyPostOptimisationStructureTestImpl(armnn::BackendId backendId)
314{
315 using namespace armnn;
316
317 // Create runtime in which test will run
318 armnn::IRuntime::CreationOptions options;
319 options.m_ProfilingOptions.m_EnableProfiling = true;
Keith Davis33ed2212020-03-30 10:43:41 +0100320 options.m_ProfilingOptions.m_TimelineEnabled = true;
Sadik Armagan3184c902020-03-18 10:57:30 +0000321 armnn::Runtime runtime(options);
Keith Davis33ed2212020-03-30 10:43:41 +0100322 GetProfilingService(&runtime).ResetExternalProfilingOptions(options.m_ProfilingOptions, false);
323
324 profiling::ProfilingServiceRuntimeHelper profilingServiceHelper(GetProfilingService(&runtime));
325 profilingServiceHelper.ForceTransitionToState(ProfilingState::NotConnected);
326 profilingServiceHelper.ForceTransitionToState(ProfilingState::WaitingForAck);
327 profilingServiceHelper.ForceTransitionToState(ProfilingState::Active);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000328
329 // build up the structure of the network
330 INetworkPtr net(INetwork::Create());
331
332 // Convolution details
333 TensorInfo inputInfo({ 1, 2, 5, 1 }, DataType::Float32);
Keith Davis97da5e22020-03-05 16:25:28 +0000334 TensorInfo weightInfo({ 3, 2, 3, 1 }, DataType::Float32);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000335 TensorInfo biasInfo({ 3 }, DataType::Float32);
Keith Davis97da5e22020-03-05 16:25:28 +0000336 TensorInfo outputInfo({ 1, 3, 7, 1 }, DataType::Float32);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000337 std::vector<float> weightsData{
Keith Davis97da5e22020-03-05 16:25:28 +0000338 1.0f, 0.0f, 0.0f,
339 0.0f, 2.0f, -1.5f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000340
Keith Davis97da5e22020-03-05 16:25:28 +0000341 0.0f, 0.0f, 0.0f,
342 0.2f, 0.2f, 0.2f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000343
Keith Davis97da5e22020-03-05 16:25:28 +0000344 0.5f, 0.0f, 0.5f,
345 0.0f, -1.0f, 0.0f
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000346 };
347 ConstTensor weights(weightInfo, weightsData);
348
349 Optional<ConstTensor> optionalBiases;
350 std::vector<float> biasesData{ 1.0f, 0.0f, 0.0f };
351 ConstTensor biases(biasInfo, biasesData);
352 optionalBiases = Optional<ConstTensor>(biases);
353
354 // Input layer
355 IConnectableLayer* input = net->AddInputLayer(0, "input");
356
357 // Convolution2d layer
358 Convolution2dDescriptor conv2dDesc;
Keith Davis97da5e22020-03-05 16:25:28 +0000359 conv2dDesc.m_StrideX = 1;
360 conv2dDesc.m_StrideY = 1;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000361 conv2dDesc.m_PadLeft = 0;
362 conv2dDesc.m_PadRight = 0;
363 conv2dDesc.m_PadTop = 2;
364 conv2dDesc.m_PadBottom = 2;
365 conv2dDesc.m_BiasEnabled = true;
366 IConnectableLayer* conv2d = net->AddConvolution2dLayer(conv2dDesc, weights, optionalBiases);
367
368 // Activation layer
369 armnn::ActivationDescriptor activationDesc;
370 armnn::IConnectableLayer* const activation = net->AddActivationLayer(activationDesc, "activation");
371
372 // Output layer
373 IConnectableLayer* output = net->AddOutputLayer(0, "output");
374
375 input->GetOutputSlot(0).Connect(conv2d->GetInputSlot(0));
376 conv2d->GetOutputSlot(0).Connect(activation->GetInputSlot(0));
377 activation->GetOutputSlot(0).Connect(output->GetInputSlot(0));
378
379 input->GetOutputSlot(0).SetTensorInfo(inputInfo);
380 conv2d->GetOutputSlot(0).SetTensorInfo(outputInfo);
381 activation->GetOutputSlot(0).SetTensorInfo(outputInfo);
382
383 // optimize the network
384 std::vector<armnn::BackendId> backends = { backendId };
Sadik Armagan3184c902020-03-18 10:57:30 +0000385 IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime.GetDeviceSpec());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000386
387 ProfilingGuid optNetGuid = optNet->GetGuid();
388
389 // Load it into the runtime. It should success.
390 armnn::NetworkId netId;
Sadik Armagan3184c902020-03-18 10:57:30 +0000391 BOOST_TEST(runtime.LoadNetwork(netId, std::move(optNet)) == Status::Success);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000392
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000393 profiling::BufferManager& bufferManager = profilingServiceHelper.GetProfilingBufferManager();
394 auto readableBuffer = bufferManager.GetReadableBuffer();
395
396 // Profiling is enable, the post-optimisation structure should be created
397 BOOST_CHECK(readableBuffer != nullptr);
398
399 unsigned int size = readableBuffer->GetSize();
Keith Davis97da5e22020-03-05 16:25:28 +0000400 BOOST_CHECK(size == 1556);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000401
402 const unsigned char* readableData = readableBuffer->GetReadableData();
403 BOOST_CHECK(readableData != nullptr);
404
405 unsigned int offset = 0;
406
Keith Davis97da5e22020-03-05 16:25:28 +0000407 // Verify Header
408 VerifyTimelineHeaderBinary(readableData, offset, 1548);
409
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000410 // Post-optimisation network
411 // Network entity
Keith Davis97da5e22020-03-05 16:25:28 +0000412 VerifyTimelineEntityBinaryPacketData(optNetGuid, readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000413
414 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000415 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
416 EmptyOptional(),
417 optNetGuid,
418 EmptyOptional(),
419 readableData,
420 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000421
422 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000423 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
424 EmptyOptional(),
425 EmptyOptional(),
426 LabelsAndEventClasses::TYPE_GUID,
427 readableData,
428 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000429
430 // Input layer
431 // Input layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000432 VerifyTimelineEntityBinaryPacketData(input->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000433
434 // Name Entity
Keith Davis97da5e22020-03-05 16:25:28 +0000435 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "input", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000436
437 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000438 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
439 EmptyOptional(),
440 input->GetGuid(),
441 EmptyOptional(),
442 readableData,
443 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000444
445 // Name label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000446 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
447 EmptyOptional(),
448 EmptyOptional(),
449 LabelsAndEventClasses::NAME_GUID,
450 readableData,
451 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000452
453 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000454 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
455 EmptyOptional(),
456 input->GetGuid(),
457 EmptyOptional(),
458 readableData,
459 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000460
461 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000462 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
463 EmptyOptional(),
464 EmptyOptional(),
465 LabelsAndEventClasses::TYPE_GUID,
466 readableData,
467 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000468
469 // Network - Input layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000470 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
471 EmptyOptional(),
472 optNetGuid,
473 input->GetGuid(),
474 readableData,
475 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000476
477 // Conv2d layer
478 // Conv2d layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000479 VerifyTimelineEntityBinaryPacketData(conv2d->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000480
481 // Name entity
Keith Davis97da5e22020-03-05 16:25:28 +0000482 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "<Unnamed>", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000483
484 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000485 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
486 EmptyOptional(),
487 conv2d->GetGuid(),
488 EmptyOptional(),
489 readableData,
490 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000491
492 // Name label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000493 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
494 EmptyOptional(),
495 EmptyOptional(),
496 LabelsAndEventClasses::NAME_GUID,
497 readableData,
498 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000499
500 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000501 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
502 EmptyOptional(),
503 conv2d->GetGuid(),
504 EmptyOptional(),
505 readableData,
506 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000507
508 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000509 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
510 EmptyOptional(),
511 EmptyOptional(),
512 LabelsAndEventClasses::TYPE_GUID,
513 readableData,
514 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000515
516 // Network - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000517 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
518 EmptyOptional(),
519 optNetGuid,
520 conv2d->GetGuid(),
521 readableData,
522 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000523
524 // Input layer - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000525 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
526 EmptyOptional(),
527 input->GetGuid(),
528 conv2d->GetGuid(),
529 readableData,
530 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 LabelsAndEventClasses::CONNECTION_GUID,
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 // Conv2d workload
549 // Conv2d workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000550 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000551
552 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000553 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
554 EmptyOptional(),
555 EmptyOptional(),
556 EmptyOptional(),
557 readableData,
558 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000559
560 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000561 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
562 EmptyOptional(),
563 EmptyOptional(),
564 LabelsAndEventClasses::TYPE_GUID,
565 readableData,
566 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000567
568 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000569 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000570
571 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000572 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
573 EmptyOptional(),
574 EmptyOptional(),
575 EmptyOptional(),
576 readableData,
577 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000578
579 // BackendId label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000580 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
581 EmptyOptional(),
582 EmptyOptional(),
583 LabelsAndEventClasses::BACKENDID_GUID,
584 readableData,
585 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000586
587 // Conv2d layer - Conv2d workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000588 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
589 EmptyOptional(),
590 conv2d->GetGuid(),
591 EmptyOptional(),
592 readableData,
593 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000594
595 // Activation layer
596 // Activation layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000597 VerifyTimelineEntityBinaryPacketData(activation->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000598
599 // Name entity
Keith Davis97da5e22020-03-05 16:25:28 +0000600 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "activation", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000601
602 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000603 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
604 EmptyOptional(),
605 activation->GetGuid(),
606 EmptyOptional(),
607 readableData,
608 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000609
610 // Name label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000611 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
612 EmptyOptional(),
613 EmptyOptional(),
614 LabelsAndEventClasses::NAME_GUID,
615 readableData,
616 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000617
618 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000619 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
620 EmptyOptional(),
621 activation->GetGuid(),
622 EmptyOptional(),
623 readableData,
624 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000625
626 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000627 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
628 EmptyOptional(),
629 EmptyOptional(),
630 LabelsAndEventClasses::TYPE_GUID,
631 readableData,
632 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000633
634 // Network - Activation layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000635 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
636 EmptyOptional(),
637 optNetGuid,
638 activation->GetGuid(),
639 readableData,
640 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000641
642 // Conv2d layer - Activation layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000643 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
644 EmptyOptional(),
645 conv2d->GetGuid(),
646 activation->GetGuid(),
647 readableData,
648 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 LabelsAndEventClasses::CONNECTION_GUID,
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 // Activation workload
667 // Activation workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000668 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000669
670 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000671 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
672 EmptyOptional(),
673 EmptyOptional(),
674 EmptyOptional(),
675 readableData,
676 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000677
678 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000679 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
680 EmptyOptional(),
681 EmptyOptional(),
682 LabelsAndEventClasses::TYPE_GUID,
683 readableData,
684 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000685
686 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000687 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000688
689 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000690 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
691 EmptyOptional(),
692 EmptyOptional(),
693 EmptyOptional(),
694 readableData,
695 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000696
697 // BackendId label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000698 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
699 EmptyOptional(),
700 EmptyOptional(),
701 LabelsAndEventClasses::BACKENDID_GUID,
702 readableData,
703 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000704
705 // Activation layer - Activation workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000706 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
707 EmptyOptional(),
708 activation->GetGuid(),
709 EmptyOptional(),
710 readableData,
711 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000712
713 // Output layer
714 // Output layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000715 VerifyTimelineEntityBinaryPacketData(output->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000716
717 // Name entity
Keith Davis97da5e22020-03-05 16:25:28 +0000718 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "output", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000719
720 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000721 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
722 EmptyOptional(),
723 output->GetGuid(),
724 EmptyOptional(),
725 readableData,
726 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000727
728 // Name label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000729 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
730 EmptyOptional(),
731 EmptyOptional(),
732 LabelsAndEventClasses::NAME_GUID,
733 readableData,
734 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000735
736 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000737 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
738 EmptyOptional(),
739 output->GetGuid(),
740 EmptyOptional(),
741 readableData,
742 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000743
744 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000745 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
746 EmptyOptional(),
747 EmptyOptional(),
748 LabelsAndEventClasses::TYPE_GUID,
749 readableData,
750 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000751
752 // Network - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000753 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
754 EmptyOptional(),
755 optNetGuid,
756 output->GetGuid(),
757 readableData,
758 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000759
760 // Activation layer - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000761 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
762 EmptyOptional(),
763 activation->GetGuid(),
764 output->GetGuid(),
765 readableData,
766 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000767
768 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000769 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
770 EmptyOptional(),
771 EmptyOptional(),
772 LabelsAndEventClasses::CONNECTION_GUID,
773 readableData,
774 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000775
776 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000777 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
778 EmptyOptional(),
779 EmptyOptional(),
780 LabelsAndEventClasses::TYPE_GUID,
781 readableData,
782 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000783
784 bufferManager.MarkRead(readableBuffer);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000785
786 // Creates structures for input & output.
787 std::vector<float> inputData(inputInfo.GetNumElements());
788 std::vector<float> outputData(outputInfo.GetNumElements());
789
790 InputTensors inputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000791 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000792 {0, ConstTensor(runtime.GetInputTensorInfo(netId, 0), inputData.data())}
Keith Davis97da5e22020-03-05 16:25:28 +0000793 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000794 OutputTensors outputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000795 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000796 {0, Tensor(runtime.GetOutputTensorInfo(netId, 0), outputData.data())}
Keith Davis97da5e22020-03-05 16:25:28 +0000797 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000798
799 // Does the inference.
Sadik Armagan3184c902020-03-18 10:57:30 +0000800 runtime.EnqueueWorkload(netId, inputTensors, outputTensors);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000801
Finn Williamsb6a402f2020-03-24 13:46:22 +0000802 // Get readable buffer for input workload
803 auto inputReadableBuffer = bufferManager.GetReadableBuffer();
804 BOOST_CHECK(inputReadableBuffer != nullptr);
David Monahan6198fe02019-12-02 08:35:43 +0000805
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000806 // Get readable buffer for output workload
807 auto outputReadableBuffer = bufferManager.GetReadableBuffer();
808 BOOST_CHECK(outputReadableBuffer != nullptr);
809
Finn Williamsb6a402f2020-03-24 13:46:22 +0000810 // Get readable buffer for inference timeline
811 auto inferenceReadableBuffer = bufferManager.GetReadableBuffer();
812 BOOST_CHECK(inferenceReadableBuffer != nullptr);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000813
814 // Validate input workload data
815 size = inputReadableBuffer->GetSize();
Keith Davis97da5e22020-03-05 16:25:28 +0000816 BOOST_CHECK(size == 204);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000817
818 readableData = inputReadableBuffer->GetReadableData();
819 BOOST_CHECK(readableData != nullptr);
820
821 offset = 0;
822
Keith Davis97da5e22020-03-05 16:25:28 +0000823 // Verify Header
824 VerifyTimelineHeaderBinary(readableData, offset, 196);
825
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000826 // Input workload
827 // Input workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000828 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000829
830 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000831 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
832 EmptyOptional(),
833 EmptyOptional(),
834 EmptyOptional(),
835 readableData,
836 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000837
838 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000839 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
840 EmptyOptional(),
841 EmptyOptional(),
842 LabelsAndEventClasses::TYPE_GUID,
843 readableData,
844 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000845
846 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000847 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000848
849 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000850 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
851 EmptyOptional(),
852 EmptyOptional(),
853 EmptyOptional(),
854 readableData,
855 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000856
857 // BackendId label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000858 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
859 EmptyOptional(),
860 EmptyOptional(),
861 LabelsAndEventClasses::BACKENDID_GUID,
862 readableData,
863 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000864
865 // Input layer - Input workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000866 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
867 EmptyOptional(),
868 input->GetGuid(),
869 EmptyOptional(),
870 readableData,
871 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000872
873 bufferManager.MarkRead(inputReadableBuffer);
874
875 // Validate output workload data
876 size = outputReadableBuffer->GetSize();
Keith Davis97da5e22020-03-05 16:25:28 +0000877 BOOST_CHECK(size == 204);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000878
879 readableData = outputReadableBuffer->GetReadableData();
880 BOOST_CHECK(readableData != nullptr);
881
882 offset = 0;
883
Keith Davis97da5e22020-03-05 16:25:28 +0000884 // Verify Header
885 VerifyTimelineHeaderBinary(readableData, offset, 196);
886
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000887 // Output workload
888 // Output workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000889 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000890
891 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000892 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
893 EmptyOptional(),
894 EmptyOptional(),
895 EmptyOptional(),
896 readableData,
897 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000898
899 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000900 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
901 EmptyOptional(),
902 EmptyOptional(),
903 LabelsAndEventClasses::TYPE_GUID,
904 readableData,
905 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000906
907 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000908 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000909
910 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000911 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
912 EmptyOptional(),
913 EmptyOptional(),
914 EmptyOptional(),
915 readableData,
916 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000917
918 // BackendId label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000919 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
920 EmptyOptional(),
921 EmptyOptional(),
922 LabelsAndEventClasses::BACKENDID_GUID,
923 readableData,
924 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000925
926 // Output layer - Output workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000927 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
928 EmptyOptional(),
929 output->GetGuid(),
930 EmptyOptional(),
931 readableData,
932 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000933
934 bufferManager.MarkRead(outputReadableBuffer);
David Monahan6198fe02019-12-02 08:35:43 +0000935
936 // Validate inference data
937 size = inferenceReadableBuffer->GetSize();
Jan Eilersa10e2a22020-03-26 12:04:54 +0000938
939 unsigned int threadId_size = sizeof(std::thread::id); // Is platform dependent
940 BOOST_CHECK(size == 1516 + 10 * threadId_size);
David Monahan6198fe02019-12-02 08:35:43 +0000941
942 readableData = inferenceReadableBuffer->GetReadableData();
943 BOOST_CHECK(readableData != nullptr);
944
945 offset = 0;
946
Keith Davis97da5e22020-03-05 16:25:28 +0000947 // Verify Header
Jan Eilersa10e2a22020-03-26 12:04:54 +0000948 VerifyTimelineHeaderBinary(readableData, offset, 1508 + 10 * threadId_size);
Keith Davis97da5e22020-03-05 16:25:28 +0000949
David Monahan6198fe02019-12-02 08:35:43 +0000950 // Inference timeline trace
951 // Inference entity
Keith Davis97da5e22020-03-05 16:25:28 +0000952 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000953
954 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000955 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
956 EmptyOptional(),
957 EmptyOptional(),
958 LabelsAndEventClasses::INFERENCE_GUID,
959 readableData,
960 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000961
962 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000963 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
964 EmptyOptional(),
965 EmptyOptional(),
966 LabelsAndEventClasses::TYPE_GUID,
967 readableData,
968 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000969
970 // Network - Inference relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000971 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
972 EmptyOptional(),
973 optNetGuid,
974 EmptyOptional(),
975 readableData,
976 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000977
978 // Start Inference life
979 // Event packet - timeline, threadId, eventGuid
980 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
981
982 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000983 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
984 EmptyOptional(),
985 EmptyOptional(),
986 EmptyOptional(),
987 readableData,
988 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000989
990 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000991 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
992 EmptyOptional(),
993 EmptyOptional(),
994 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
995 readableData,
996 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000997
998 // Execution
999 // Input workload execution
1000 // Input workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +00001001 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001002
1003 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001004 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1005 EmptyOptional(),
1006 EmptyOptional(),
1007 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1008 readableData,
1009 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001010
1011 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001012 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1013 EmptyOptional(),
1014 EmptyOptional(),
1015 LabelsAndEventClasses::TYPE_GUID,
1016 readableData,
1017 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001018
1019 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001020 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1021 EmptyOptional(),
1022 EmptyOptional(),
1023 EmptyOptional(),
1024 readableData,
1025 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001026
1027 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001028 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1029 EmptyOptional(),
1030 EmptyOptional(),
1031 EmptyOptional(),
1032 readableData,
1033 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001034
1035 // Start 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_SOL_EVENT_CLASS,
1052 readableData,
1053 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001054
1055 // End of Input workload execution life
1056 // Event packet - timeline, threadId, eventGuid
1057 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1058
1059 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001060 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1061 EmptyOptional(),
1062 EmptyOptional(),
1063 EmptyOptional(),
1064 readableData,
1065 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001066
1067 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001068 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1069 EmptyOptional(),
1070 EmptyOptional(),
1071 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1072 readableData,
1073 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001074
1075 // Conv2d workload execution
1076 // Conv2d workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +00001077 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001078
1079 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001080 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1081 EmptyOptional(),
1082 EmptyOptional(),
1083 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1084 readableData,
1085 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001086
1087 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001088 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1089 EmptyOptional(),
1090 EmptyOptional(),
1091 LabelsAndEventClasses::TYPE_GUID,
1092 readableData,
1093 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001094
1095 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001096 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1097 EmptyOptional(),
1098 EmptyOptional(),
1099 EmptyOptional(),
1100 readableData,
1101 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001102
1103 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001104 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1105 EmptyOptional(),
1106 EmptyOptional(),
1107 EmptyOptional(),
1108 readableData,
1109 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001110
1111 // Start 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_SOL_EVENT_CLASS,
1128 readableData,
1129 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001130
1131 // End of Conv2d workload execution life
1132 // Event packet - timeline, threadId, eventGuid
1133 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1134
1135 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001136 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1137 EmptyOptional(),
1138 EmptyOptional(),
1139 EmptyOptional(),
1140 readableData,
1141 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001142
1143 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001144 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1145 EmptyOptional(),
1146 EmptyOptional(),
1147 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1148 readableData,
1149 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001150
1151 // Activation workload execution
1152 // Activation workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +00001153 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001154
1155 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001156 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1157 EmptyOptional(),
1158 EmptyOptional(),
1159 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1160 readableData,
1161 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001162
1163 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001164 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1165 EmptyOptional(),
1166 EmptyOptional(),
1167 LabelsAndEventClasses::TYPE_GUID,
1168 readableData,
1169 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001170
1171 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001172 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1173 EmptyOptional(),
1174 EmptyOptional(),
1175 EmptyOptional(),
1176 readableData,
1177 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001178
1179 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001180 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1181 EmptyOptional(),
1182 EmptyOptional(),
1183 EmptyOptional(),
1184 readableData,
1185 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001186
1187 // Start 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_SOL_EVENT_CLASS,
1204 readableData,
1205 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001206
1207 // End of Activation workload execution life
1208 // Event packet - timeline, threadId, eventGuid
1209 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1210
1211 // Activation workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001212 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1213 EmptyOptional(),
1214 EmptyOptional(),
1215 EmptyOptional(),
1216 readableData,
1217 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001218
1219 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001220 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1221 EmptyOptional(),
1222 EmptyOptional(),
1223 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1224 readableData,
1225 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001226
1227 // Output workload execution
1228 // Output workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +00001229 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001230
1231 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001232 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1233 EmptyOptional(),
1234 EmptyOptional(),
1235 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1236 readableData,
1237 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001238
1239 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001240 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1241 EmptyOptional(),
1242 EmptyOptional(),
1243 LabelsAndEventClasses::TYPE_GUID,
1244 readableData,
1245 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001246
1247 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001248 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1249 EmptyOptional(),
1250 EmptyOptional(),
1251 EmptyOptional(),
1252 readableData,
1253 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001254
1255 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001256 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1257 EmptyOptional(),
1258 EmptyOptional(),
1259 EmptyOptional(),
1260 readableData,
1261 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001262
1263 // Start Output 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_SOL_EVENT_CLASS,
1280 readableData,
1281 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001282
1283 // End of Normalize workload execution life
1284 // Event packet - timeline, threadId, eventGuid
1285 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1286
1287 // Output workload execution - 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 // End of Inference life
1304 // Event packet - timeline, threadId, eventGuid
1305 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1306
1307 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001308 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1309 EmptyOptional(),
1310 EmptyOptional(),
1311 EmptyOptional(),
1312 readableData,
1313 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001314
1315 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001316 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1317 EmptyOptional(),
1318 EmptyOptional(),
1319 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1320 readableData,
1321 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001322
1323 bufferManager.MarkRead(inferenceReadableBuffer);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00001324}