blob: 73dbf881b3a50c13d93813ad9073bec9d2189d70 [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);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000266
267 // Reading TimelineEventBinaryPacket
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000268 // Check the decl_id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000269 uint32_t entityDeclId = ReadUint32(readableData, offset);
270 BOOST_CHECK(entityDeclId == 4);
271
272 // Check the timestamp
273 offset += uint32_t_size;
274 uint64_t readTimestamp = ReadUint64(readableData, offset);
275 if (timestamp.has_value())
276 {
277 BOOST_CHECK(readTimestamp == timestamp.value());
278 }
279 else
280 {
281 BOOST_CHECK(readTimestamp != 0);
282 }
283
284 // Check the thread id
285 offset += uint64_t_size;
Colm Donelan5bb3d8a2020-05-12 16:36:46 +0100286 std::vector<uint8_t> readThreadId(ThreadIdSize, 0);
287 ReadBytes(readableData, offset, ThreadIdSize, readThreadId.data());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000288 if (threadId.has_value())
289 {
290 BOOST_CHECK(readThreadId == threadId.value());
291 }
292 else
293 {
294 BOOST_CHECK(readThreadId == std::this_thread::get_id());
295 }
296
297 // Check the event GUID
Colm Donelan5bb3d8a2020-05-12 16:36:46 +0100298 offset += ThreadIdSize;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000299 uint64_t readEventGuid = ReadUint64(readableData, offset);
300 if (eventGuid.has_value())
301 {
302 BOOST_CHECK(readEventGuid == eventGuid.value());
303 }
304 else
305 {
306 BOOST_CHECK(readEventGuid != ProfilingGuid(0));
307 }
308
309 offset += uint64_t_size;
310}
311
312void VerifyPostOptimisationStructureTestImpl(armnn::BackendId backendId)
313{
314 using namespace armnn;
315
316 // Create runtime in which test will run
317 armnn::IRuntime::CreationOptions options;
318 options.m_ProfilingOptions.m_EnableProfiling = true;
Keith Davis33ed2212020-03-30 10:43:41 +0100319 options.m_ProfilingOptions.m_TimelineEnabled = true;
Sadik Armagan3184c902020-03-18 10:57:30 +0000320 armnn::Runtime runtime(options);
Keith Davis33ed2212020-03-30 10:43:41 +0100321 GetProfilingService(&runtime).ResetExternalProfilingOptions(options.m_ProfilingOptions, false);
322
323 profiling::ProfilingServiceRuntimeHelper profilingServiceHelper(GetProfilingService(&runtime));
324 profilingServiceHelper.ForceTransitionToState(ProfilingState::NotConnected);
325 profilingServiceHelper.ForceTransitionToState(ProfilingState::WaitingForAck);
326 profilingServiceHelper.ForceTransitionToState(ProfilingState::Active);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000327
328 // build up the structure of the network
329 INetworkPtr net(INetwork::Create());
330
331 // Convolution details
332 TensorInfo inputInfo({ 1, 2, 5, 1 }, DataType::Float32);
Keith Davis97da5e22020-03-05 16:25:28 +0000333 TensorInfo weightInfo({ 3, 2, 3, 1 }, DataType::Float32);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000334 TensorInfo biasInfo({ 3 }, DataType::Float32);
Keith Davis97da5e22020-03-05 16:25:28 +0000335 TensorInfo outputInfo({ 1, 3, 7, 1 }, DataType::Float32);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000336 std::vector<float> weightsData{
Keith Davis97da5e22020-03-05 16:25:28 +0000337 1.0f, 0.0f, 0.0f,
338 0.0f, 2.0f, -1.5f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000339
Keith Davis97da5e22020-03-05 16:25:28 +0000340 0.0f, 0.0f, 0.0f,
341 0.2f, 0.2f, 0.2f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000342
Keith Davis97da5e22020-03-05 16:25:28 +0000343 0.5f, 0.0f, 0.5f,
344 0.0f, -1.0f, 0.0f
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000345 };
346 ConstTensor weights(weightInfo, weightsData);
347
348 Optional<ConstTensor> optionalBiases;
349 std::vector<float> biasesData{ 1.0f, 0.0f, 0.0f };
350 ConstTensor biases(biasInfo, biasesData);
351 optionalBiases = Optional<ConstTensor>(biases);
352
353 // Input layer
354 IConnectableLayer* input = net->AddInputLayer(0, "input");
355
356 // Convolution2d layer
357 Convolution2dDescriptor conv2dDesc;
Keith Davis97da5e22020-03-05 16:25:28 +0000358 conv2dDesc.m_StrideX = 1;
359 conv2dDesc.m_StrideY = 1;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000360 conv2dDesc.m_PadLeft = 0;
361 conv2dDesc.m_PadRight = 0;
362 conv2dDesc.m_PadTop = 2;
363 conv2dDesc.m_PadBottom = 2;
364 conv2dDesc.m_BiasEnabled = true;
365 IConnectableLayer* conv2d = net->AddConvolution2dLayer(conv2dDesc, weights, optionalBiases);
366
367 // Activation layer
368 armnn::ActivationDescriptor activationDesc;
369 armnn::IConnectableLayer* const activation = net->AddActivationLayer(activationDesc, "activation");
370
371 // Output layer
372 IConnectableLayer* output = net->AddOutputLayer(0, "output");
373
374 input->GetOutputSlot(0).Connect(conv2d->GetInputSlot(0));
375 conv2d->GetOutputSlot(0).Connect(activation->GetInputSlot(0));
376 activation->GetOutputSlot(0).Connect(output->GetInputSlot(0));
377
378 input->GetOutputSlot(0).SetTensorInfo(inputInfo);
379 conv2d->GetOutputSlot(0).SetTensorInfo(outputInfo);
380 activation->GetOutputSlot(0).SetTensorInfo(outputInfo);
381
382 // optimize the network
383 std::vector<armnn::BackendId> backends = { backendId };
Sadik Armagan3184c902020-03-18 10:57:30 +0000384 IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime.GetDeviceSpec());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000385
386 ProfilingGuid optNetGuid = optNet->GetGuid();
387
388 // Load it into the runtime. It should success.
389 armnn::NetworkId netId;
Sadik Armagan3184c902020-03-18 10:57:30 +0000390 BOOST_TEST(runtime.LoadNetwork(netId, std::move(optNet)) == Status::Success);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000391
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000392 profiling::BufferManager& bufferManager = profilingServiceHelper.GetProfilingBufferManager();
393 auto readableBuffer = bufferManager.GetReadableBuffer();
394
395 // Profiling is enable, the post-optimisation structure should be created
396 BOOST_CHECK(readableBuffer != nullptr);
397
398 unsigned int size = readableBuffer->GetSize();
Keith Davis97da5e22020-03-05 16:25:28 +0000399 BOOST_CHECK(size == 1556);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000400
401 const unsigned char* readableData = readableBuffer->GetReadableData();
402 BOOST_CHECK(readableData != nullptr);
403
404 unsigned int offset = 0;
405
Keith Davis97da5e22020-03-05 16:25:28 +0000406 // Verify Header
407 VerifyTimelineHeaderBinary(readableData, offset, 1548);
408
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000409 // Post-optimisation network
410 // Network entity
Keith Davis97da5e22020-03-05 16:25:28 +0000411 VerifyTimelineEntityBinaryPacketData(optNetGuid, readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000412
413 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000414 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
415 EmptyOptional(),
416 optNetGuid,
417 EmptyOptional(),
418 readableData,
419 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000420
421 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000422 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
423 EmptyOptional(),
424 EmptyOptional(),
425 LabelsAndEventClasses::TYPE_GUID,
426 readableData,
427 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000428
429 // Input layer
430 // Input layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000431 VerifyTimelineEntityBinaryPacketData(input->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000432
433 // Name Entity
Keith Davis97da5e22020-03-05 16:25:28 +0000434 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "input", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000435
436 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000437 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
438 EmptyOptional(),
439 input->GetGuid(),
440 EmptyOptional(),
441 readableData,
442 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000443
444 // Name label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000445 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
446 EmptyOptional(),
447 EmptyOptional(),
448 LabelsAndEventClasses::NAME_GUID,
449 readableData,
450 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000451
452 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000453 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
454 EmptyOptional(),
455 input->GetGuid(),
456 EmptyOptional(),
457 readableData,
458 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000459
460 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000461 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
462 EmptyOptional(),
463 EmptyOptional(),
464 LabelsAndEventClasses::TYPE_GUID,
465 readableData,
466 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000467
468 // Network - Input layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000469 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
470 EmptyOptional(),
471 optNetGuid,
472 input->GetGuid(),
473 readableData,
474 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000475
476 // Conv2d layer
477 // Conv2d layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000478 VerifyTimelineEntityBinaryPacketData(conv2d->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000479
480 // Name entity
Keith Davis97da5e22020-03-05 16:25:28 +0000481 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "<Unnamed>", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000482
483 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000484 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
485 EmptyOptional(),
486 conv2d->GetGuid(),
487 EmptyOptional(),
488 readableData,
489 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000490
491 // Name label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000492 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
493 EmptyOptional(),
494 EmptyOptional(),
495 LabelsAndEventClasses::NAME_GUID,
496 readableData,
497 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000498
499 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000500 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
501 EmptyOptional(),
502 conv2d->GetGuid(),
503 EmptyOptional(),
504 readableData,
505 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000506
507 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000508 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
509 EmptyOptional(),
510 EmptyOptional(),
511 LabelsAndEventClasses::TYPE_GUID,
512 readableData,
513 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000514
515 // Network - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000516 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
517 EmptyOptional(),
518 optNetGuid,
519 conv2d->GetGuid(),
520 readableData,
521 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000522
523 // Input layer - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000524 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
525 EmptyOptional(),
526 input->GetGuid(),
527 conv2d->GetGuid(),
528 readableData,
529 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000530
531 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000532 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
533 EmptyOptional(),
534 EmptyOptional(),
535 LabelsAndEventClasses::CONNECTION_GUID,
536 readableData,
537 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000538
539 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000540 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
541 EmptyOptional(),
542 EmptyOptional(),
543 LabelsAndEventClasses::TYPE_GUID,
544 readableData,
545 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000546
547 // Conv2d workload
548 // Conv2d workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000549 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000550
551 // Entity - Type 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 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000560 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
561 EmptyOptional(),
562 EmptyOptional(),
563 LabelsAndEventClasses::TYPE_GUID,
564 readableData,
565 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000566
567 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000568 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000569
570 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000571 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
572 EmptyOptional(),
573 EmptyOptional(),
574 EmptyOptional(),
575 readableData,
576 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000577
578 // BackendId label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000579 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
580 EmptyOptional(),
581 EmptyOptional(),
582 LabelsAndEventClasses::BACKENDID_GUID,
583 readableData,
584 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000585
586 // Conv2d layer - Conv2d workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000587 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
588 EmptyOptional(),
589 conv2d->GetGuid(),
590 EmptyOptional(),
591 readableData,
592 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000593
594 // Activation layer
595 // Activation layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000596 VerifyTimelineEntityBinaryPacketData(activation->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000597
598 // Name entity
Keith Davis97da5e22020-03-05 16:25:28 +0000599 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "activation", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000600
601 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000602 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
603 EmptyOptional(),
604 activation->GetGuid(),
605 EmptyOptional(),
606 readableData,
607 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000608
609 // Name label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000610 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
611 EmptyOptional(),
612 EmptyOptional(),
613 LabelsAndEventClasses::NAME_GUID,
614 readableData,
615 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000616
617 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000618 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
619 EmptyOptional(),
620 activation->GetGuid(),
621 EmptyOptional(),
622 readableData,
623 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000624
625 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000626 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
627 EmptyOptional(),
628 EmptyOptional(),
629 LabelsAndEventClasses::TYPE_GUID,
630 readableData,
631 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000632
633 // Network - Activation layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000634 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
635 EmptyOptional(),
636 optNetGuid,
637 activation->GetGuid(),
638 readableData,
639 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000640
641 // Conv2d layer - Activation layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000642 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
643 EmptyOptional(),
644 conv2d->GetGuid(),
645 activation->GetGuid(),
646 readableData,
647 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000648
649 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000650 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
651 EmptyOptional(),
652 EmptyOptional(),
653 LabelsAndEventClasses::CONNECTION_GUID,
654 readableData,
655 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000656
657 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000658 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
659 EmptyOptional(),
660 EmptyOptional(),
661 LabelsAndEventClasses::TYPE_GUID,
662 readableData,
663 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000664
665 // Activation workload
666 // Activation workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000667 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000668
669 // Entity - Type 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 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000678 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
679 EmptyOptional(),
680 EmptyOptional(),
681 LabelsAndEventClasses::TYPE_GUID,
682 readableData,
683 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000684
685 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000686 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000687
688 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000689 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
690 EmptyOptional(),
691 EmptyOptional(),
692 EmptyOptional(),
693 readableData,
694 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000695
696 // BackendId label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000697 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
698 EmptyOptional(),
699 EmptyOptional(),
700 LabelsAndEventClasses::BACKENDID_GUID,
701 readableData,
702 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000703
704 // Activation layer - Activation workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000705 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
706 EmptyOptional(),
707 activation->GetGuid(),
708 EmptyOptional(),
709 readableData,
710 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000711
712 // Output layer
713 // Output layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000714 VerifyTimelineEntityBinaryPacketData(output->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000715
716 // Name entity
Keith Davis97da5e22020-03-05 16:25:28 +0000717 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "output", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000718
719 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000720 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
721 EmptyOptional(),
722 output->GetGuid(),
723 EmptyOptional(),
724 readableData,
725 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000726
727 // Name label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000728 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
729 EmptyOptional(),
730 EmptyOptional(),
731 LabelsAndEventClasses::NAME_GUID,
732 readableData,
733 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000734
735 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000736 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
737 EmptyOptional(),
738 output->GetGuid(),
739 EmptyOptional(),
740 readableData,
741 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000742
743 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000744 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
745 EmptyOptional(),
746 EmptyOptional(),
747 LabelsAndEventClasses::TYPE_GUID,
748 readableData,
749 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000750
751 // Network - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000752 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
753 EmptyOptional(),
754 optNetGuid,
755 output->GetGuid(),
756 readableData,
757 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000758
759 // Activation layer - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000760 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
761 EmptyOptional(),
762 activation->GetGuid(),
763 output->GetGuid(),
764 readableData,
765 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000766
767 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000768 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
769 EmptyOptional(),
770 EmptyOptional(),
771 LabelsAndEventClasses::CONNECTION_GUID,
772 readableData,
773 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000774
775 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000776 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
777 EmptyOptional(),
778 EmptyOptional(),
779 LabelsAndEventClasses::TYPE_GUID,
780 readableData,
781 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000782
783 bufferManager.MarkRead(readableBuffer);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000784
785 // Creates structures for input & output.
786 std::vector<float> inputData(inputInfo.GetNumElements());
787 std::vector<float> outputData(outputInfo.GetNumElements());
788
789 InputTensors inputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000790 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000791 {0, ConstTensor(runtime.GetInputTensorInfo(netId, 0), inputData.data())}
Keith Davis97da5e22020-03-05 16:25:28 +0000792 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000793 OutputTensors outputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000794 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000795 {0, Tensor(runtime.GetOutputTensorInfo(netId, 0), outputData.data())}
Keith Davis97da5e22020-03-05 16:25:28 +0000796 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000797
798 // Does the inference.
Sadik Armagan3184c902020-03-18 10:57:30 +0000799 runtime.EnqueueWorkload(netId, inputTensors, outputTensors);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000800
Finn Williamsb6a402f2020-03-24 13:46:22 +0000801 // Get readable buffer for input workload
802 auto inputReadableBuffer = bufferManager.GetReadableBuffer();
803 BOOST_CHECK(inputReadableBuffer != nullptr);
David Monahan6198fe02019-12-02 08:35:43 +0000804
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000805 // Get readable buffer for output workload
806 auto outputReadableBuffer = bufferManager.GetReadableBuffer();
807 BOOST_CHECK(outputReadableBuffer != nullptr);
808
Finn Williamsb6a402f2020-03-24 13:46:22 +0000809 // Get readable buffer for inference timeline
810 auto inferenceReadableBuffer = bufferManager.GetReadableBuffer();
811 BOOST_CHECK(inferenceReadableBuffer != nullptr);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000812
813 // Validate input workload data
814 size = inputReadableBuffer->GetSize();
Keith Davis97da5e22020-03-05 16:25:28 +0000815 BOOST_CHECK(size == 204);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000816
817 readableData = inputReadableBuffer->GetReadableData();
818 BOOST_CHECK(readableData != nullptr);
819
820 offset = 0;
821
Keith Davis97da5e22020-03-05 16:25:28 +0000822 // Verify Header
823 VerifyTimelineHeaderBinary(readableData, offset, 196);
824
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000825 // Input workload
826 // Input workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000827 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000828
829 // Entity - Type 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 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000838 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
839 EmptyOptional(),
840 EmptyOptional(),
841 LabelsAndEventClasses::TYPE_GUID,
842 readableData,
843 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000844
845 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000846 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000847
848 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000849 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
850 EmptyOptional(),
851 EmptyOptional(),
852 EmptyOptional(),
853 readableData,
854 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000855
856 // BackendId label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000857 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
858 EmptyOptional(),
859 EmptyOptional(),
860 LabelsAndEventClasses::BACKENDID_GUID,
861 readableData,
862 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000863
864 // Input layer - Input workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000865 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
866 EmptyOptional(),
867 input->GetGuid(),
868 EmptyOptional(),
869 readableData,
870 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000871
872 bufferManager.MarkRead(inputReadableBuffer);
873
874 // Validate output workload data
875 size = outputReadableBuffer->GetSize();
Keith Davis97da5e22020-03-05 16:25:28 +0000876 BOOST_CHECK(size == 204);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000877
878 readableData = outputReadableBuffer->GetReadableData();
879 BOOST_CHECK(readableData != nullptr);
880
881 offset = 0;
882
Keith Davis97da5e22020-03-05 16:25:28 +0000883 // Verify Header
884 VerifyTimelineHeaderBinary(readableData, offset, 196);
885
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000886 // Output workload
887 // Output workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000888 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000889
890 // Entity - Type 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 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000899 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
900 EmptyOptional(),
901 EmptyOptional(),
902 LabelsAndEventClasses::TYPE_GUID,
903 readableData,
904 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000905
906 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000907 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000908
909 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000910 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
911 EmptyOptional(),
912 EmptyOptional(),
913 EmptyOptional(),
914 readableData,
915 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000916
917 // BackendId label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000918 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
919 EmptyOptional(),
920 EmptyOptional(),
921 LabelsAndEventClasses::BACKENDID_GUID,
922 readableData,
923 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000924
925 // Output layer - Output workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000926 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
927 EmptyOptional(),
928 output->GetGuid(),
929 EmptyOptional(),
930 readableData,
931 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000932
933 bufferManager.MarkRead(outputReadableBuffer);
David Monahan6198fe02019-12-02 08:35:43 +0000934
935 // Validate inference data
936 size = inferenceReadableBuffer->GetSize();
Jan Eilersa10e2a22020-03-26 12:04:54 +0000937
Colm Donelan5bb3d8a2020-05-12 16:36:46 +0100938 BOOST_CHECK(size == 1516 + 10 * ThreadIdSize);
David Monahan6198fe02019-12-02 08:35:43 +0000939
940 readableData = inferenceReadableBuffer->GetReadableData();
941 BOOST_CHECK(readableData != nullptr);
942
943 offset = 0;
944
Keith Davis97da5e22020-03-05 16:25:28 +0000945 // Verify Header
Colm Donelan5bb3d8a2020-05-12 16:36:46 +0100946 VerifyTimelineHeaderBinary(readableData, offset, 1508 + 10 * ThreadIdSize);
Keith Davis97da5e22020-03-05 16:25:28 +0000947
David Monahan6198fe02019-12-02 08:35:43 +0000948 // Inference timeline trace
949 // Inference entity
Keith Davis97da5e22020-03-05 16:25:28 +0000950 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000951
952 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000953 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
954 EmptyOptional(),
955 EmptyOptional(),
956 LabelsAndEventClasses::INFERENCE_GUID,
957 readableData,
958 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000959
960 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000961 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
962 EmptyOptional(),
963 EmptyOptional(),
964 LabelsAndEventClasses::TYPE_GUID,
965 readableData,
966 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000967
968 // Network - Inference relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000969 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
970 EmptyOptional(),
971 optNetGuid,
972 EmptyOptional(),
973 readableData,
974 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000975
976 // Start Inference life
977 // Event packet - timeline, threadId, eventGuid
978 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
979
980 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000981 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
982 EmptyOptional(),
983 EmptyOptional(),
984 EmptyOptional(),
985 readableData,
986 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000987
988 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000989 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
990 EmptyOptional(),
991 EmptyOptional(),
992 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
993 readableData,
994 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000995
996 // Execution
997 // Input workload execution
998 // Input workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +0000999 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001000
1001 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001002 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1003 EmptyOptional(),
1004 EmptyOptional(),
1005 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1006 readableData,
1007 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001008
1009 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001010 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1011 EmptyOptional(),
1012 EmptyOptional(),
1013 LabelsAndEventClasses::TYPE_GUID,
1014 readableData,
1015 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001016
1017 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001018 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1019 EmptyOptional(),
1020 EmptyOptional(),
1021 EmptyOptional(),
1022 readableData,
1023 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001024
1025 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001026 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1027 EmptyOptional(),
1028 EmptyOptional(),
1029 EmptyOptional(),
1030 readableData,
1031 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001032
1033 // Start Input workload execution life
1034 // Event packet - timeline, threadId, eventGuid
1035 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1036
1037 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001038 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1039 EmptyOptional(),
1040 EmptyOptional(),
1041 EmptyOptional(),
1042 readableData,
1043 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001044
1045 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001046 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1047 EmptyOptional(),
1048 EmptyOptional(),
1049 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1050 readableData,
1051 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001052
1053 // End of Input workload execution life
1054 // Event packet - timeline, threadId, eventGuid
1055 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1056
1057 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001058 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1059 EmptyOptional(),
1060 EmptyOptional(),
1061 EmptyOptional(),
1062 readableData,
1063 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001064
1065 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001066 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1067 EmptyOptional(),
1068 EmptyOptional(),
1069 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1070 readableData,
1071 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001072
1073 // Conv2d workload execution
1074 // Conv2d workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +00001075 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001076
1077 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001078 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1079 EmptyOptional(),
1080 EmptyOptional(),
1081 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1082 readableData,
1083 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001084
1085 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001086 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1087 EmptyOptional(),
1088 EmptyOptional(),
1089 LabelsAndEventClasses::TYPE_GUID,
1090 readableData,
1091 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001092
1093 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001094 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1095 EmptyOptional(),
1096 EmptyOptional(),
1097 EmptyOptional(),
1098 readableData,
1099 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001100
1101 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001102 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1103 EmptyOptional(),
1104 EmptyOptional(),
1105 EmptyOptional(),
1106 readableData,
1107 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001108
1109 // Start Conv2d workload execution life
1110 // Event packet - timeline, threadId, eventGuid
1111 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1112
1113 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001114 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1115 EmptyOptional(),
1116 EmptyOptional(),
1117 EmptyOptional(),
1118 readableData,
1119 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001120
1121 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001122 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1123 EmptyOptional(),
1124 EmptyOptional(),
1125 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1126 readableData,
1127 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001128
1129 // End of Conv2d workload execution life
1130 // Event packet - timeline, threadId, eventGuid
1131 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1132
1133 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001134 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1135 EmptyOptional(),
1136 EmptyOptional(),
1137 EmptyOptional(),
1138 readableData,
1139 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001140
1141 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001142 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1143 EmptyOptional(),
1144 EmptyOptional(),
1145 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1146 readableData,
1147 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001148
1149 // Activation workload execution
1150 // Activation workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +00001151 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001152
1153 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001154 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1155 EmptyOptional(),
1156 EmptyOptional(),
1157 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1158 readableData,
1159 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001160
1161 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001162 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1163 EmptyOptional(),
1164 EmptyOptional(),
1165 LabelsAndEventClasses::TYPE_GUID,
1166 readableData,
1167 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001168
1169 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001170 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1171 EmptyOptional(),
1172 EmptyOptional(),
1173 EmptyOptional(),
1174 readableData,
1175 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001176
1177 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001178 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1179 EmptyOptional(),
1180 EmptyOptional(),
1181 EmptyOptional(),
1182 readableData,
1183 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001184
1185 // Start Activation workload execution life
1186 // Event packet - timeline, threadId, eventGuid
1187 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1188
1189 // Activation workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001190 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1191 EmptyOptional(),
1192 EmptyOptional(),
1193 EmptyOptional(),
1194 readableData,
1195 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001196
1197 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001198 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1199 EmptyOptional(),
1200 EmptyOptional(),
1201 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1202 readableData,
1203 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001204
1205 // End of Activation workload execution life
1206 // Event packet - timeline, threadId, eventGuid
1207 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1208
1209 // Activation workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001210 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1211 EmptyOptional(),
1212 EmptyOptional(),
1213 EmptyOptional(),
1214 readableData,
1215 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001216
1217 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001218 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1219 EmptyOptional(),
1220 EmptyOptional(),
1221 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1222 readableData,
1223 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001224
1225 // Output workload execution
1226 // Output workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +00001227 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001228
1229 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001230 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1231 EmptyOptional(),
1232 EmptyOptional(),
1233 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1234 readableData,
1235 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001236
1237 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001238 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1239 EmptyOptional(),
1240 EmptyOptional(),
1241 LabelsAndEventClasses::TYPE_GUID,
1242 readableData,
1243 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001244
1245 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001246 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1247 EmptyOptional(),
1248 EmptyOptional(),
1249 EmptyOptional(),
1250 readableData,
1251 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001252
1253 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001254 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1255 EmptyOptional(),
1256 EmptyOptional(),
1257 EmptyOptional(),
1258 readableData,
1259 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001260
1261 // Start Output workload execution life
1262 // Event packet - timeline, threadId, eventGuid
1263 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1264
1265 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001266 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1267 EmptyOptional(),
1268 EmptyOptional(),
1269 EmptyOptional(),
1270 readableData,
1271 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001272
1273 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001274 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1275 EmptyOptional(),
1276 EmptyOptional(),
1277 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1278 readableData,
1279 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001280
1281 // End of Normalize workload execution life
1282 // Event packet - timeline, threadId, eventGuid
1283 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1284
1285 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001286 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1287 EmptyOptional(),
1288 EmptyOptional(),
1289 EmptyOptional(),
1290 readableData,
1291 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001292
1293 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001294 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1295 EmptyOptional(),
1296 EmptyOptional(),
1297 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1298 readableData,
1299 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001300
1301 // End of Inference life
1302 // Event packet - timeline, threadId, eventGuid
1303 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1304
1305 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001306 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1307 EmptyOptional(),
1308 EmptyOptional(),
1309 EmptyOptional(),
1310 readableData,
1311 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001312
1313 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001314 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1315 EmptyOptional(),
1316 EmptyOptional(),
1317 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1318 readableData,
1319 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001320
1321 bufferManager.MarkRead(inferenceReadableBuffer);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00001322}