blob: 9f6bc43be85e315cca16beb6c96ed7d6becb9e1f [file] [log] [blame]
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00001//
Jim Flynn6398a982020-05-27 17:05:21 +01002// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00003// 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
Jan Eilersf78c7672020-07-01 18:09:39 +010037std::vector<BackendId> GetSuitableBackendRegistered()
38{
39 std::vector<BackendId> suitableBackends;
40 if (BackendRegistryInstance().IsBackendRegistered(GetComputeDeviceAsCString(armnn::Compute::CpuRef)))
41 {
42 suitableBackends.push_back(armnn::Compute::CpuRef);
43 }
44 if (BackendRegistryInstance().IsBackendRegistered(GetComputeDeviceAsCString(armnn::Compute::CpuAcc)))
45 {
46 suitableBackends.push_back(armnn::Compute::CpuAcc);
47 }
48 if (BackendRegistryInstance().IsBackendRegistered(GetComputeDeviceAsCString(armnn::Compute::GpuAcc)))
49 {
50 suitableBackends.push_back(armnn::Compute::GpuAcc);
51 }
52 return suitableBackends;
53}
54
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000055inline unsigned int OffsetToNextWord(unsigned int numberOfBytes)
56{
57 unsigned int uint32_t_size = sizeof(uint32_t);
58
59 unsigned int remainder = numberOfBytes % uint32_t_size;
60 if (remainder == 0)
61 {
62 return numberOfBytes;
63 }
64
65 return numberOfBytes + uint32_t_size - remainder;
66}
67
Keith Davis97da5e22020-03-05 16:25:28 +000068void VerifyTimelineHeaderBinary(const unsigned char* readableData,
69 unsigned int& offset,
70 uint32_t packetDataLength)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000071{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +010072 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000073
74 // Utils
75 unsigned int uint32_t_size = sizeof(uint32_t);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000076
Keith Davis97da5e22020-03-05 16:25:28 +000077 // Check the TimelineEventClassBinaryPacket header
Finn Williams0a336dc2020-05-11 15:39:58 +010078 uint32_t timelineBinaryPacketHeaderWord0 = ReadUint32(readableData, offset);
79 uint32_t timelineBinaryPacketFamily = (timelineBinaryPacketHeaderWord0 >> 26) & 0x0000003F;
80 uint32_t timelineBinaryPacketClass = (timelineBinaryPacketHeaderWord0 >> 19) & 0x0000007F;
81 uint32_t timelineBinaryPacketType = (timelineBinaryPacketHeaderWord0 >> 16) & 0x00000007;
82 uint32_t timelineBinaryPacketStreamId = (timelineBinaryPacketHeaderWord0 >> 0) & 0x00000007;
83 BOOST_CHECK(timelineBinaryPacketFamily == 1);
84 BOOST_CHECK(timelineBinaryPacketClass == 0);
85 BOOST_CHECK(timelineBinaryPacketType == 1);
86 BOOST_CHECK(timelineBinaryPacketStreamId == 0);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000087 offset += uint32_t_size;
Finn Williams0a336dc2020-05-11 15:39:58 +010088 uint32_t timelineBinaryPacketHeaderWord1 = ReadUint32(readableData, offset);
89 uint32_t timelineBinaryPacketSequenceNumber = (timelineBinaryPacketHeaderWord1 >> 24) & 0x00000001;
90 uint32_t timelineBinaryPacketDataLength = (timelineBinaryPacketHeaderWord1 >> 0) & 0x00FFFFFF;
91 BOOST_CHECK(timelineBinaryPacketSequenceNumber == 0);
92 BOOST_CHECK(timelineBinaryPacketDataLength == packetDataLength);
Keith Davis97da5e22020-03-05 16:25:28 +000093 offset += uint32_t_size;
94}
95
Jim Flynn6398a982020-05-27 17:05:21 +010096ProfilingGuid VerifyTimelineLabelBinaryPacketData(Optional<ProfilingGuid> guid,
97 const std::string& label,
98 const unsigned char* readableData,
99 unsigned int& offset)
Keith Davis97da5e22020-03-05 16:25:28 +0000100{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100101 ARMNN_ASSERT(readableData);
Keith Davis97da5e22020-03-05 16:25:28 +0000102
103 // Utils
104 unsigned int uint32_t_size = sizeof(uint32_t);
105 unsigned int uint64_t_size = sizeof(uint64_t);
106 unsigned int label_size = boost::numeric_cast<unsigned int>(label.size());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000107
108 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000109 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
110 BOOST_CHECK(eventClassDeclId == 0);
111
112 // Check the profiling GUID
113 offset += uint32_t_size;
114 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
115 if (guid.has_value())
116 {
117 BOOST_CHECK(readProfilingGuid == guid.value());
118 }
119 else
120 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000121 armnn::profiling::ProfilingService profilingService;
122 BOOST_CHECK(readProfilingGuid == profilingService.GetStaticId(label));
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000123 }
124
125 // Check the SWTrace label
126 offset += uint64_t_size;
127 uint32_t swTraceLabelLength = ReadUint32(readableData, offset);
Keith Davis97da5e22020-03-05 16:25:28 +0000128 BOOST_CHECK(swTraceLabelLength == label_size + 1); // Label length including the null-terminator
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000129 offset += uint32_t_size;
130 BOOST_CHECK(std::memcmp(readableData + offset, // Offset to the label in the buffer
Keith Davis97da5e22020-03-05 16:25:28 +0000131 label.data(), // The original label
132 swTraceLabelLength - 1) == 0); // The length of the label
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000133
134 // SWTrace strings are written in blocks of words, so the offset has to be updated to the next whole word
135 offset += OffsetToNextWord(swTraceLabelLength);
Jim Flynn6398a982020-05-27 17:05:21 +0100136
137 ProfilingGuid labelGuid(readProfilingGuid);
138 return labelGuid;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000139}
140
Keith Davis97da5e22020-03-05 16:25:28 +0000141void VerifyTimelineEventClassBinaryPacketData(ProfilingGuid guid,
Jim Flynn1892d212020-05-26 21:10:49 +0100142 ProfilingGuid nameGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000143 const unsigned char* readableData,
144 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000145{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100146 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000147
148 // Utils
149 unsigned int uint32_t_size = sizeof(uint32_t);
150 unsigned int uint64_t_size = sizeof(uint64_t);
151
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000152 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000153 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
154 BOOST_CHECK(eventClassDeclId == 2);
155
156 // Check the profiling GUID
157 offset += uint32_t_size;
158 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
159 BOOST_CHECK(readProfilingGuid == guid);
160
Jim Flynn1892d212020-05-26 21:10:49 +0100161 offset += uint64_t_size;
162 uint64_t readProfiilngNameGuid = ReadUint64(readableData, offset);
163 BOOST_CHECK(readProfiilngNameGuid == nameGuid);
164
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000165 // Update the offset to allow parsing to be continued after this function returns
166 offset += uint64_t_size;
167}
168
Keith Davis97da5e22020-03-05 16:25:28 +0000169void VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType relationshipType,
Jim Flynn6398a982020-05-27 17:05:21 +0100170 Optional<ProfilingGuid> relationshipGuid,
171 Optional<ProfilingGuid> headGuid,
172 Optional<ProfilingGuid> tailGuid,
173 Optional<ProfilingGuid> attributeGuid,
174 const unsigned char* readableData,
175 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000176{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100177 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000178
179 uint32_t relationshipTypeUint = 0;
180 switch (relationshipType)
181 {
182 case ProfilingRelationshipType::RetentionLink:
183 relationshipTypeUint = 0;
184 break;
185 case ProfilingRelationshipType::ExecutionLink:
186 relationshipTypeUint = 1;
187 break;
188 case ProfilingRelationshipType::DataLink:
189 relationshipTypeUint = 2;
190 break;
191 case ProfilingRelationshipType::LabelLink:
192 relationshipTypeUint = 3;
193 break;
194 default:
195 BOOST_ERROR("Unknown relationship type");
196 }
197
198 // Utils
199 unsigned int uint32_t_size = sizeof(uint32_t);
200 unsigned int uint64_t_size = sizeof(uint64_t);
201
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000202 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000203 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
204 BOOST_CHECK(eventClassDeclId == 3);
205
206 // Check the relationship type
207 offset += uint32_t_size;
208 uint32_t readRelationshipTypeUint = ReadUint32(readableData, offset);
209 BOOST_CHECK(readRelationshipTypeUint == relationshipTypeUint);
210
211 // Check the relationship GUID
212 offset += uint32_t_size;
213 uint64_t readRelationshipGuid = ReadUint64(readableData, offset);
214 if (relationshipGuid.has_value())
215 {
216 BOOST_CHECK(readRelationshipGuid == relationshipGuid.value());
217 }
218 else
219 {
220 BOOST_CHECK(readRelationshipGuid != ProfilingGuid(0));
221 }
222
Jim Flynn6398a982020-05-27 17:05:21 +0100223 // Check the head GUID of the relationship
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000224 offset += uint64_t_size;
225 uint64_t readHeadRelationshipGuid = ReadUint64(readableData, offset);
226 if (headGuid.has_value())
227 {
228 BOOST_CHECK(readHeadRelationshipGuid == headGuid.value());
229 }
230 else
231 {
232 BOOST_CHECK(readHeadRelationshipGuid != ProfilingGuid(0));
233 }
234
Jim Flynn6398a982020-05-27 17:05:21 +0100235 // Check the tail GUID of the relationship
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000236 offset += uint64_t_size;
237 uint64_t readTailRelationshipGuid = ReadUint64(readableData, offset);
238 if (tailGuid.has_value())
239 {
240 BOOST_CHECK(readTailRelationshipGuid == tailGuid.value());
241 }
242 else
243 {
244 BOOST_CHECK(readTailRelationshipGuid != ProfilingGuid(0));
245 }
246
Jim Flynn6398a982020-05-27 17:05:21 +0100247 // Check the attribute GUID of the relationship
Finn Williams0a336dc2020-05-11 15:39:58 +0100248 offset += uint64_t_size;
249 uint64_t readAttributeRelationshipGuid = ReadUint64(readableData, offset);
250 if (attributeGuid.has_value())
251 {
252 BOOST_CHECK(readAttributeRelationshipGuid == attributeGuid.value());
253 }
254 else
255 {
256 BOOST_CHECK(readAttributeRelationshipGuid == ProfilingGuid(0));
257 }
258
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000259 // Update the offset to allow parsing to be continued after this function returns
260 offset += uint64_t_size;
261}
262
Jim Flynn6398a982020-05-27 17:05:21 +0100263ProfilingGuid VerifyTimelineEntityBinaryPacketData(Optional<ProfilingGuid> guid,
264 const unsigned char* readableData,
265 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000266{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100267 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000268
269 // Utils
270 unsigned int uint32_t_size = sizeof(uint32_t);
271 unsigned int uint64_t_size = sizeof(uint64_t);
272
273 // Reading TimelineEntityClassBinaryPacket
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000274 // Check the decl_id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000275 uint32_t entityDeclId = ReadUint32(readableData, offset);
276 BOOST_CHECK(entityDeclId == 1);
277
278 // Check the profiling GUID
279 offset += uint32_t_size;
280 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
281
282 if (guid.has_value())
283 {
284 BOOST_CHECK(readProfilingGuid == guid.value());
285 }
286 else
287 {
288 BOOST_CHECK(readProfilingGuid != ProfilingGuid(0));
289 }
290
291 offset += uint64_t_size;
Jim Flynn6398a982020-05-27 17:05:21 +0100292
293 ProfilingGuid entityGuid(readProfilingGuid);
294 return entityGuid;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000295}
296
Jim Flynn6398a982020-05-27 17:05:21 +0100297ProfilingGuid VerifyTimelineEventBinaryPacket(Optional<uint64_t> timestamp,
298 Optional<std::thread::id> threadId,
299 Optional<ProfilingGuid> eventGuid,
300 const unsigned char* readableData,
301 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000302{
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +0100303 ARMNN_ASSERT(readableData);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000304
305 // Utils
306 unsigned int uint32_t_size = sizeof(uint32_t);
307 unsigned int uint64_t_size = sizeof(uint64_t);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000308
309 // Reading TimelineEventBinaryPacket
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000310 // Check the decl_id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000311 uint32_t entityDeclId = ReadUint32(readableData, offset);
312 BOOST_CHECK(entityDeclId == 4);
313
314 // Check the timestamp
315 offset += uint32_t_size;
316 uint64_t readTimestamp = ReadUint64(readableData, offset);
317 if (timestamp.has_value())
318 {
319 BOOST_CHECK(readTimestamp == timestamp.value());
320 }
321 else
322 {
323 BOOST_CHECK(readTimestamp != 0);
324 }
325
326 // Check the thread id
327 offset += uint64_t_size;
Colm Donelan5bb3d8a2020-05-12 16:36:46 +0100328 std::vector<uint8_t> readThreadId(ThreadIdSize, 0);
329 ReadBytes(readableData, offset, ThreadIdSize, readThreadId.data());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000330 if (threadId.has_value())
331 {
332 BOOST_CHECK(readThreadId == threadId.value());
333 }
334 else
335 {
336 BOOST_CHECK(readThreadId == std::this_thread::get_id());
337 }
338
339 // Check the event GUID
Colm Donelan5bb3d8a2020-05-12 16:36:46 +0100340 offset += ThreadIdSize;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000341 uint64_t readEventGuid = ReadUint64(readableData, offset);
342 if (eventGuid.has_value())
343 {
344 BOOST_CHECK(readEventGuid == eventGuid.value());
345 }
346 else
347 {
348 BOOST_CHECK(readEventGuid != ProfilingGuid(0));
349 }
350
351 offset += uint64_t_size;
Jim Flynn6398a982020-05-27 17:05:21 +0100352
353 ProfilingGuid eventid(readEventGuid);
354 return eventid;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000355}
356
357void VerifyPostOptimisationStructureTestImpl(armnn::BackendId backendId)
358{
359 using namespace armnn;
360
361 // Create runtime in which test will run
362 armnn::IRuntime::CreationOptions options;
363 options.m_ProfilingOptions.m_EnableProfiling = true;
Keith Davis33ed2212020-03-30 10:43:41 +0100364 options.m_ProfilingOptions.m_TimelineEnabled = true;
Sadik Armagan3184c902020-03-18 10:57:30 +0000365 armnn::Runtime runtime(options);
Keith Davis33ed2212020-03-30 10:43:41 +0100366 GetProfilingService(&runtime).ResetExternalProfilingOptions(options.m_ProfilingOptions, false);
367
368 profiling::ProfilingServiceRuntimeHelper profilingServiceHelper(GetProfilingService(&runtime));
369 profilingServiceHelper.ForceTransitionToState(ProfilingState::NotConnected);
370 profilingServiceHelper.ForceTransitionToState(ProfilingState::WaitingForAck);
371 profilingServiceHelper.ForceTransitionToState(ProfilingState::Active);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000372
373 // build up the structure of the network
374 INetworkPtr net(INetwork::Create());
375
376 // Convolution details
377 TensorInfo inputInfo({ 1, 2, 5, 1 }, DataType::Float32);
Keith Davis97da5e22020-03-05 16:25:28 +0000378 TensorInfo weightInfo({ 3, 2, 3, 1 }, DataType::Float32);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000379 TensorInfo biasInfo({ 3 }, DataType::Float32);
Keith Davis97da5e22020-03-05 16:25:28 +0000380 TensorInfo outputInfo({ 1, 3, 7, 1 }, DataType::Float32);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000381 std::vector<float> weightsData{
Keith Davis97da5e22020-03-05 16:25:28 +0000382 1.0f, 0.0f, 0.0f,
383 0.0f, 2.0f, -1.5f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000384
Keith Davis97da5e22020-03-05 16:25:28 +0000385 0.0f, 0.0f, 0.0f,
386 0.2f, 0.2f, 0.2f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000387
Keith Davis97da5e22020-03-05 16:25:28 +0000388 0.5f, 0.0f, 0.5f,
389 0.0f, -1.0f, 0.0f
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000390 };
391 ConstTensor weights(weightInfo, weightsData);
392
393 Optional<ConstTensor> optionalBiases;
394 std::vector<float> biasesData{ 1.0f, 0.0f, 0.0f };
395 ConstTensor biases(biasInfo, biasesData);
396 optionalBiases = Optional<ConstTensor>(biases);
397
398 // Input layer
399 IConnectableLayer* input = net->AddInputLayer(0, "input");
400
401 // Convolution2d layer
402 Convolution2dDescriptor conv2dDesc;
Keith Davis97da5e22020-03-05 16:25:28 +0000403 conv2dDesc.m_StrideX = 1;
404 conv2dDesc.m_StrideY = 1;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000405 conv2dDesc.m_PadLeft = 0;
406 conv2dDesc.m_PadRight = 0;
407 conv2dDesc.m_PadTop = 2;
408 conv2dDesc.m_PadBottom = 2;
409 conv2dDesc.m_BiasEnabled = true;
410 IConnectableLayer* conv2d = net->AddConvolution2dLayer(conv2dDesc, weights, optionalBiases);
411
412 // Activation layer
413 armnn::ActivationDescriptor activationDesc;
414 armnn::IConnectableLayer* const activation = net->AddActivationLayer(activationDesc, "activation");
415
416 // Output layer
417 IConnectableLayer* output = net->AddOutputLayer(0, "output");
418
419 input->GetOutputSlot(0).Connect(conv2d->GetInputSlot(0));
420 conv2d->GetOutputSlot(0).Connect(activation->GetInputSlot(0));
421 activation->GetOutputSlot(0).Connect(output->GetInputSlot(0));
422
423 input->GetOutputSlot(0).SetTensorInfo(inputInfo);
424 conv2d->GetOutputSlot(0).SetTensorInfo(outputInfo);
425 activation->GetOutputSlot(0).SetTensorInfo(outputInfo);
426
427 // optimize the network
428 std::vector<armnn::BackendId> backends = { backendId };
Sadik Armagan3184c902020-03-18 10:57:30 +0000429 IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime.GetDeviceSpec());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000430
431 ProfilingGuid optNetGuid = optNet->GetGuid();
432
433 // Load it into the runtime. It should success.
434 armnn::NetworkId netId;
Sadik Armagan3184c902020-03-18 10:57:30 +0000435 BOOST_TEST(runtime.LoadNetwork(netId, std::move(optNet)) == Status::Success);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000436
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000437 profiling::BufferManager& bufferManager = profilingServiceHelper.GetProfilingBufferManager();
438 auto readableBuffer = bufferManager.GetReadableBuffer();
439
440 // Profiling is enable, the post-optimisation structure should be created
441 BOOST_CHECK(readableBuffer != nullptr);
442
443 unsigned int size = readableBuffer->GetSize();
Jim Flynn6398a982020-05-27 17:05:21 +0100444 BOOST_CHECK(size == 1124);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000445
446 const unsigned char* readableData = readableBuffer->GetReadableData();
447 BOOST_CHECK(readableData != nullptr);
448
449 unsigned int offset = 0;
450
Keith Davis97da5e22020-03-05 16:25:28 +0000451 // Verify Header
Jim Flynn6398a982020-05-27 17:05:21 +0100452 VerifyTimelineHeaderBinary(readableData, offset, 1116);
453 BOOST_TEST_MESSAGE("HEADER OK");
Keith Davis97da5e22020-03-05 16:25:28 +0000454
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000455 // Post-optimisation network
456 // Network entity
Keith Davis97da5e22020-03-05 16:25:28 +0000457 VerifyTimelineEntityBinaryPacketData(optNetGuid, readableData, offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100458 BOOST_TEST_MESSAGE("NETWORK ENTITY OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000459
460 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000461 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
462 EmptyOptional(),
463 optNetGuid,
Jim Flynn6398a982020-05-27 17:05:21 +0100464 LabelsAndEventClasses::NETWORK_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000465 LabelsAndEventClasses::TYPE_GUID,
466 readableData,
467 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100468 BOOST_TEST_MESSAGE("NETWORK TYPE RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000469
470 // Input layer
471 // Input layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000472 VerifyTimelineEntityBinaryPacketData(input->GetGuid(), readableData, offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100473 BOOST_TEST_MESSAGE("INPUT ENTITY OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000474
475 // Name Entity
Jim Flynn6398a982020-05-27 17:05:21 +0100476 ProfilingGuid inputLabelGuid = VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "input", readableData, offset);
477 BOOST_TEST_MESSAGE("INPUT NAME LABEL OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000478
479 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000480 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
481 EmptyOptional(),
482 input->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100483 inputLabelGuid,
Finn Williams0a336dc2020-05-11 15:39:58 +0100484 LabelsAndEventClasses::NAME_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000485 readableData,
486 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100487 BOOST_TEST_MESSAGE("INPUT NAME RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000488
489 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000490 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
491 EmptyOptional(),
492 input->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100493 LabelsAndEventClasses::LAYER_GUID,
Finn Williams0a336dc2020-05-11 15:39:58 +0100494 LabelsAndEventClasses::TYPE_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000495 readableData,
496 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100497 BOOST_TEST_MESSAGE("INPUT TYPE RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000498
499 // Network - Input layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000500 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
501 EmptyOptional(),
502 optNetGuid,
503 input->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100504 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000505 readableData,
506 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100507 BOOST_TEST_MESSAGE("NETWORK - INPUT CHILD RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000508
509 // Conv2d layer
510 // Conv2d layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000511 VerifyTimelineEntityBinaryPacketData(conv2d->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000512
513 // Name entity
Jim Flynn6398a982020-05-27 17:05:21 +0100514 ProfilingGuid conv2dNameLabelGuid = VerifyTimelineLabelBinaryPacketData(
515 EmptyOptional(), "<Unnamed>", readableData, offset);
516 BOOST_TEST_MESSAGE("CONV2D NAME LABEL OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000517
518 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000519 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
520 EmptyOptional(),
521 conv2d->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100522 conv2dNameLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000523 LabelsAndEventClasses::NAME_GUID,
524 readableData,
525 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100526 BOOST_TEST_MESSAGE("CONV2D NAME RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000527
528 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000529 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
530 EmptyOptional(),
531 conv2d->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100532 LabelsAndEventClasses::LAYER_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000533 LabelsAndEventClasses::TYPE_GUID,
534 readableData,
535 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100536 BOOST_TEST_MESSAGE("CONV2D TYPE RELATIONSHIP OK");
Finn Williams0a336dc2020-05-11 15:39:58 +0100537
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000538 // Network - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000539 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
540 EmptyOptional(),
541 optNetGuid,
542 conv2d->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100543 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000544 readableData,
545 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100546 BOOST_TEST_MESSAGE("NETWORK - CONV2D CHILD RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000547
548 // Input layer - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000549 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
550 EmptyOptional(),
551 input->GetGuid(),
552 conv2d->GetGuid(),
Keith Davis97da5e22020-03-05 16:25:28 +0000553 LabelsAndEventClasses::CONNECTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000554 readableData,
555 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100556 BOOST_TEST_MESSAGE("INPUT - CONV2D LAYER CONNECTION OK");
Finn Williams0a336dc2020-05-11 15:39:58 +0100557
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000558 // Conv2d workload
559 // Conv2d workload entity
Jim Flynn6398a982020-05-27 17:05:21 +0100560 ProfilingGuid conv2DWorkloadGuid = VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
561 BOOST_TEST_MESSAGE("CONV2D WORKLOAD ENTITY OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000562
563 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000564 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
565 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100566 conv2DWorkloadGuid,
567 LabelsAndEventClasses::WORKLOAD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000568 LabelsAndEventClasses::TYPE_GUID,
569 readableData,
570 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100571 BOOST_TEST_MESSAGE("CONV2D WORKLOAD TYPE RELATIONSHIP OK");
Finn Williams0a336dc2020-05-11 15:39:58 +0100572
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000573 // BackendId entity
Jim Flynn6398a982020-05-27 17:05:21 +0100574 ProfilingGuid backendIdLabelGuid = VerifyTimelineLabelBinaryPacketData(
575 EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000576
577 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000578 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
579 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100580 conv2DWorkloadGuid,
581 backendIdLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000582 LabelsAndEventClasses::BACKENDID_GUID,
583 readableData,
584 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100585 BOOST_TEST_MESSAGE("CONV2D WORKLOAD BACKEND ID RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000586
Finn Williams0a336dc2020-05-11 15:39:58 +0100587
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000588 // Conv2d layer - Conv2d workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000589 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
590 EmptyOptional(),
591 conv2d->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100592 conv2DWorkloadGuid,
593 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000594 readableData,
595 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100596 BOOST_TEST_MESSAGE("CONV2D LAYER - WORKLOAD CHILD RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000597
598 // Activation layer
599 // Activation layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000600 VerifyTimelineEntityBinaryPacketData(activation->GetGuid(), readableData, offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100601 BOOST_TEST_MESSAGE("ACTIVATION ENTITY OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000602
603 // Name entity
Jim Flynn6398a982020-05-27 17:05:21 +0100604 ProfilingGuid activationLabelGuid = VerifyTimelineLabelBinaryPacketData(
605 EmptyOptional(), "activation", readableData, offset);
606 BOOST_TEST_MESSAGE("ACTIVATION NAME LABEL OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000607
608 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000609 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
610 EmptyOptional(),
611 activation->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100612 activationLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000613 LabelsAndEventClasses::NAME_GUID,
614 readableData,
615 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100616 BOOST_TEST_MESSAGE("ACTIVATION LAYER - NAME RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000617
618 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000619 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
620 EmptyOptional(),
621 activation->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100622 LabelsAndEventClasses::LAYER_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000623 LabelsAndEventClasses::TYPE_GUID,
624 readableData,
625 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100626 BOOST_TEST_MESSAGE("ACTIVATION LAYER TYPE RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000627
628 // Network - Activation layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000629 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
630 EmptyOptional(),
631 optNetGuid,
632 activation->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100633 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000634 readableData,
635 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100636 BOOST_TEST_MESSAGE("NETWORK - ACTIVATION LAYER CHILD RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000637
638 // Conv2d layer - Activation layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000639 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
640 EmptyOptional(),
641 conv2d->GetGuid(),
642 activation->GetGuid(),
Keith Davis97da5e22020-03-05 16:25:28 +0000643 LabelsAndEventClasses::CONNECTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000644 readableData,
645 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100646 BOOST_TEST_MESSAGE("CONV2D LAYER - ACTIVATION LAYER CONNECTION OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000647
648 // Activation workload
649 // Activation workload entity
Jim Flynn6398a982020-05-27 17:05:21 +0100650 ProfilingGuid activationWorkloadGuid = VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
651 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD ENTITY OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000652
653 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000654 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
655 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100656 activationWorkloadGuid,
657 LabelsAndEventClasses::WORKLOAD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000658 LabelsAndEventClasses::TYPE_GUID,
659 readableData,
660 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100661 BOOST_TEST_MESSAGE("ACTIVATION WORKLAD TYPE RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000662
663 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000664 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100665 BOOST_TEST_MESSAGE("BACKEND ID LABEL OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000666
667 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000668 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
669 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100670 activationWorkloadGuid,
671 backendIdLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000672 LabelsAndEventClasses::BACKENDID_GUID,
673 readableData,
674 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100675 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD BACKEND ID RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000676
677 // Activation layer - Activation workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000678 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
679 EmptyOptional(),
680 activation->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100681 activationWorkloadGuid,
682 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000683 readableData,
684 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100685 BOOST_TEST_MESSAGE("ACTIVATION LAYER - WORKLOAD CHILD RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000686
687 // Output layer
688 // Output layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000689 VerifyTimelineEntityBinaryPacketData(output->GetGuid(), readableData, offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100690 BOOST_TEST_MESSAGE("OUTPUT LAYER ENTITY OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000691
692 // Name entity
Jim Flynn6398a982020-05-27 17:05:21 +0100693 ProfilingGuid outputLabelGuid = VerifyTimelineLabelBinaryPacketData(
694 EmptyOptional(), "output", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000695
696 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000697 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
698 EmptyOptional(),
699 output->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100700 outputLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000701 LabelsAndEventClasses::NAME_GUID,
702 readableData,
703 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100704 BOOST_TEST_MESSAGE("OUTPUT LAYER NAME RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000705
706 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000707 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
708 EmptyOptional(),
709 output->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100710 LabelsAndEventClasses::LAYER_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000711 LabelsAndEventClasses::TYPE_GUID,
712 readableData,
713 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100714 BOOST_TEST_MESSAGE("OUTPUT LAYER TYPE RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000715
716 // Network - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000717 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
718 EmptyOptional(),
719 optNetGuid,
720 output->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100721 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000722 readableData,
723 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100724 BOOST_TEST_MESSAGE("NETWORK - OUTPUT LAYER CHILD RELATIONSHIP OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000725
726 // Activation layer - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000727 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
728 EmptyOptional(),
729 activation->GetGuid(),
730 output->GetGuid(),
Keith Davis97da5e22020-03-05 16:25:28 +0000731 LabelsAndEventClasses::CONNECTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000732 readableData,
733 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100734 BOOST_TEST_MESSAGE("ACTIVATION LAYER - OUTPUT LAYER CONNECTION OK");
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000735
736 bufferManager.MarkRead(readableBuffer);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000737
738 // Creates structures for input & output.
739 std::vector<float> inputData(inputInfo.GetNumElements());
740 std::vector<float> outputData(outputInfo.GetNumElements());
741
742 InputTensors inputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000743 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000744 {0, ConstTensor(runtime.GetInputTensorInfo(netId, 0), inputData.data())}
Keith Davis97da5e22020-03-05 16:25:28 +0000745 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000746 OutputTensors outputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000747 {
Sadik Armagan3184c902020-03-18 10:57:30 +0000748 {0, Tensor(runtime.GetOutputTensorInfo(netId, 0), outputData.data())}
Keith Davis97da5e22020-03-05 16:25:28 +0000749 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000750
751 // Does the inference.
Sadik Armagan3184c902020-03-18 10:57:30 +0000752 runtime.EnqueueWorkload(netId, inputTensors, outputTensors);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000753
Finn Williamsb6a402f2020-03-24 13:46:22 +0000754 // Get readable buffer for input workload
755 auto inputReadableBuffer = bufferManager.GetReadableBuffer();
756 BOOST_CHECK(inputReadableBuffer != nullptr);
David Monahan6198fe02019-12-02 08:35:43 +0000757
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000758 // Get readable buffer for output workload
759 auto outputReadableBuffer = bufferManager.GetReadableBuffer();
760 BOOST_CHECK(outputReadableBuffer != nullptr);
761
Finn Williamsb6a402f2020-03-24 13:46:22 +0000762 // Get readable buffer for inference timeline
763 auto inferenceReadableBuffer = bufferManager.GetReadableBuffer();
764 BOOST_CHECK(inferenceReadableBuffer != nullptr);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000765
766 // Validate input workload data
767 size = inputReadableBuffer->GetSize();
Finn Williams0a336dc2020-05-11 15:39:58 +0100768 BOOST_CHECK(size == 164);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000769
770 readableData = inputReadableBuffer->GetReadableData();
771 BOOST_CHECK(readableData != nullptr);
772
773 offset = 0;
774
Keith Davis97da5e22020-03-05 16:25:28 +0000775 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100776 VerifyTimelineHeaderBinary(readableData, offset, 156);
Jim Flynn6398a982020-05-27 17:05:21 +0100777 BOOST_TEST_MESSAGE("INPUT WORKLOAD HEADER OK");
Keith Davis97da5e22020-03-05 16:25:28 +0000778
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000779 // Input workload
780 // Input workload entity
Jim Flynn6398a982020-05-27 17:05:21 +0100781 ProfilingGuid inputWorkloadGuid = VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
782 BOOST_TEST_MESSAGE("INPUT WORKLOAD TYPE RELATIONSHIP OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000783
784 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000785 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
786 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100787 inputWorkloadGuid,
788 LabelsAndEventClasses::WORKLOAD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000789 LabelsAndEventClasses::TYPE_GUID,
790 readableData,
791 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100792 BOOST_TEST_MESSAGE("INPUT WORKLOAD TYPE RELATIONSHIP OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000793
794 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000795 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000796
797 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000798 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
799 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100800 inputWorkloadGuid,
801 backendIdLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000802 LabelsAndEventClasses::BACKENDID_GUID,
803 readableData,
804 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100805 BOOST_TEST_MESSAGE("INPUT WORKLOAD BACKEND ID RELATIONSHIP OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000806
807 // Input layer - Input workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000808 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
809 EmptyOptional(),
810 input->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100811 inputWorkloadGuid,
812 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000813 readableData,
814 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100815 BOOST_TEST_MESSAGE("INPUT LAYER - INPUT WORKLOAD CHILD RELATIONSHIP OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000816
817 bufferManager.MarkRead(inputReadableBuffer);
818
819 // Validate output workload data
820 size = outputReadableBuffer->GetSize();
Finn Williams0a336dc2020-05-11 15:39:58 +0100821 BOOST_CHECK(size == 164);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000822
823 readableData = outputReadableBuffer->GetReadableData();
824 BOOST_CHECK(readableData != nullptr);
825
826 offset = 0;
827
Keith Davis97da5e22020-03-05 16:25:28 +0000828 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100829 VerifyTimelineHeaderBinary(readableData, offset, 156);
Jim Flynn6398a982020-05-27 17:05:21 +0100830 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD HEADER OK");
Keith Davis97da5e22020-03-05 16:25:28 +0000831
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000832 // Output workload
833 // Output workload entity
Jim Flynn6398a982020-05-27 17:05:21 +0100834 ProfilingGuid outputWorkloadGuid = VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
835 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD ENTITY OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000836
837 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000838 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
839 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100840 outputWorkloadGuid,
841 LabelsAndEventClasses::WORKLOAD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000842 LabelsAndEventClasses::TYPE_GUID,
843 readableData,
844 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100845 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD TYPE RELATIONSHIP OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000846
847 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000848 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100849 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD LABEL OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000850
851 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000852 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
853 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100854 outputWorkloadGuid,
855 backendIdLabelGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000856 LabelsAndEventClasses::BACKENDID_GUID,
857 readableData,
858 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100859 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD BACKEND ID RELATIONSHIP OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000860
861 // Output layer - Output workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000862 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
863 EmptyOptional(),
864 output->GetGuid(),
Jim Flynn6398a982020-05-27 17:05:21 +0100865 outputWorkloadGuid,
866 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000867 readableData,
868 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100869 BOOST_TEST_MESSAGE("OUTPUT LAYER - OUTPUT WORKLOAD CHILD RELATIONSHIP OK");
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000870
871 bufferManager.MarkRead(outputReadableBuffer);
David Monahan6198fe02019-12-02 08:35:43 +0000872
873 // Validate inference data
874 size = inferenceReadableBuffer->GetSize();
Jan Eilersa10e2a22020-03-26 12:04:54 +0000875
Finn Williams0a336dc2020-05-11 15:39:58 +0100876 BOOST_CHECK(size == 1228 + 10 * ThreadIdSize);
David Monahan6198fe02019-12-02 08:35:43 +0000877
878 readableData = inferenceReadableBuffer->GetReadableData();
879 BOOST_CHECK(readableData != nullptr);
880
881 offset = 0;
882
Keith Davis97da5e22020-03-05 16:25:28 +0000883 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100884 VerifyTimelineHeaderBinary(readableData, offset, 1220 + 10 * ThreadIdSize);
Jim Flynn6398a982020-05-27 17:05:21 +0100885 BOOST_TEST_MESSAGE("INFERENCE HEADER OK");
Keith Davis97da5e22020-03-05 16:25:28 +0000886
David Monahan6198fe02019-12-02 08:35:43 +0000887 // Inference timeline trace
888 // Inference entity
Jim Flynn6398a982020-05-27 17:05:21 +0100889 ProfilingGuid inferenceGuid = VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
890 BOOST_TEST_MESSAGE("INFERENCE ENTITY OK");
David Monahan6198fe02019-12-02 08:35:43 +0000891
892 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000893 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
894 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100895 inferenceGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000896 LabelsAndEventClasses::INFERENCE_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000897 LabelsAndEventClasses::TYPE_GUID,
898 readableData,
899 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100900 BOOST_TEST_MESSAGE("INFERENCE TYPE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000901
902 // Network - Inference relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000903 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
904 EmptyOptional(),
905 optNetGuid,
Jim Flynn6398a982020-05-27 17:05:21 +0100906 inferenceGuid,
907 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000908 readableData,
909 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100910 BOOST_TEST_MESSAGE("NETWORK - INFERENCE EXECUTION_OF RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000911
912 // Start Inference life
913 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +0100914 ProfilingGuid inferenceEventGuid = VerifyTimelineEventBinaryPacket(
915 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
916 BOOST_TEST_MESSAGE("INFERENCE START OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +0000917
918 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000919 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
920 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100921 inferenceGuid,
922 inferenceEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000923 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
924 readableData,
925 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100926 BOOST_TEST_MESSAGE("INFERENCE START OF LIFE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000927
928 // Execution
929 // Input workload execution
930 // Input workload execution entity
Jim Flynn6398a982020-05-27 17:05:21 +0100931 ProfilingGuid inputWorkloadExecutionGuid = VerifyTimelineEntityBinaryPacketData(
932 EmptyOptional(), readableData, offset);
933 BOOST_TEST_MESSAGE("INPUT WORKLOAD EXECUTION ENTITY OK");
David Monahan6198fe02019-12-02 08:35:43 +0000934
935 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000936 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
937 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100938 inputWorkloadExecutionGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000939 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000940 LabelsAndEventClasses::TYPE_GUID,
941 readableData,
942 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100943 BOOST_TEST_MESSAGE("INPUT WORKLOAD EXECUTION TYPE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000944
945 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000946 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
947 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100948 inferenceGuid,
949 inputWorkloadExecutionGuid,
950 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000951 readableData,
952 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100953 BOOST_TEST_MESSAGE("INPUT WORKLOAD - INPUT WORKLOAD EXECUTION RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000954
955 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000956 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
957 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100958 inputWorkloadGuid,
959 inputWorkloadExecutionGuid,
960 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000961 readableData,
962 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100963 BOOST_TEST_MESSAGE("INPUT WORKLOAD - INPUT WORKLOAD EXECUTION RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000964
965 // Start Input workload execution life
966 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +0100967 ProfilingGuid inputWorkloadExecutionSOLEventId = VerifyTimelineEventBinaryPacket(
968 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
969 BOOST_TEST_MESSAGE("INPUT WORKLOAD EXECUTION - START OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +0000970
971 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000972 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
973 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100974 inputWorkloadExecutionGuid,
975 inputWorkloadExecutionSOLEventId,
Keith Davis97da5e22020-03-05 16:25:28 +0000976 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
977 readableData,
978 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100979 BOOST_TEST_MESSAGE("INPUT WORKLOAD EXECUTION - START OF LIFE EVENT RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000980
981 // End of Input workload execution life
982 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +0100983 ProfilingGuid inputWorkloadExecutionEOLEventId = VerifyTimelineEventBinaryPacket(
984 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
985 BOOST_TEST_MESSAGE("INPUT WORKLOAD EXECUTION - END OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +0000986
987 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000988 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
989 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +0100990 inputWorkloadExecutionGuid,
991 inputWorkloadExecutionEOLEventId,
Keith Davis97da5e22020-03-05 16:25:28 +0000992 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
993 readableData,
994 offset);
Jim Flynn6398a982020-05-27 17:05:21 +0100995 BOOST_TEST_MESSAGE("INPUT WORKLOAD EXECUTION - END OF LIFE EVENT RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +0000996
997 // Conv2d workload execution
998 // Conv2d workload execution entity
Jim Flynn6398a982020-05-27 17:05:21 +0100999 ProfilingGuid conv2DWorkloadExecutionGuid = VerifyTimelineEntityBinaryPacketData(
1000 EmptyOptional(), readableData, offset);
1001 BOOST_TEST_MESSAGE("CONV2D WORKLOAD EXECUTION ENTITY OK");
David Monahan6198fe02019-12-02 08:35:43 +00001002
1003 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001004 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1005 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001006 conv2DWorkloadExecutionGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001007 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001008 LabelsAndEventClasses::TYPE_GUID,
1009 readableData,
1010 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001011 BOOST_TEST_MESSAGE("CONV2D WORKLOAD EXECUTION TYPE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001012
1013 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001014 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1015 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001016 inferenceGuid,
1017 conv2DWorkloadExecutionGuid,
1018 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001019 readableData,
1020 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001021 BOOST_TEST_MESSAGE("INFERENCE - CONV2D WORKLOAD EXECUTION CHILD RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001022
1023 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001024 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1025 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001026 conv2DWorkloadGuid,
1027 conv2DWorkloadExecutionGuid,
1028 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001029 readableData,
1030 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001031 BOOST_TEST_MESSAGE("CONV2D WORKLOAD - CONV2D WORKLOAD EXECUTION RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001032
1033 // Start Conv2d workload execution life
1034 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001035 ProfilingGuid conv2DWorkloadExecutionSOLEventGuid = VerifyTimelineEventBinaryPacket(
1036 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1037 BOOST_TEST_MESSAGE("CONV2D WORKLOAD EXECUTION START OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001038
1039 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001040 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1041 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001042 conv2DWorkloadExecutionGuid,
1043 conv2DWorkloadExecutionSOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001044 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1045 readableData,
1046 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001047 BOOST_TEST_MESSAGE("CONV2D WORKLOAD EXECUTION START OF LIFE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001048
1049 // End of Conv2d workload execution life
1050 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001051 ProfilingGuid conv2DWorkloadExecutionEOLEventGuid = VerifyTimelineEventBinaryPacket(
1052 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1053 BOOST_TEST_MESSAGE("CONV2D WORKLOAD EXECUTION END OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001054
1055 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001056 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1057 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001058 conv2DWorkloadExecutionGuid,
1059 conv2DWorkloadExecutionEOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001060 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1061 readableData,
1062 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001063 BOOST_TEST_MESSAGE("CONV2D WORKLOAD EXECUTION END OF LIFE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001064
1065 // Activation workload execution
1066 // Activation workload execution entity
Jim Flynn6398a982020-05-27 17:05:21 +01001067 ProfilingGuid activationWorkloadExecutionGuid = VerifyTimelineEntityBinaryPacketData(
1068 EmptyOptional(), readableData, offset);
1069 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD EXECUTION ENTITY OK");
David Monahan6198fe02019-12-02 08:35:43 +00001070
1071 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001072 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1073 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001074 activationWorkloadExecutionGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001075 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001076 LabelsAndEventClasses::TYPE_GUID,
1077 readableData,
1078 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001079 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD EXECUTION TYPE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001080
1081 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001082 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1083 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001084 inferenceGuid,
1085 activationWorkloadExecutionGuid,
1086 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001087 readableData,
1088 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001089 BOOST_TEST_MESSAGE("INFERENCE - ACTIVATION WORKLOAD EXECUTION CHILD RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001090
1091 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001092 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1093 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001094 activationWorkloadGuid,
1095 activationWorkloadExecutionGuid,
1096 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001097 readableData,
1098 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001099 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD - ACTIVATION WORKLOAD EXECUTION RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001100
1101 // Start Activation workload execution life
1102 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001103 ProfilingGuid activationWorkloadExecutionSOLEventGuid = VerifyTimelineEventBinaryPacket(
1104 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1105 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD EXECUTION START OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001106
1107 // Activation workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001108 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1109 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001110 activationWorkloadExecutionGuid,
1111 activationWorkloadExecutionSOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001112 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1113 readableData,
1114 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001115 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD EXECUTION START OF LIFE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001116
1117 // End of Activation workload execution life
1118 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001119 ProfilingGuid activationWorkloadExecutionEOLEventGuid = VerifyTimelineEventBinaryPacket(
1120 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1121 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD EXECUTION END OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001122
1123 // Activation workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001124 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1125 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001126 activationWorkloadExecutionGuid,
1127 activationWorkloadExecutionEOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001128 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1129 readableData,
1130 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001131 BOOST_TEST_MESSAGE("ACTIVATION WORKLOAD EXECUTION END OF LIFE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001132
1133 // Output workload execution
1134 // Output workload execution entity
Jim Flynn6398a982020-05-27 17:05:21 +01001135 ProfilingGuid outputWorkloadExecutionGuid = VerifyTimelineEntityBinaryPacketData(
1136 EmptyOptional(), readableData, offset);
1137 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD EXECUTION ENTITY OK");
David Monahan6198fe02019-12-02 08:35:43 +00001138
1139 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001140 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1141 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001142 outputWorkloadExecutionGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001143 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001144 LabelsAndEventClasses::TYPE_GUID,
1145 readableData,
1146 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001147 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD EXECUTION TYPE RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001148
1149 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001150 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1151 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001152 inferenceGuid,
1153 outputWorkloadExecutionGuid,
1154 LabelsAndEventClasses::CHILD_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001155 readableData,
1156 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001157 BOOST_TEST_MESSAGE("INFERENCE - OUTPUT WORKLOAD EXECUTION CHILD RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001158
1159 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001160 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1161 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001162 outputWorkloadGuid,
1163 outputWorkloadExecutionGuid,
1164 LabelsAndEventClasses::EXECUTION_OF_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +00001165 readableData,
1166 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001167 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD - OUTPUT WORKLOAD EXECUTION EXECUTION_OF RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001168
1169 // Start Output workload execution life
1170 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001171 ProfilingGuid outputWorkloadExecutionSOLEventGuid = VerifyTimelineEventBinaryPacket(
1172 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1173 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD EXECUTION START OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001174
1175 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001176 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1177 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001178 outputWorkloadExecutionGuid,
1179 outputWorkloadExecutionSOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001180 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1181 readableData,
1182 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001183 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD EXECUTION - START OF LIFE EVENT RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001184
1185 // End of Normalize workload execution life
1186 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001187 ProfilingGuid outputWorkloadExecutionEOLEventGuid = VerifyTimelineEventBinaryPacket(
1188 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1189 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD EXECUTION END OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001190
1191 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001192 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1193 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001194 outputWorkloadExecutionGuid,
1195 outputWorkloadExecutionEOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001196 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1197 readableData,
1198 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001199 BOOST_TEST_MESSAGE("OUTPUT WORKLOAD EXECUTION - END OF LIFE EVENT RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001200
1201 // End of Inference life
1202 // Event packet - timeline, threadId, eventGuid
Jim Flynn6398a982020-05-27 17:05:21 +01001203 ProfilingGuid inferenceEOLEventGuid = VerifyTimelineEventBinaryPacket(
1204 EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1205 BOOST_TEST_MESSAGE("INFERENCE END OF LIFE EVENT OK");
David Monahan6198fe02019-12-02 08:35:43 +00001206
1207 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001208 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1209 EmptyOptional(),
Jim Flynn6398a982020-05-27 17:05:21 +01001210 inferenceGuid,
1211 inferenceEOLEventGuid,
Keith Davis97da5e22020-03-05 16:25:28 +00001212 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1213 readableData,
1214 offset);
Jim Flynn6398a982020-05-27 17:05:21 +01001215 BOOST_TEST_MESSAGE("INFERENCE - END OF LIFE EVENT RELATIONSHIP OK");
David Monahan6198fe02019-12-02 08:35:43 +00001216
1217 bufferManager.MarkRead(inferenceReadableBuffer);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00001218}
Jim Flynn6398a982020-05-27 17:05:21 +01001219
Jim Flynn6398a982020-05-27 17:05:21 +01001220bool CompareOutput(std::vector<std::string> output, std::vector<std::string> expectedOutput)
1221{
1222 if (output.size() != expectedOutput.size())
1223 {
1224 std::cerr << "output has [" << output.size() << "] lines, expected was ["
1225 << expectedOutput.size() << "] lines" << std::endl;
1226 std::cerr << std::endl << "actual" << std::endl << std::endl;
1227 for (auto line : output)
1228 {
1229 std::cerr << line << std::endl;
1230 }
1231 std::cerr << std::endl << "expected" << std::endl << std::endl;
1232 for (auto line : expectedOutput)
1233 {
1234 std::cerr << line << std::endl;
1235 }
1236 return false;
1237 }
1238 bool bRet = true;
1239 for (unsigned long i = 0; i < output.size(); ++i)
1240 {
1241 if (output[i] != expectedOutput[i])
1242 {
1243 bRet = false;
1244 std::cerr << i << ": actual [" << output[i] << "] expected [" << expectedOutput[i] << "]" << std::endl;
1245 }
1246 }
1247 return bRet;
1248}