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 };
428 IConnectableLayer* conv2d = net->AddConvolution2dLayer(conv2dDesc, weights, optionalBiases);
437 input->GetOutputSlot(0).Connect(conv2d->GetInputSlot(0));
441 input->GetOutputSlot(0).SetTensorInfo(inputInfo);
442 conv2d->GetOutputSlot(0).SetTensorInfo(outputInfo);
446 std::vector<armnn::BackendId> backends = { backendId };
449 ProfilingGuid optNetGuid = optNet->GetGuid();
453 CHECK(runtime.LoadNetwork(netId, std::move(optNet)) ==
Status::Success);
455 BufferManager& bufferManager = profilingServiceHelper.GetProfilingBufferManager();
456 auto readableBuffer = bufferManager.GetReadableBuffer();
459 CHECK(readableBuffer !=
nullptr);
460 unsigned int size = readableBuffer->GetSize();
462 const unsigned char* readableData = readableBuffer->GetReadableData();
463 CHECK(readableData !=
nullptr);
465 unsigned int offset = 0;
476 arm::pipe::EmptyOptional(),
478 LabelsAndEventClasses::NETWORK_GUID,
479 LabelsAndEventClasses::TYPE_GUID,
485 arm::pipe::EmptyOptional(),
486 arm::pipe::EmptyOptional(),
492 arm::pipe::EmptyOptional(),
495 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
500 int processID = arm::pipe::GetCurrentProcessId();
501 std::stringstream ss;
503 std::string processIdLabel = ss.str();
505 arm::pipe::EmptyOptional(), processIdLabel, readableData, offset);
509 arm::pipe::EmptyOptional(),
511 arm::pipe::EmptyOptional(),
512 LabelsAndEventClasses::PROCESS_ID_GUID,
521 arm::pipe::EmptyOptional(),
"input", readableData, offset);
525 arm::pipe::EmptyOptional(),
528 LabelsAndEventClasses::NAME_GUID,
534 arm::pipe::EmptyOptional(),
536 LabelsAndEventClasses::LAYER_GUID,
537 LabelsAndEventClasses::TYPE_GUID,
543 arm::pipe::EmptyOptional(),
546 LabelsAndEventClasses::CHILD_GUID,
561 arm::pipe::EmptyOptional(),
"Weights", readableData, offset);
565 arm::pipe::EmptyOptional(),
566 arm::pipe::EmptyOptional(),
567 weightsNameLabelGuid,
568 LabelsAndEventClasses::NAME_GUID,
574 arm::pipe::EmptyOptional(),
575 arm::pipe::EmptyOptional(),
576 LabelsAndEventClasses::LAYER_GUID,
577 LabelsAndEventClasses::TYPE_GUID,
583 arm::pipe::EmptyOptional(),
585 arm::pipe::EmptyOptional(),
586 LabelsAndEventClasses::CHILD_GUID,
593 arm::pipe::EmptyOptional(), readableData, offset);
597 arm::pipe::EmptyOptional(),
599 LabelsAndEventClasses::WORKLOAD_GUID,
600 LabelsAndEventClasses::TYPE_GUID,
606 arm::pipe::EmptyOptional(), backendId.
Get(), readableData, offset);
610 arm::pipe::EmptyOptional(),
613 LabelsAndEventClasses::BACKENDID_GUID,
620 arm::pipe::EmptyOptional(),
621 arm::pipe::EmptyOptional(),
623 LabelsAndEventClasses::CHILD_GUID,
637 arm::pipe::EmptyOptional(),
"Bias", readableData, offset);
641 arm::pipe::EmptyOptional(),
642 arm::pipe::EmptyOptional(),
644 LabelsAndEventClasses::NAME_GUID,
650 arm::pipe::EmptyOptional(),
651 arm::pipe::EmptyOptional(),
652 LabelsAndEventClasses::LAYER_GUID,
653 LabelsAndEventClasses::TYPE_GUID,
659 arm::pipe::EmptyOptional(),
661 arm::pipe::EmptyOptional(),
662 LabelsAndEventClasses::CHILD_GUID,
669 arm::pipe::EmptyOptional(), readableData, offset);
673 arm::pipe::EmptyOptional(),
675 LabelsAndEventClasses::WORKLOAD_GUID,
676 LabelsAndEventClasses::TYPE_GUID,
682 arm::pipe::EmptyOptional(), backendId.
Get(), readableData, offset);
686 arm::pipe::EmptyOptional(),
689 LabelsAndEventClasses::BACKENDID_GUID,
696 arm::pipe::EmptyOptional(),
697 arm::pipe::EmptyOptional(),
699 LabelsAndEventClasses::CHILD_GUID,
709 arm::pipe::EmptyOptional(),
"<Unnamed>", readableData, offset);
713 arm::pipe::EmptyOptional(),
716 LabelsAndEventClasses::NAME_GUID,
722 arm::pipe::EmptyOptional(),
724 LabelsAndEventClasses::LAYER_GUID,
725 LabelsAndEventClasses::TYPE_GUID,
731 arm::pipe::EmptyOptional(),
734 LabelsAndEventClasses::CHILD_GUID,
740 arm::pipe::EmptyOptional(),
743 LabelsAndEventClasses::CONNECTION_GUID,
749 arm::pipe::EmptyOptional(),
750 arm::pipe::EmptyOptional(),
752 LabelsAndEventClasses::CONNECTION_GUID,
758 arm::pipe::EmptyOptional(),
759 arm::pipe::EmptyOptional(),
761 LabelsAndEventClasses::CONNECTION_GUID,
768 arm::pipe::EmptyOptional(), readableData, offset);
772 arm::pipe::EmptyOptional(),
774 LabelsAndEventClasses::WORKLOAD_GUID,
775 LabelsAndEventClasses::TYPE_GUID,
781 arm::pipe::EmptyOptional(), backendId.
Get(), readableData, offset);
785 arm::pipe::EmptyOptional(),
788 LabelsAndEventClasses::BACKENDID_GUID,
795 arm::pipe::EmptyOptional(),
798 LabelsAndEventClasses::CHILD_GUID,
808 arm::pipe::EmptyOptional(),
"abs", readableData, offset);
812 arm::pipe::EmptyOptional(),
815 LabelsAndEventClasses::NAME_GUID,
821 arm::pipe::EmptyOptional(),
823 LabelsAndEventClasses::LAYER_GUID,
824 LabelsAndEventClasses::TYPE_GUID,
830 arm::pipe::EmptyOptional(),
833 LabelsAndEventClasses::CHILD_GUID,
839 arm::pipe::EmptyOptional(),
842 LabelsAndEventClasses::CONNECTION_GUID,
849 arm::pipe::EmptyOptional(), readableData, offset);
853 arm::pipe::EmptyOptional(),
855 LabelsAndEventClasses::WORKLOAD_GUID,
856 LabelsAndEventClasses::TYPE_GUID,
865 arm::pipe::EmptyOptional(),
868 LabelsAndEventClasses::BACKENDID_GUID,
874 arm::pipe::EmptyOptional(),
877 LabelsAndEventClasses::CHILD_GUID,
887 arm::pipe::EmptyOptional(),
"output", readableData, offset);
891 arm::pipe::EmptyOptional(),
894 LabelsAndEventClasses::NAME_GUID,
900 arm::pipe::EmptyOptional(),
902 LabelsAndEventClasses::LAYER_GUID,
903 LabelsAndEventClasses::TYPE_GUID,
909 arm::pipe::EmptyOptional(),
912 LabelsAndEventClasses::CHILD_GUID,
918 arm::pipe::EmptyOptional(),
921 LabelsAndEventClasses::CONNECTION_GUID,
925 bufferManager.MarkRead(readableBuffer);
928 std::vector<float> inputData(inputInfo.GetNumElements());
929 std::vector<float> outputData(outputInfo.GetNumElements());
931 TensorInfo inputTensorInfo = runtime.GetInputTensorInfo(netId, 0);
935 {0,
ConstTensor(inputTensorInfo, inputData.data())}
939 {0,
Tensor(runtime.GetOutputTensorInfo(netId, 0), outputData.data())}
943 runtime.EnqueueWorkload(netId, inputTensors, outputTensors);
946 auto inputReadableBuffer = bufferManager.GetReadableBuffer();
947 CHECK(inputReadableBuffer !=
nullptr);
950 auto outputReadableBuffer = bufferManager.GetReadableBuffer();
951 CHECK(outputReadableBuffer !=
nullptr);
954 auto inferenceReadableBuffer = bufferManager.GetReadableBuffer();
955 CHECK(inferenceReadableBuffer !=
nullptr);
958 size = inputReadableBuffer->GetSize();
961 readableData = inputReadableBuffer->GetReadableData();
962 CHECK(readableData !=
nullptr);
972 arm::pipe::EmptyOptional(), readableData, offset);
976 arm::pipe::EmptyOptional(),
978 LabelsAndEventClasses::WORKLOAD_GUID,
979 LabelsAndEventClasses::TYPE_GUID,
988 arm::pipe::EmptyOptional(),
991 LabelsAndEventClasses::BACKENDID_GUID,
997 arm::pipe::EmptyOptional(),
1000 LabelsAndEventClasses::CHILD_GUID,
1004 bufferManager.MarkRead(inputReadableBuffer);
1007 size = outputReadableBuffer->GetSize();
1010 readableData = outputReadableBuffer->GetReadableData();
1011 CHECK(readableData !=
nullptr);
1021 arm::pipe::EmptyOptional(), readableData, offset);
1025 arm::pipe::EmptyOptional(),
1027 LabelsAndEventClasses::WORKLOAD_GUID,
1028 LabelsAndEventClasses::TYPE_GUID,
1037 arm::pipe::EmptyOptional(),
1040 LabelsAndEventClasses::BACKENDID_GUID,
1046 arm::pipe::EmptyOptional(),
1049 LabelsAndEventClasses::CHILD_GUID,
1053 bufferManager.MarkRead(outputReadableBuffer);
1056 size = inferenceReadableBuffer->GetSize();
1058 CHECK(size == 1748 + 10 * ThreadIdSize);
1060 readableData = inferenceReadableBuffer->GetReadableData();
1061 CHECK(readableData !=
nullptr);
1071 arm::pipe::EmptyOptional(), readableData, offset);
1075 arm::pipe::EmptyOptional(),
1077 LabelsAndEventClasses::INFERENCE_GUID,
1078 LabelsAndEventClasses::TYPE_GUID,
1084 arm::pipe::EmptyOptional(),
1087 LabelsAndEventClasses::EXECUTION_OF_GUID,
1094 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1098 arm::pipe::EmptyOptional(),
1101 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1109 arm::pipe::EmptyOptional(), readableData, offset);
1113 arm::pipe::EmptyOptional(),
1114 inputWorkloadExecutionGuid,
1115 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1116 LabelsAndEventClasses::TYPE_GUID,
1122 arm::pipe::EmptyOptional(),
1124 inputWorkloadExecutionGuid,
1125 LabelsAndEventClasses::CHILD_GUID,
1131 arm::pipe::EmptyOptional(),
1133 inputWorkloadExecutionGuid,
1134 LabelsAndEventClasses::EXECUTION_OF_GUID,
1141 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1145 arm::pipe::EmptyOptional(),
1146 inputWorkloadExecutionGuid,
1147 inputWorkloadExecutionSOLEventId,
1148 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1155 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1159 arm::pipe::EmptyOptional(),
1160 inputWorkloadExecutionGuid,
1161 inputWorkloadExecutionEOLEventId,
1162 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1169 arm::pipe::EmptyOptional(), readableData, offset);
1173 arm::pipe::EmptyOptional(),
1174 weightsWorkloadExecutionGuid,
1175 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1176 LabelsAndEventClasses::TYPE_GUID,
1182 arm::pipe::EmptyOptional(),
1184 weightsWorkloadExecutionGuid,
1185 LabelsAndEventClasses::CHILD_GUID,
1191 arm::pipe::EmptyOptional(),
1192 weightsWorkloadGuid,
1193 weightsWorkloadExecutionGuid,
1194 LabelsAndEventClasses::EXECUTION_OF_GUID,
1201 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1205 arm::pipe::EmptyOptional(),
1206 weightsWorkloadExecutionGuid,
1207 weightsWorkloadExecutionSOLEventGuid,
1208 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1215 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1219 arm::pipe::EmptyOptional(),
1220 weightsWorkloadExecutionGuid,
1221 weightsWorkloadExecutionEOLEventGuid,
1222 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1229 arm::pipe::EmptyOptional(), readableData, offset);
1233 arm::pipe::EmptyOptional(),
1234 biasWorkloadExecutionGuid,
1235 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1236 LabelsAndEventClasses::TYPE_GUID,
1242 arm::pipe::EmptyOptional(),
1244 biasWorkloadExecutionGuid,
1245 LabelsAndEventClasses::CHILD_GUID,
1251 arm::pipe::EmptyOptional(),
1253 biasWorkloadExecutionGuid,
1254 LabelsAndEventClasses::EXECUTION_OF_GUID,
1261 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1265 arm::pipe::EmptyOptional(),
1266 biasWorkloadExecutionGuid,
1267 biasWorkloadExecutionSOLEventGuid,
1268 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1275 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1279 arm::pipe::EmptyOptional(),
1280 biasWorkloadExecutionGuid,
1281 biasWorkloadExecutionEOLEventGuid,
1282 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1289 arm::pipe::EmptyOptional(), readableData, offset);
1293 arm::pipe::EmptyOptional(),
1294 conv2DWorkloadExecutionGuid,
1295 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1296 LabelsAndEventClasses::TYPE_GUID,
1302 arm::pipe::EmptyOptional(),
1304 conv2DWorkloadExecutionGuid,
1305 LabelsAndEventClasses::CHILD_GUID,
1311 arm::pipe::EmptyOptional(),
1313 conv2DWorkloadExecutionGuid,
1314 LabelsAndEventClasses::EXECUTION_OF_GUID,
1321 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1325 arm::pipe::EmptyOptional(),
1326 conv2DWorkloadExecutionGuid,
1327 conv2DWorkloadExecutionSOLEventGuid,
1328 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1335 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1339 arm::pipe::EmptyOptional(),
1340 conv2DWorkloadExecutionGuid,
1341 conv2DWorkloadExecutionEOLEventGuid,
1342 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1349 arm::pipe::EmptyOptional(), readableData, offset);
1353 arm::pipe::EmptyOptional(),
1354 absWorkloadExecutionGuid,
1355 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1356 LabelsAndEventClasses::TYPE_GUID,
1362 arm::pipe::EmptyOptional(),
1364 absWorkloadExecutionGuid,
1365 LabelsAndEventClasses::CHILD_GUID,
1371 arm::pipe::EmptyOptional(),
1373 absWorkloadExecutionGuid,
1374 LabelsAndEventClasses::EXECUTION_OF_GUID,
1381 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1385 arm::pipe::EmptyOptional(),
1386 absWorkloadExecutionGuid,
1387 absWorkloadExecutionSOLEventGuid,
1388 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1395 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1399 arm::pipe::EmptyOptional(),
1400 absWorkloadExecutionGuid,
1401 absWorkloadExecutionEOLEventGuid,
1402 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1409 arm::pipe::EmptyOptional(), readableData, offset);
1413 arm::pipe::EmptyOptional(),
1414 outputWorkloadExecutionGuid,
1415 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1416 LabelsAndEventClasses::TYPE_GUID,
1422 arm::pipe::EmptyOptional(),
1424 outputWorkloadExecutionGuid,
1425 LabelsAndEventClasses::CHILD_GUID,
1431 arm::pipe::EmptyOptional(),
1433 outputWorkloadExecutionGuid,
1434 LabelsAndEventClasses::EXECUTION_OF_GUID,
1441 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1445 arm::pipe::EmptyOptional(),
1446 outputWorkloadExecutionGuid,
1447 outputWorkloadExecutionSOLEventGuid,
1448 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1455 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1459 arm::pipe::EmptyOptional(),
1460 outputWorkloadExecutionGuid,
1461 outputWorkloadExecutionEOLEventGuid,
1462 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1469 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
1473 arm::pipe::EmptyOptional(),
1475 inferenceEOLEventGuid,
1476 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1480 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.
#define ARMNN_NO_DEPRECATE_WARN_BEGIN
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.
#define ARMNN_NO_DEPRECATE_WARN_END
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.