373 using namespace armnn;
386 profilingServiceHelper.ForceTransitionToState(ProfilingState::NotConnected);
387 profilingServiceHelper.ForceTransitionToState(ProfilingState::WaitingForAck);
388 profilingServiceHelper.ForceTransitionToState(ProfilingState::Active);
398 std::vector<float> weightsData{
411 std::vector<float> biasesData{ 1.0f, 0.0f, 0.0f };
446 input->GetOutputSlot(0).Connect(conv2d->
GetInputSlot(0));
450 input->GetOutputSlot(0).SetTensorInfo(inputInfo);
455 std::vector<armnn::BackendId> backends = { backendId };
458 ProfilingGuid optNetGuid = optNet->GetGuid();
462 CHECK(runtime.LoadNetwork(netId, std::move(optNet)) ==
Status::Success);
464 BufferManager& bufferManager = profilingServiceHelper.GetProfilingBufferManager();
465 auto readableBuffer = bufferManager.GetReadableBuffer();
468 CHECK(readableBuffer !=
nullptr);
469 unsigned int size = readableBuffer->GetSize();
471 const unsigned char* readableData = readableBuffer->GetReadableData();
472 CHECK(readableData !=
nullptr);
474 unsigned int offset = 0;
485 arm::pipe::EmptyOptional(),
487 LabelsAndEventClasses::NETWORK_GUID,
488 LabelsAndEventClasses::TYPE_GUID,
494 arm::pipe::EmptyOptional(),
495 arm::pipe::EmptyOptional(),
501 arm::pipe::EmptyOptional(),
504 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
509 int processID = arm::pipe::GetCurrentProcessId();
510 std::stringstream ss;
512 std::string processIdLabel = ss.str();
514 arm::pipe::EmptyOptional(), processIdLabel, readableData, offset);
518 arm::pipe::EmptyOptional(),
520 arm::pipe::EmptyOptional(),
521 LabelsAndEventClasses::PROCESS_ID_GUID,
530 arm::pipe::EmptyOptional(),
"input", readableData, offset);
534 arm::pipe::EmptyOptional(),
537 LabelsAndEventClasses::NAME_GUID,
543 arm::pipe::EmptyOptional(),
545 LabelsAndEventClasses::LAYER_GUID,
546 LabelsAndEventClasses::TYPE_GUID,
552 arm::pipe::EmptyOptional(),
555 LabelsAndEventClasses::CHILD_GUID,
570 arm::pipe::EmptyOptional(),
"Weights", readableData, offset);
574 arm::pipe::EmptyOptional(),
575 arm::pipe::EmptyOptional(),
576 weightsNameLabelGuid,
577 LabelsAndEventClasses::NAME_GUID,
583 arm::pipe::EmptyOptional(),
584 arm::pipe::EmptyOptional(),
585 LabelsAndEventClasses::LAYER_GUID,
586 LabelsAndEventClasses::TYPE_GUID,
592 arm::pipe::EmptyOptional(),
594 arm::pipe::EmptyOptional(),
595 LabelsAndEventClasses::CHILD_GUID,
602 arm::pipe::EmptyOptional(), readableData, offset);
606 arm::pipe::EmptyOptional(),
608 LabelsAndEventClasses::WORKLOAD_GUID,
609 LabelsAndEventClasses::TYPE_GUID,
615 arm::pipe::EmptyOptional(), backendId.
Get(), readableData, offset);
619 arm::pipe::EmptyOptional(),
622 LabelsAndEventClasses::BACKENDID_GUID,
629 arm::pipe::EmptyOptional(),
630 arm::pipe::EmptyOptional(),
632 LabelsAndEventClasses::CHILD_GUID,
646 arm::pipe::EmptyOptional(),
"Bias", readableData, offset);
650 arm::pipe::EmptyOptional(),
651 arm::pipe::EmptyOptional(),
653 LabelsAndEventClasses::NAME_GUID,
659 arm::pipe::EmptyOptional(),
660 arm::pipe::EmptyOptional(),
661 LabelsAndEventClasses::LAYER_GUID,
662 LabelsAndEventClasses::TYPE_GUID,
668 arm::pipe::EmptyOptional(),
670 arm::pipe::EmptyOptional(),
671 LabelsAndEventClasses::CHILD_GUID,
678 arm::pipe::EmptyOptional(), readableData, offset);
682 arm::pipe::EmptyOptional(),
684 LabelsAndEventClasses::WORKLOAD_GUID,
685 LabelsAndEventClasses::TYPE_GUID,
691 arm::pipe::EmptyOptional(), backendId.
Get(), readableData, offset);
695 arm::pipe::EmptyOptional(),
698 LabelsAndEventClasses::BACKENDID_GUID,
705 arm::pipe::EmptyOptional(),
706 arm::pipe::EmptyOptional(),
708 LabelsAndEventClasses::CHILD_GUID,
718 arm::pipe::EmptyOptional(),
"<Unnamed>", readableData, offset);
722 arm::pipe::EmptyOptional(),
725 LabelsAndEventClasses::NAME_GUID,
731 arm::pipe::EmptyOptional(),
733 LabelsAndEventClasses::LAYER_GUID,
734 LabelsAndEventClasses::TYPE_GUID,
740 arm::pipe::EmptyOptional(),
743 LabelsAndEventClasses::CHILD_GUID,
749 arm::pipe::EmptyOptional(),
752 LabelsAndEventClasses::CONNECTION_GUID,
758 arm::pipe::EmptyOptional(),
759 arm::pipe::EmptyOptional(),
761 LabelsAndEventClasses::CONNECTION_GUID,
767 arm::pipe::EmptyOptional(),
768 arm::pipe::EmptyOptional(),
770 LabelsAndEventClasses::CONNECTION_GUID,
777 arm::pipe::EmptyOptional(), readableData, offset);
781 arm::pipe::EmptyOptional(),
783 LabelsAndEventClasses::WORKLOAD_GUID,
784 LabelsAndEventClasses::TYPE_GUID,
790 arm::pipe::EmptyOptional(), backendId.
Get(), readableData, offset);
794 arm::pipe::EmptyOptional(),
797 LabelsAndEventClasses::BACKENDID_GUID,
804 arm::pipe::EmptyOptional(),
807 LabelsAndEventClasses::CHILD_GUID,
817 arm::pipe::EmptyOptional(),
"abs", readableData, offset);
821 arm::pipe::EmptyOptional(),
824 LabelsAndEventClasses::NAME_GUID,
830 arm::pipe::EmptyOptional(),
832 LabelsAndEventClasses::LAYER_GUID,
833 LabelsAndEventClasses::TYPE_GUID,
839 arm::pipe::EmptyOptional(),
842 LabelsAndEventClasses::CHILD_GUID,
848 arm::pipe::EmptyOptional(),
851 LabelsAndEventClasses::CONNECTION_GUID,
858 arm::pipe::EmptyOptional(), readableData, offset);
862 arm::pipe::EmptyOptional(),
864 LabelsAndEventClasses::WORKLOAD_GUID,
865 LabelsAndEventClasses::TYPE_GUID,
874 arm::pipe::EmptyOptional(),
877 LabelsAndEventClasses::BACKENDID_GUID,
883 arm::pipe::EmptyOptional(),
886 LabelsAndEventClasses::CHILD_GUID,
896 arm::pipe::EmptyOptional(),
"output", readableData, offset);
900 arm::pipe::EmptyOptional(),
903 LabelsAndEventClasses::NAME_GUID,
909 arm::pipe::EmptyOptional(),
911 LabelsAndEventClasses::LAYER_GUID,
912 LabelsAndEventClasses::TYPE_GUID,
918 arm::pipe::EmptyOptional(),
921 LabelsAndEventClasses::CHILD_GUID,
927 arm::pipe::EmptyOptional(),
930 LabelsAndEventClasses::CONNECTION_GUID,
934 bufferManager.MarkRead(readableBuffer);
937 std::vector<float> inputData(inputInfo.GetNumElements());
938 std::vector<float> outputData(outputInfo.GetNumElements());
940 TensorInfo inputTensorInfo = runtime.GetInputTensorInfo(netId, 0);
944 {0,
ConstTensor(inputTensorInfo, inputData.data())}
948 {0,
Tensor(runtime.GetOutputTensorInfo(netId, 0), outputData.data())}
952 runtime.EnqueueWorkload(netId, inputTensors, outputTensors);
955 auto inputReadableBuffer = bufferManager.GetReadableBuffer();
956 CHECK(inputReadableBuffer !=
nullptr);
959 auto outputReadableBuffer = bufferManager.GetReadableBuffer();
960 CHECK(outputReadableBuffer !=
nullptr);
963 auto inferenceReadableBuffer = bufferManager.GetReadableBuffer();
964 CHECK(inferenceReadableBuffer !=
nullptr);
967 size = inputReadableBuffer->GetSize();
970 readableData = inputReadableBuffer->GetReadableData();
971 CHECK(readableData !=
nullptr);
981 arm::pipe::EmptyOptional(), readableData, offset);
985 arm::pipe::EmptyOptional(),
987 LabelsAndEventClasses::WORKLOAD_GUID,
988 LabelsAndEventClasses::TYPE_GUID,
997 arm::pipe::EmptyOptional(),
1000 LabelsAndEventClasses::BACKENDID_GUID,
1006 arm::pipe::EmptyOptional(),
1009 LabelsAndEventClasses::CHILD_GUID,
1013 bufferManager.MarkRead(inputReadableBuffer);
1016 size = outputReadableBuffer->GetSize();
1019 readableData = outputReadableBuffer->GetReadableData();
1020 CHECK(readableData !=
nullptr);
1030 arm::pipe::EmptyOptional(), readableData, offset);
1034 arm::pipe::EmptyOptional(),
1036 LabelsAndEventClasses::WORKLOAD_GUID,
1037 LabelsAndEventClasses::TYPE_GUID,
1046 arm::pipe::EmptyOptional(),
1049 LabelsAndEventClasses::BACKENDID_GUID,
1055 arm::pipe::EmptyOptional(),
1058 LabelsAndEventClasses::CHILD_GUID,
1062 bufferManager.MarkRead(outputReadableBuffer);
1065 size = inferenceReadableBuffer->GetSize();
1067 CHECK(size == 1748 + 10 * ThreadIdSize);
1069 readableData = inferenceReadableBuffer->GetReadableData();
1070 CHECK(readableData !=
nullptr);
1080 arm::pipe::EmptyOptional(), readableData, offset);
1084 arm::pipe::EmptyOptional(),
1086 LabelsAndEventClasses::INFERENCE_GUID,
1087 LabelsAndEventClasses::TYPE_GUID,
1093 arm::pipe::EmptyOptional(),
1096 LabelsAndEventClasses::EXECUTION_OF_GUID,
1103 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1107 arm::pipe::EmptyOptional(),
1110 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1118 arm::pipe::EmptyOptional(), readableData, offset);
1122 arm::pipe::EmptyOptional(),
1123 inputWorkloadExecutionGuid,
1124 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1125 LabelsAndEventClasses::TYPE_GUID,
1131 arm::pipe::EmptyOptional(),
1133 inputWorkloadExecutionGuid,
1134 LabelsAndEventClasses::CHILD_GUID,
1140 arm::pipe::EmptyOptional(),
1142 inputWorkloadExecutionGuid,
1143 LabelsAndEventClasses::EXECUTION_OF_GUID,
1150 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1154 arm::pipe::EmptyOptional(),
1155 inputWorkloadExecutionGuid,
1156 inputWorkloadExecutionSOLEventId,
1157 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1164 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1168 arm::pipe::EmptyOptional(),
1169 inputWorkloadExecutionGuid,
1170 inputWorkloadExecutionEOLEventId,
1171 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1178 arm::pipe::EmptyOptional(), readableData, offset);
1182 arm::pipe::EmptyOptional(),
1183 weightsWorkloadExecutionGuid,
1184 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1185 LabelsAndEventClasses::TYPE_GUID,
1191 arm::pipe::EmptyOptional(),
1193 weightsWorkloadExecutionGuid,
1194 LabelsAndEventClasses::CHILD_GUID,
1200 arm::pipe::EmptyOptional(),
1201 weightsWorkloadGuid,
1202 weightsWorkloadExecutionGuid,
1203 LabelsAndEventClasses::EXECUTION_OF_GUID,
1210 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1214 arm::pipe::EmptyOptional(),
1215 weightsWorkloadExecutionGuid,
1216 weightsWorkloadExecutionSOLEventGuid,
1217 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1224 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1228 arm::pipe::EmptyOptional(),
1229 weightsWorkloadExecutionGuid,
1230 weightsWorkloadExecutionEOLEventGuid,
1231 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1238 arm::pipe::EmptyOptional(), readableData, offset);
1242 arm::pipe::EmptyOptional(),
1243 biasWorkloadExecutionGuid,
1244 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1245 LabelsAndEventClasses::TYPE_GUID,
1251 arm::pipe::EmptyOptional(),
1253 biasWorkloadExecutionGuid,
1254 LabelsAndEventClasses::CHILD_GUID,
1260 arm::pipe::EmptyOptional(),
1262 biasWorkloadExecutionGuid,
1263 LabelsAndEventClasses::EXECUTION_OF_GUID,
1270 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1274 arm::pipe::EmptyOptional(),
1275 biasWorkloadExecutionGuid,
1276 biasWorkloadExecutionSOLEventGuid,
1277 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1284 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1288 arm::pipe::EmptyOptional(),
1289 biasWorkloadExecutionGuid,
1290 biasWorkloadExecutionEOLEventGuid,
1291 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1298 arm::pipe::EmptyOptional(), readableData, offset);
1302 arm::pipe::EmptyOptional(),
1303 conv2DWorkloadExecutionGuid,
1304 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1305 LabelsAndEventClasses::TYPE_GUID,
1311 arm::pipe::EmptyOptional(),
1313 conv2DWorkloadExecutionGuid,
1314 LabelsAndEventClasses::CHILD_GUID,
1320 arm::pipe::EmptyOptional(),
1322 conv2DWorkloadExecutionGuid,
1323 LabelsAndEventClasses::EXECUTION_OF_GUID,
1330 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1334 arm::pipe::EmptyOptional(),
1335 conv2DWorkloadExecutionGuid,
1336 conv2DWorkloadExecutionSOLEventGuid,
1337 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1344 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1348 arm::pipe::EmptyOptional(),
1349 conv2DWorkloadExecutionGuid,
1350 conv2DWorkloadExecutionEOLEventGuid,
1351 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1358 arm::pipe::EmptyOptional(), readableData, offset);
1362 arm::pipe::EmptyOptional(),
1363 absWorkloadExecutionGuid,
1364 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1365 LabelsAndEventClasses::TYPE_GUID,
1371 arm::pipe::EmptyOptional(),
1373 absWorkloadExecutionGuid,
1374 LabelsAndEventClasses::CHILD_GUID,
1380 arm::pipe::EmptyOptional(),
1382 absWorkloadExecutionGuid,
1383 LabelsAndEventClasses::EXECUTION_OF_GUID,
1390 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1394 arm::pipe::EmptyOptional(),
1395 absWorkloadExecutionGuid,
1396 absWorkloadExecutionSOLEventGuid,
1397 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1404 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1408 arm::pipe::EmptyOptional(),
1409 absWorkloadExecutionGuid,
1410 absWorkloadExecutionEOLEventGuid,
1411 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1418 arm::pipe::EmptyOptional(), readableData, offset);
1422 arm::pipe::EmptyOptional(),
1423 outputWorkloadExecutionGuid,
1424 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1425 LabelsAndEventClasses::TYPE_GUID,
1431 arm::pipe::EmptyOptional(),
1433 outputWorkloadExecutionGuid,
1434 LabelsAndEventClasses::CHILD_GUID,
1440 arm::pipe::EmptyOptional(),
1442 outputWorkloadExecutionGuid,
1443 LabelsAndEventClasses::EXECUTION_OF_GUID,
1450 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1454 arm::pipe::EmptyOptional(),
1455 outputWorkloadExecutionGuid,
1456 outputWorkloadExecutionSOLEventGuid,
1457 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1464 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1468 arm::pipe::EmptyOptional(),
1469 outputWorkloadExecutionGuid,
1470 outputWorkloadExecutionEOLEventGuid,
1471 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1478 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1482 arm::pipe::EmptyOptional(),
1484 inferenceEOLEventGuid,
1485 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1489 bufferManager.MarkRead(inferenceReadableBuffer);
uint32_t m_PadBottom
Padding bottom value in the height dimension.
bool m_BiasEnabled
Enable/disable bias.
Interface for a layer that is connectable to other layers via InputSlots and OutputSlots.
A Convolution2dDescriptor for the Convolution2dLayer.
ProfilingGuid VerifyTimelineEntityBinaryPacketData(arm::pipe::Optional< ProfilingGuid > guid, const unsigned char *readableData, unsigned int &offset)
std::vector< std::pair< LayerBindingId, class ConstTensor > > InputTensors
uint32_t m_PadRight
Padding right value in the width dimension.
Copyright (c) 2021 ARM Limited and Contributors.
bool m_EnableProfiling
Indicates whether external profiling is enabled or not.
virtual void SetTensorInfo(const TensorInfo &tensorInfo)=0
A tensor defined by a TensorInfo (shape and data type) and a mutable backing store.
void VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType relationshipType, arm::pipe::Optional< ProfilingGuid > relationshipGuid, arm::pipe::Optional< ProfilingGuid > headGuid, arm::pipe::Optional< ProfilingGuid > tailGuid, arm::pipe::Optional< ProfilingGuid > attributeGuid, const unsigned char *readableData, unsigned int &offset)
uint32_t m_PadTop
Padding top value in the height dimension.
uint32_t m_StrideX
Stride value when proceeding through input for the width dimension.
IOptimizedNetworkPtr Optimize(const INetwork &network, const std::vector< BackendId > &backendPreferences, const IDeviceSpec &deviceSpec, const OptimizerOptions &options=OptimizerOptions(), Optional< std::vector< std::string > &> messages=EmptyOptional())
Create an optimized version of the network.
virtual LayerGuid GetGuid() const =0
Returns the unique id of the layer.
A tensor defined by a TensorInfo (shape and data type) and an immutable backing store.
std::vector< std::pair< LayerBindingId, class Tensor > > OutputTensors
std::unique_ptr< IOptimizedNetwork, void(*)(IOptimizedNetwork *network)> IOptimizedNetworkPtr
ProfilingGuid VerifyTimelineLabelBinaryPacketData(arm::pipe::Optional< ProfilingGuid > guid, const std::string &label, const unsigned char *readableData, unsigned int &offset)
ProfilingOptions ConvertExternalProfilingOptions(const armnn::IRuntime::CreationOptions::ExternalProfilingOptions &options)
uint32_t m_StrideY
Stride value when proceeding through input for the height dimension.
void VerifyTimelineHeaderBinary(const unsigned char *readableData, unsigned int &offset, uint32_t packetDataLength)
A ElementwiseUnaryDescriptor for the ElementwiseUnaryLayer.
const std::string & Get() const
virtual const IInputSlot & GetInputSlot(unsigned int index) const =0
Get a const input slot handle by slot index.
void SetConstant(const bool IsConstant=true)
Marks the data corresponding to this tensor info as constant.
bool m_TimelineEnabled
Indicates whether external timeline profiling is enabled or not.
virtual const IOutputSlot & GetOutputSlot(unsigned int index) const =0
Get the const output slot handle by slot index.
std::unique_ptr< INetwork, void(*)(INetwork *network)> INetworkPtr
virtual int Connect(IInputSlot &destination)=0
ExternalProfilingOptions m_ProfilingOptions
arm::pipe::IProfilingService & GetProfilingService(armnn::RuntimeImpl *runtime)
ProfilingGuid VerifyTimelineEventBinaryPacket(arm::pipe::Optional< uint64_t > timestamp, arm::pipe::Optional< int > threadId, arm::pipe::Optional< ProfilingGuid > eventGuid, const unsigned char *readableData, unsigned int &offset)
static INetworkPtr Create(NetworkOptions networkOptions={})
uint32_t m_PadLeft
Padding left value in the width dimension.