blob: 20e1a9b4462ecaffa3bbf14aa70ca6d390631bce [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
Finn Williams0a336dc2020-05-11 15:39:58 +010060 uint32_t timelineBinaryPacketHeaderWord0 = ReadUint32(readableData, offset);
61 uint32_t timelineBinaryPacketFamily = (timelineBinaryPacketHeaderWord0 >> 26) & 0x0000003F;
62 uint32_t timelineBinaryPacketClass = (timelineBinaryPacketHeaderWord0 >> 19) & 0x0000007F;
63 uint32_t timelineBinaryPacketType = (timelineBinaryPacketHeaderWord0 >> 16) & 0x00000007;
64 uint32_t timelineBinaryPacketStreamId = (timelineBinaryPacketHeaderWord0 >> 0) & 0x00000007;
65 BOOST_CHECK(timelineBinaryPacketFamily == 1);
66 BOOST_CHECK(timelineBinaryPacketClass == 0);
67 BOOST_CHECK(timelineBinaryPacketType == 1);
68 BOOST_CHECK(timelineBinaryPacketStreamId == 0);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000069 offset += uint32_t_size;
Finn Williams0a336dc2020-05-11 15:39:58 +010070 uint32_t timelineBinaryPacketHeaderWord1 = ReadUint32(readableData, offset);
71 uint32_t timelineBinaryPacketSequenceNumber = (timelineBinaryPacketHeaderWord1 >> 24) & 0x00000001;
72 uint32_t timelineBinaryPacketDataLength = (timelineBinaryPacketHeaderWord1 >> 0) & 0x00FFFFFF;
73 BOOST_CHECK(timelineBinaryPacketSequenceNumber == 0);
74 BOOST_CHECK(timelineBinaryPacketDataLength == packetDataLength);
Keith Davis97da5e22020-03-05 16:25:28 +000075 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,
Jim Flynn1892d212020-05-26 21:10:49 +0100121 ProfilingGuid nameGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000122 const unsigned char* readableData,
123 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000124{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100125 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000126
127 // Utils
128 unsigned int uint32_t_size = sizeof(uint32_t);
129 unsigned int uint64_t_size = sizeof(uint64_t);
130
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000131 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000132 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
133 BOOST_CHECK(eventClassDeclId == 2);
134
135 // Check the profiling GUID
136 offset += uint32_t_size;
137 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
138 BOOST_CHECK(readProfilingGuid == guid);
139
Jim Flynn1892d212020-05-26 21:10:49 +0100140 offset += uint64_t_size;
141 uint64_t readProfiilngNameGuid = ReadUint64(readableData, offset);
142 BOOST_CHECK(readProfiilngNameGuid == nameGuid);
143
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000144 // Update the offset to allow parsing to be continued after this function returns
145 offset += uint64_t_size;
146}
147
Keith Davis97da5e22020-03-05 16:25:28 +0000148void VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType relationshipType,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000149 Optional<ProfilingGuid> relationshipGuid,
150 Optional<ProfilingGuid> headGuid,
151 Optional<ProfilingGuid> tailGuid,
Finn Williams0a336dc2020-05-11 15:39:58 +0100152 Optional<ProfilingGuid> attributeGuid,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000153 const unsigned char* readableData,
154 unsigned int& offset)
155{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100156 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000157
158 uint32_t relationshipTypeUint = 0;
159 switch (relationshipType)
160 {
161 case ProfilingRelationshipType::RetentionLink:
162 relationshipTypeUint = 0;
163 break;
164 case ProfilingRelationshipType::ExecutionLink:
165 relationshipTypeUint = 1;
166 break;
167 case ProfilingRelationshipType::DataLink:
168 relationshipTypeUint = 2;
169 break;
170 case ProfilingRelationshipType::LabelLink:
171 relationshipTypeUint = 3;
172 break;
173 default:
174 BOOST_ERROR("Unknown relationship type");
175 }
176
177 // Utils
178 unsigned int uint32_t_size = sizeof(uint32_t);
179 unsigned int uint64_t_size = sizeof(uint64_t);
180
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000181 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000182 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
183 BOOST_CHECK(eventClassDeclId == 3);
184
185 // Check the relationship type
186 offset += uint32_t_size;
187 uint32_t readRelationshipTypeUint = ReadUint32(readableData, offset);
188 BOOST_CHECK(readRelationshipTypeUint == relationshipTypeUint);
189
190 // Check the relationship GUID
191 offset += uint32_t_size;
192 uint64_t readRelationshipGuid = ReadUint64(readableData, offset);
193 if (relationshipGuid.has_value())
194 {
195 BOOST_CHECK(readRelationshipGuid == relationshipGuid.value());
196 }
197 else
198 {
199 BOOST_CHECK(readRelationshipGuid != ProfilingGuid(0));
200 }
201
202 // Check the head of relationship GUID
203 offset += uint64_t_size;
204 uint64_t readHeadRelationshipGuid = ReadUint64(readableData, offset);
205 if (headGuid.has_value())
206 {
207 BOOST_CHECK(readHeadRelationshipGuid == headGuid.value());
208 }
209 else
210 {
211 BOOST_CHECK(readHeadRelationshipGuid != ProfilingGuid(0));
212 }
213
214 // Check the tail of relationship GUID
215 offset += uint64_t_size;
216 uint64_t readTailRelationshipGuid = ReadUint64(readableData, offset);
217 if (tailGuid.has_value())
218 {
219 BOOST_CHECK(readTailRelationshipGuid == tailGuid.value());
220 }
221 else
222 {
223 BOOST_CHECK(readTailRelationshipGuid != ProfilingGuid(0));
224 }
225
Finn Williams0a336dc2020-05-11 15:39:58 +0100226 // Check the tail of relationship GUID
227 offset += uint64_t_size;
228 uint64_t readAttributeRelationshipGuid = ReadUint64(readableData, offset);
229 if (attributeGuid.has_value())
230 {
231 BOOST_CHECK(readAttributeRelationshipGuid == attributeGuid.value());
232 }
233 else
234 {
235 BOOST_CHECK(readAttributeRelationshipGuid == ProfilingGuid(0));
236 }
237
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000238 // Update the offset to allow parsing to be continued after this function returns
239 offset += uint64_t_size;
240}
241
Keith Davis97da5e22020-03-05 16:25:28 +0000242void VerifyTimelineEntityBinaryPacketData(Optional<ProfilingGuid> guid,
243 const unsigned char* readableData,
244 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000245{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100246 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000247
248 // Utils
249 unsigned int uint32_t_size = sizeof(uint32_t);
250 unsigned int uint64_t_size = sizeof(uint64_t);
251
252 // Reading TimelineEntityClassBinaryPacket
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000253 // Check the decl_id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000254 uint32_t entityDeclId = ReadUint32(readableData, offset);
255 BOOST_CHECK(entityDeclId == 1);
256
257 // Check the profiling GUID
258 offset += uint32_t_size;
259 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
260
261 if (guid.has_value())
262 {
263 BOOST_CHECK(readProfilingGuid == guid.value());
264 }
265 else
266 {
267 BOOST_CHECK(readProfilingGuid != ProfilingGuid(0));
268 }
269
270 offset += uint64_t_size;
271}
272
273void VerifyTimelineEventBinaryPacket(Optional<uint64_t> timestamp,
274 Optional<std::thread::id> threadId,
275 Optional<ProfilingGuid> eventGuid,
276 const unsigned char* readableData,
277 unsigned int& offset)
278{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100279 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000280
281 // Utils
282 unsigned int uint32_t_size = sizeof(uint32_t);
283 unsigned int uint64_t_size = sizeof(uint64_t);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000284
285 // Reading TimelineEventBinaryPacket
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000286 // Check the decl_id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000287 uint32_t entityDeclId = ReadUint32(readableData, offset);
288 BOOST_CHECK(entityDeclId == 4);
289
290 // Check the timestamp
291 offset += uint32_t_size;
292 uint64_t readTimestamp = ReadUint64(readableData, offset);
293 if (timestamp.has_value())
294 {
295 BOOST_CHECK(readTimestamp == timestamp.value());
296 }
297 else
298 {
299 BOOST_CHECK(readTimestamp != 0);
300 }
301
302 // Check the thread id
303 offset += uint64_t_size;
Colm Donelan5bb3d8a2020-05-12 16:36:46 +0100304 std::vector<uint8_t> readThreadId(ThreadIdSize, 0);
305 ReadBytes(readableData, offset, ThreadIdSize, readThreadId.data());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000306 if (threadId.has_value())
307 {
308 BOOST_CHECK(readThreadId == threadId.value());
309 }
310 else
311 {
312 BOOST_CHECK(readThreadId == std::this_thread::get_id());
313 }
314
315 // Check the event GUID
Colm Donelan5bb3d8a2020-05-12 16:36:46 +0100316 offset += ThreadIdSize;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000317 uint64_t readEventGuid = ReadUint64(readableData, offset);
318 if (eventGuid.has_value())
319 {
320 BOOST_CHECK(readEventGuid == eventGuid.value());
321 }
322 else
323 {
324 BOOST_CHECK(readEventGuid != ProfilingGuid(0));
325 }
326
327 offset += uint64_t_size;
328}
329
330void VerifyPostOptimisationStructureTestImpl(armnn::BackendId backendId)
331{
332 using namespace armnn;
333
334 // Create runtime in which test will run
335 armnn::IRuntime::CreationOptions options;
336 options.m_ProfilingOptions.m_EnableProfiling = true;
Keith Davis33ed2212020-03-30 10:43:41 +0100337 options.m_ProfilingOptions.m_TimelineEnabled = true;
Sadik Armagan3184c902020-03-18 10:57:30 +0000338 armnn::Runtime runtime(options);
Keith Davis33ed2212020-03-30 10:43:41 +0100339 GetProfilingService(&runtime).ResetExternalProfilingOptions(options.m_ProfilingOptions, false);
340
341 profiling::ProfilingServiceRuntimeHelper profilingServiceHelper(GetProfilingService(&runtime));
342 profilingServiceHelper.ForceTransitionToState(ProfilingState::NotConnected);
343 profilingServiceHelper.ForceTransitionToState(ProfilingState::WaitingForAck);
344 profilingServiceHelper.ForceTransitionToState(ProfilingState::Active);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000345
346 // build up the structure of the network
347 INetworkPtr net(INetwork::Create());
348
349 // Convolution details
350 TensorInfo inputInfo({ 1, 2, 5, 1 }, DataType::Float32);
Keith Davis97da5e22020-03-05 16:25:28 +0000351 TensorInfo weightInfo({ 3, 2, 3, 1 }, DataType::Float32);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000352 TensorInfo biasInfo({ 3 }, DataType::Float32);
Keith Davis97da5e22020-03-05 16:25:28 +0000353 TensorInfo outputInfo({ 1, 3, 7, 1 }, DataType::Float32);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000354 std::vector<float> weightsData{
Keith Davis97da5e22020-03-05 16:25:28 +0000355 1.0f, 0.0f, 0.0f,
356 0.0f, 2.0f, -1.5f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000357
Keith Davis97da5e22020-03-05 16:25:28 +0000358 0.0f, 0.0f, 0.0f,
359 0.2f, 0.2f, 0.2f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000360
Keith Davis97da5e22020-03-05 16:25:28 +0000361 0.5f, 0.0f, 0.5f,
362 0.0f, -1.0f, 0.0f
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000363 };
364 ConstTensor weights(weightInfo, weightsData);
365
366 Optional<ConstTensor> optionalBiases;
367 std::vector<float> biasesData{ 1.0f, 0.0f, 0.0f };
368 ConstTensor biases(biasInfo, biasesData);
369 optionalBiases = Optional<ConstTensor>(biases);
370
371 // Input layer
372 IConnectableLayer* input = net->AddInputLayer(0, "input");
373
374 // Convolution2d layer
375 Convolution2dDescriptor conv2dDesc;
Keith Davis97da5e22020-03-05 16:25:28 +0000376 conv2dDesc.m_StrideX = 1;
377 conv2dDesc.m_StrideY = 1;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000378 conv2dDesc.m_PadLeft = 0;
379 conv2dDesc.m_PadRight = 0;
380 conv2dDesc.m_PadTop = 2;
381 conv2dDesc.m_PadBottom = 2;
382 conv2dDesc.m_BiasEnabled = true;
383 IConnectableLayer* conv2d = net->AddConvolution2dLayer(conv2dDesc, weights, optionalBiases);
384
385 // Activation layer
386 armnn::ActivationDescriptor activationDesc;
387 armnn::IConnectableLayer* const activation = net->AddActivationLayer(activationDesc, "activation");
388
389 // Output layer
390 IConnectableLayer* output = net->AddOutputLayer(0, "output");
391
392 input->GetOutputSlot(0).Connect(conv2d->GetInputSlot(0));
393 conv2d->GetOutputSlot(0).Connect(activation->GetInputSlot(0));
394 activation->GetOutputSlot(0).Connect(output->GetInputSlot(0));
395
396 input->GetOutputSlot(0).SetTensorInfo(inputInfo);
397 conv2d->GetOutputSlot(0).SetTensorInfo(outputInfo);
398 activation->GetOutputSlot(0).SetTensorInfo(outputInfo);
399
400 // optimize the network
401 std::vector<armnn::BackendId> backends = { backendId };
Sadik Armagan3184c902020-03-18 10:57:30 +0000402 IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime.GetDeviceSpec());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000403
404 ProfilingGuid optNetGuid = optNet->GetGuid();
405
406 // Load it into the runtime. It should success.
407 armnn::NetworkId netId;
Sadik Armagan3184c902020-03-18 10:57:30 +0000408 BOOST_TEST(runtime.LoadNetwork(netId, std::move(optNet)) == Status::Success);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000409
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000410 profiling::BufferManager& bufferManager = profilingServiceHelper.GetProfilingBufferManager();
411 auto readableBuffer = bufferManager.GetReadableBuffer();
412
413 // Profiling is enable, the post-optimisation structure should be created
414 BOOST_CHECK(readableBuffer != nullptr);
415
416 unsigned int size = readableBuffer->GetSize();
Finn Williams0a336dc2020-05-11 15:39:58 +0100417 BOOST_CHECK(size == 1244);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000418
419 const unsigned char* readableData = readableBuffer->GetReadableData();
420 BOOST_CHECK(readableData != nullptr);
421
422 unsigned int offset = 0;
423
Keith Davis97da5e22020-03-05 16:25:28 +0000424 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100425 VerifyTimelineHeaderBinary(readableData, offset, 1236);
Keith Davis97da5e22020-03-05 16:25:28 +0000426
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000427 // Post-optimisation network
428 // Network entity
Keith Davis97da5e22020-03-05 16:25:28 +0000429 VerifyTimelineEntityBinaryPacketData(optNetGuid, readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000430
431 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000432 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
433 EmptyOptional(),
434 optNetGuid,
435 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000436 LabelsAndEventClasses::TYPE_GUID,
437 readableData,
438 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000439
440 // Input layer
441 // Input layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000442 VerifyTimelineEntityBinaryPacketData(input->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000443
444 // Name Entity
Keith Davis97da5e22020-03-05 16:25:28 +0000445 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "input", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000446
447 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000448 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
449 EmptyOptional(),
450 input->GetGuid(),
451 EmptyOptional(),
Finn Williams0a336dc2020-05-11 15:39:58 +0100452 LabelsAndEventClasses::NAME_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000453 readableData,
454 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000455
456 // Name label relationship
Finn Williams0a336dc2020-05-11 15:39:58 +0100457
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000458
459 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000460 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
461 EmptyOptional(),
462 input->GetGuid(),
463 EmptyOptional(),
Finn Williams0a336dc2020-05-11 15:39:58 +0100464 LabelsAndEventClasses::TYPE_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000465 readableData,
466 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000467
468 // Type label relationship
Finn Williams0a336dc2020-05-11 15:39:58 +0100469
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000470
471 // Network - Input layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000472 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
473 EmptyOptional(),
474 optNetGuid,
475 input->GetGuid(),
Finn Williams0a336dc2020-05-11 15:39:58 +0100476 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000477 readableData,
478 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000479
480 // Conv2d layer
481 // Conv2d layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000482 VerifyTimelineEntityBinaryPacketData(conv2d->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000483
484 // Name entity
Keith Davis97da5e22020-03-05 16:25:28 +0000485 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "<Unnamed>", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000486
487 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000488 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
489 EmptyOptional(),
490 conv2d->GetGuid(),
491 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000492 LabelsAndEventClasses::NAME_GUID,
493 readableData,
494 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000495
496 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000497 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
498 EmptyOptional(),
499 conv2d->GetGuid(),
500 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000501 LabelsAndEventClasses::TYPE_GUID,
502 readableData,
503 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000504
Finn Williams0a336dc2020-05-11 15:39:58 +0100505
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000506 // Network - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000507 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
508 EmptyOptional(),
509 optNetGuid,
510 conv2d->GetGuid(),
Finn Williams0a336dc2020-05-11 15:39:58 +0100511 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000512 readableData,
513 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000514
515 // Input layer - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000516 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
517 EmptyOptional(),
518 input->GetGuid(),
519 conv2d->GetGuid(),
Finn Williams0a336dc2020-05-11 15:39:58 +0100520 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000521 readableData,
522 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000523
524 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000525 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
526 EmptyOptional(),
527 EmptyOptional(),
528 LabelsAndEventClasses::CONNECTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000529 LabelsAndEventClasses::TYPE_GUID,
530 readableData,
531 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000532
Finn Williams0a336dc2020-05-11 15:39:58 +0100533
534
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000535 // Conv2d workload
536 // Conv2d workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000537 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000538
539 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000540 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
541 EmptyOptional(),
542 EmptyOptional(),
543 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000544 LabelsAndEventClasses::TYPE_GUID,
545 readableData,
546 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000547
Finn Williams0a336dc2020-05-11 15:39:58 +0100548
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000549 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000550 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000551
552 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000553 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
554 EmptyOptional(),
555 EmptyOptional(),
556 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000557 LabelsAndEventClasses::BACKENDID_GUID,
558 readableData,
559 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000560
Finn Williams0a336dc2020-05-11 15:39:58 +0100561
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000562 // Conv2d layer - Conv2d workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000563 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
564 EmptyOptional(),
565 conv2d->GetGuid(),
566 EmptyOptional(),
Finn Williams0a336dc2020-05-11 15:39:58 +0100567 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000568 readableData,
569 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000570
571 // Activation layer
572 // Activation layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000573 VerifyTimelineEntityBinaryPacketData(activation->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000574
575 // Name entity
Keith Davis97da5e22020-03-05 16:25:28 +0000576 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "activation", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000577
578 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000579 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
580 EmptyOptional(),
581 activation->GetGuid(),
582 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000583 LabelsAndEventClasses::NAME_GUID,
584 readableData,
585 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000586
587 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000588 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
589 EmptyOptional(),
590 activation->GetGuid(),
591 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000592 LabelsAndEventClasses::TYPE_GUID,
593 readableData,
594 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000595
596 // Network - Activation layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000597 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
598 EmptyOptional(),
599 optNetGuid,
600 activation->GetGuid(),
Finn Williams0a336dc2020-05-11 15:39:58 +0100601 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000602 readableData,
603 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000604
605 // Conv2d layer - Activation layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000606 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
607 EmptyOptional(),
608 conv2d->GetGuid(),
609 activation->GetGuid(),
Finn Williams0a336dc2020-05-11 15:39:58 +0100610 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000611 readableData,
612 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000613
614 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000615 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
616 EmptyOptional(),
617 EmptyOptional(),
618 LabelsAndEventClasses::CONNECTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000619 LabelsAndEventClasses::TYPE_GUID,
620 readableData,
621 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000622
623 // Activation workload
624 // Activation workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000625 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000626
627 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000628 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
629 EmptyOptional(),
630 EmptyOptional(),
631 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000632 LabelsAndEventClasses::TYPE_GUID,
633 readableData,
634 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000635
636 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000637 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000638
639 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000640 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
641 EmptyOptional(),
642 EmptyOptional(),
643 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000644 LabelsAndEventClasses::BACKENDID_GUID,
645 readableData,
646 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000647
648 // Activation layer - Activation workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000649 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
650 EmptyOptional(),
651 activation->GetGuid(),
652 EmptyOptional(),
Finn Williams0a336dc2020-05-11 15:39:58 +0100653 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000654 readableData,
655 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000656
657 // Output layer
658 // Output layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000659 VerifyTimelineEntityBinaryPacketData(output->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000660
661 // Name entity
Keith Davis97da5e22020-03-05 16:25:28 +0000662 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "output", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000663
664 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000665 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
666 EmptyOptional(),
667 output->GetGuid(),
668 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000669 LabelsAndEventClasses::NAME_GUID,
670 readableData,
671 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000672
673 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000674 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
675 EmptyOptional(),
676 output->GetGuid(),
677 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000678 LabelsAndEventClasses::TYPE_GUID,
679 readableData,
680 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000681
682 // Network - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000683 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
684 EmptyOptional(),
685 optNetGuid,
686 output->GetGuid(),
Finn Williams0a336dc2020-05-11 15:39:58 +0100687 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000688 readableData,
689 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000690
691 // Activation layer - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000692 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
693 EmptyOptional(),
694 activation->GetGuid(),
695 output->GetGuid(),
Finn Williams0a336dc2020-05-11 15:39:58 +0100696 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000697 readableData,
698 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000699
700 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000701 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
702 EmptyOptional(),
703 EmptyOptional(),
704 LabelsAndEventClasses::CONNECTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000705 LabelsAndEventClasses::TYPE_GUID,
706 readableData,
707 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000708
709 bufferManager.MarkRead(readableBuffer);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000710
711 // Creates structures for input & output.
712 std::vector<float> inputData(inputInfo.GetNumElements());
713 std::vector<float> outputData(outputInfo.GetNumElements());
714
715 InputTensors inputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000716 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000717 {0, ConstTensor(runtime.GetInputTensorInfo(netId, 0), inputData.data())}
Keith Davis97da5e22020-03-05 16:25:28 +0000718 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000719 OutputTensors outputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000720 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000721 {0, Tensor(runtime.GetOutputTensorInfo(netId, 0), outputData.data())}
Keith Davis97da5e22020-03-05 16:25:28 +0000722 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000723
724 // Does the inference.
Sadik Armagan3184c902020-03-18 10:57:30 +0000725 runtime.EnqueueWorkload(netId, inputTensors, outputTensors);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000726
Finn Williamsb6a402f2020-03-24 13:46:22 +0000727 // Get readable buffer for input workload
728 auto inputReadableBuffer = bufferManager.GetReadableBuffer();
729 BOOST_CHECK(inputReadableBuffer != nullptr);
David Monahan6198fe02019-12-02 08:35:43 +0000730
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000731 // Get readable buffer for output workload
732 auto outputReadableBuffer = bufferManager.GetReadableBuffer();
733 BOOST_CHECK(outputReadableBuffer != nullptr);
734
Finn Williamsb6a402f2020-03-24 13:46:22 +0000735 // Get readable buffer for inference timeline
736 auto inferenceReadableBuffer = bufferManager.GetReadableBuffer();
737 BOOST_CHECK(inferenceReadableBuffer != nullptr);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000738
739 // Validate input workload data
740 size = inputReadableBuffer->GetSize();
Finn Williams0a336dc2020-05-11 15:39:58 +0100741 BOOST_CHECK(size == 164);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000742
743 readableData = inputReadableBuffer->GetReadableData();
744 BOOST_CHECK(readableData != nullptr);
745
746 offset = 0;
747
Keith Davis97da5e22020-03-05 16:25:28 +0000748 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100749 VerifyTimelineHeaderBinary(readableData, offset, 156);
Keith Davis97da5e22020-03-05 16:25:28 +0000750
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000751 // Input workload
752 // Input workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000753 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000754
755 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000756 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
757 EmptyOptional(),
758 EmptyOptional(),
759 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000760 LabelsAndEventClasses::TYPE_GUID,
761 readableData,
762 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000763
764 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000765 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000766
767 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000768 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
769 EmptyOptional(),
770 EmptyOptional(),
771 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000772 LabelsAndEventClasses::BACKENDID_GUID,
773 readableData,
774 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000775
776 // Input layer - Input workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000777 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
778 EmptyOptional(),
779 input->GetGuid(),
780 EmptyOptional(),
Finn Williams0a336dc2020-05-11 15:39:58 +0100781 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000782 readableData,
783 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000784
785 bufferManager.MarkRead(inputReadableBuffer);
786
787 // Validate output workload data
788 size = outputReadableBuffer->GetSize();
Finn Williams0a336dc2020-05-11 15:39:58 +0100789 BOOST_CHECK(size == 164);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000790
791 readableData = outputReadableBuffer->GetReadableData();
792 BOOST_CHECK(readableData != nullptr);
793
794 offset = 0;
795
Keith Davis97da5e22020-03-05 16:25:28 +0000796 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100797 VerifyTimelineHeaderBinary(readableData, offset, 156);
Keith Davis97da5e22020-03-05 16:25:28 +0000798
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000799 // Output workload
800 // Output workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000801 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000802
803 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000804 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
805 EmptyOptional(),
806 EmptyOptional(),
807 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000808 LabelsAndEventClasses::TYPE_GUID,
809 readableData,
810 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000811
812 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000813 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000814
815 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000816 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
817 EmptyOptional(),
818 EmptyOptional(),
819 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000820 LabelsAndEventClasses::BACKENDID_GUID,
821 readableData,
822 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000823
824 // Output layer - Output workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000825 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
826 EmptyOptional(),
827 output->GetGuid(),
828 EmptyOptional(),
Finn Williams0a336dc2020-05-11 15:39:58 +0100829 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000830 readableData,
831 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000832
833 bufferManager.MarkRead(outputReadableBuffer);
David Monahan6198fe02019-12-02 08:35:43 +0000834
835 // Validate inference data
836 size = inferenceReadableBuffer->GetSize();
Jan Eilersa10e2a22020-03-26 12:04:54 +0000837
Finn Williams0a336dc2020-05-11 15:39:58 +0100838 BOOST_CHECK(size == 1228 + 10 * ThreadIdSize);
David Monahan6198fe02019-12-02 08:35:43 +0000839
840 readableData = inferenceReadableBuffer->GetReadableData();
841 BOOST_CHECK(readableData != nullptr);
842
843 offset = 0;
844
Keith Davis97da5e22020-03-05 16:25:28 +0000845 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100846 VerifyTimelineHeaderBinary(readableData, offset, 1220 + 10 * ThreadIdSize);
Keith Davis97da5e22020-03-05 16:25:28 +0000847
David Monahan6198fe02019-12-02 08:35:43 +0000848 // Inference timeline trace
849 // Inference entity
Keith Davis97da5e22020-03-05 16:25:28 +0000850 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000851
852 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000853 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
854 EmptyOptional(),
855 EmptyOptional(),
856 LabelsAndEventClasses::INFERENCE_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000857 LabelsAndEventClasses::TYPE_GUID,
858 readableData,
859 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000860
861 // Network - Inference relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000862 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
863 EmptyOptional(),
864 optNetGuid,
865 EmptyOptional(),
Finn Williams0a336dc2020-05-11 15:39:58 +0100866 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000867 readableData,
868 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000869
870 // Start Inference life
871 // Event packet - timeline, threadId, eventGuid
872 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
873
874 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000875 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
876 EmptyOptional(),
877 EmptyOptional(),
878 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000879 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
880 readableData,
881 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000882
883 // Execution
884 // Input workload execution
885 // Input workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +0000886 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000887
888 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000889 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
890 EmptyOptional(),
891 EmptyOptional(),
892 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000893 LabelsAndEventClasses::TYPE_GUID,
894 readableData,
895 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000896
897 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000898 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
899 EmptyOptional(),
900 EmptyOptional(),
901 EmptyOptional(),
Finn Williams0a336dc2020-05-11 15:39:58 +0100902 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000903 readableData,
904 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000905
906 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000907 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
908 EmptyOptional(),
909 EmptyOptional(),
910 EmptyOptional(),
Finn Williams0a336dc2020-05-11 15:39:58 +0100911 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000912 readableData,
913 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000914
915 // Start Input workload execution life
916 // Event packet - timeline, threadId, eventGuid
917 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
918
919 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000920 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
921 EmptyOptional(),
922 EmptyOptional(),
923 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000924 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
925 readableData,
926 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000927
928 // End of Input workload execution life
929 // Event packet - timeline, threadId, eventGuid
930 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
931
932 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000933 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
934 EmptyOptional(),
935 EmptyOptional(),
936 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000937 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
938 readableData,
939 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000940
941 // Conv2d workload execution
942 // Conv2d workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +0000943 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000944
945 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000946 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
947 EmptyOptional(),
948 EmptyOptional(),
949 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000950 LabelsAndEventClasses::TYPE_GUID,
951 readableData,
952 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000953
954 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000955 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
956 EmptyOptional(),
957 EmptyOptional(),
958 EmptyOptional(),
Finn Williams0a336dc2020-05-11 15:39:58 +0100959 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000960 readableData,
961 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000962
963 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000964 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
965 EmptyOptional(),
966 EmptyOptional(),
967 EmptyOptional(),
Finn Williams0a336dc2020-05-11 15:39:58 +0100968 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000969 readableData,
970 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000971
972 // Start Conv2d workload execution life
973 // Event packet - timeline, threadId, eventGuid
974 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
975
976 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000977 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
978 EmptyOptional(),
979 EmptyOptional(),
980 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000981 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
982 readableData,
983 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000984
985 // End of Conv2d workload execution life
986 // Event packet - timeline, threadId, eventGuid
987 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
988
989 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000990 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
991 EmptyOptional(),
992 EmptyOptional(),
993 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000994 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
995 readableData,
996 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000997
998 // Activation workload execution
999 // Activation workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +00001000 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001001
1002 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001003 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1004 EmptyOptional(),
1005 EmptyOptional(),
1006 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001007 LabelsAndEventClasses::TYPE_GUID,
1008 readableData,
1009 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001010
1011 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001012 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1013 EmptyOptional(),
1014 EmptyOptional(),
1015 EmptyOptional(),
Finn Williams0a336dc2020-05-11 15:39:58 +01001016 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +00001017 readableData,
1018 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001019
1020 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001021 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1022 EmptyOptional(),
1023 EmptyOptional(),
1024 EmptyOptional(),
Finn Williams0a336dc2020-05-11 15:39:58 +01001025 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +00001026 readableData,
1027 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001028
1029 // Start Activation workload execution life
1030 // Event packet - timeline, threadId, eventGuid
1031 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1032
1033 // Activation workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001034 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1035 EmptyOptional(),
1036 EmptyOptional(),
1037 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +00001038 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1039 readableData,
1040 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001041
1042 // End of Activation workload execution life
1043 // Event packet - timeline, threadId, eventGuid
1044 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1045
1046 // Activation workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001047 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1048 EmptyOptional(),
1049 EmptyOptional(),
1050 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +00001051 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1052 readableData,
1053 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001054
1055 // Output workload execution
1056 // Output workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +00001057 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001058
1059 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001060 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1061 EmptyOptional(),
1062 EmptyOptional(),
1063 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001064 LabelsAndEventClasses::TYPE_GUID,
1065 readableData,
1066 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001067
1068 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001069 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1070 EmptyOptional(),
1071 EmptyOptional(),
1072 EmptyOptional(),
Finn Williams0a336dc2020-05-11 15:39:58 +01001073 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +00001074 readableData,
1075 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001076
1077 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001078 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1079 EmptyOptional(),
1080 EmptyOptional(),
1081 EmptyOptional(),
Finn Williams0a336dc2020-05-11 15:39:58 +01001082 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +00001083 readableData,
1084 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001085
1086 // Start Output workload execution life
1087 // Event packet - timeline, threadId, eventGuid
1088 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1089
1090 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001091 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1092 EmptyOptional(),
1093 EmptyOptional(),
1094 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +00001095 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1096 readableData,
1097 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001098
1099 // End of Normalize workload execution life
1100 // Event packet - timeline, threadId, eventGuid
1101 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1102
1103 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001104 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1105 EmptyOptional(),
1106 EmptyOptional(),
1107 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +00001108 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1109 readableData,
1110 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001111
1112 // End of Inference life
1113 // Event packet - timeline, threadId, eventGuid
1114 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1115
1116 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001117 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1118 EmptyOptional(),
1119 EmptyOptional(),
1120 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +00001121 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1122 readableData,
1123 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001124
1125 bufferManager.MarkRead(inferenceReadableBuffer);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00001126}