20 #include <valgrind/memcheck.h> 23 #include <boost/test/unit_test.hpp> 32 runtime->m_LoadedNetworks.reserve(1);
48 mockNetwork1->AddInputLayer(0,
"test layer");
50 runtime->LoadNetwork(networkIdentifier1,
Optimize(*mockNetwork1, backends, runtime->GetDeviceSpec()));
55 mockNetwork2->AddInputLayer(0,
"test layer");
56 runtime->LoadNetwork(networkIdentifier2,
Optimize(*mockNetwork2, backends, runtime->GetDeviceSpec()));
69 #ifdef ARMNN_LEAK_CHECKING_ENABLED 71 struct DisableGlobalLeakChecking
73 DisableGlobalLeakChecking()
89 std::unique_ptr<char[]> dummyAllocation(
new char[1000]);
91 "A leak of 1000 bytes is expected here. " 92 "Please make sure environment variable: HEAPCHECK=draconian is set!");
102 #endif // ARMNN_LEAK_CHECKING_ENABLED 114 unsigned long leakedBefore = 0;
115 unsigned long leakedAfter = 0;
120 unsigned long reachableBefore = 0;
121 unsigned long reachableAfter = 0;
124 unsigned long dubious = 0;
125 unsigned long suppressed = 0;
139 mockNetwork1->AddInputLayer(0,
"test layer");
146 VALGRIND_DO_QUICK_LEAK_CHECK;
147 VALGRIND_COUNT_LEAKS(leakedBefore, dubious, reachableBefore, suppressed);
153 VALGRIND_DO_ADDED_LEAK_CHECK;
154 VALGRIND_COUNT_LEAKS(leakedAfter, dubious, reachableAfter, suppressed);
158 BOOST_TEST(leakedBefore == leakedAfter);
159 BOOST_TEST(reachableBefore == reachableAfter);
166 #endif // WITH_VALGRIND 170 using namespace armnn;
199 BOOST_TEST(runtime->LoadNetwork(netId, std::move(optNet)) ==
Status::Success);
204 using namespace armnn;
234 BOOST_TEST(runtime->LoadNetwork(netId, std::move(optNet)) ==
Status::Success);
240 using namespace armnn;
264 std::vector<std::string> errMessages;
270 runtime->GetDeviceSpec(),
273 BOOST_FAIL(
"An exception should have been thrown");
279 BOOST_CHECK(errMessages.size() > 0);
284 using namespace armnn;
298 options1.
AddOption({
"Option3",
"some_value" });
301 backendOptions.push_back(options1);
310 BOOST_TEST(backendOptions[0].
GetBackendId().Get() ==
"FakeBackend1");
311 BOOST_TEST(backendOptions[0].GetOption(0).GetName() ==
"Option1");
312 BOOST_TEST(backendOptions[0].GetOption(0).GetValue().IsFloat() ==
true);
313 BOOST_TEST(backendOptions[0].GetOption(0).GetValue().AsFloat() == 1.3f);
315 BOOST_TEST(backendOptions[0].GetOption(1).GetName() ==
"Option2");
316 BOOST_TEST(backendOptions[0].GetOption(1).GetValue().IsBool() ==
true);
317 BOOST_TEST(backendOptions[0].GetOption(1).GetValue().AsBool() ==
true);
319 BOOST_TEST(backendOptions[0].GetOption(2).GetName() ==
"Option3");
320 BOOST_TEST(backendOptions[0].GetOption(2).GetValue().IsString() ==
true);
321 BOOST_TEST(backendOptions[0].GetOption(2).GetValue().AsString() ==
"some_value");
324 BOOST_TEST(backendOptions[1].
GetBackendId().Get() ==
"FakeBackend1");
325 BOOST_TEST(backendOptions[1].GetOption(0).GetName() ==
"Option4");
326 BOOST_TEST(backendOptions[1].GetOption(0).GetValue().IsInt() ==
true);
327 BOOST_TEST(backendOptions[1].GetOption(0).GetValue().AsInt() == 42);
332 using namespace armnn;
368 BOOST_TEST(!readableBuffer);
373 using namespace armnn;
395 IConnectableLayer* normalize = net->AddNormalizationLayer(descriptor,
"normalization");
419 BOOST_CHECK(readableBuffer !=
nullptr);
421 unsigned int size = readableBuffer->GetSize();
423 const unsigned char* readableData = readableBuffer->GetReadableData();
424 BOOST_CHECK(readableData !=
nullptr);
426 unsigned int offset = 0;
430 BOOST_TEST_MESSAGE(
"HEADER OK");
435 BOOST_TEST_MESSAGE(
"NETWORK ENTITY OK");
445 BOOST_TEST_MESSAGE(
"NETWORK TYPE RELATIONSHIP OK");
453 BOOST_TEST_MESSAGE(
"NETWORK START OF LIFE EVENT OK");
463 BOOST_TEST_MESSAGE(
"NETWORK START OF LIFE RELATIONSHIP OK");
467 std::stringstream ss;
469 std::string processIdLabel = ss.str();
471 BOOST_TEST_MESSAGE(
"PROCESS ID LABEL OK");
481 BOOST_TEST_MESSAGE(
"NETWORK PROCESS ID RELATIONSHIP OK");
486 BOOST_TEST_MESSAGE(
"INPUT ENTITY OK");
490 BOOST_TEST_MESSAGE(
"INPUT NAME LABEL OK");
500 BOOST_TEST_MESSAGE(
"INPUT NAME RELATIONSHIP OK");
510 BOOST_TEST_MESSAGE(
"INPUT TYPE RELATIONSHIP OK");
520 BOOST_TEST_MESSAGE(
"NETWORK - INPUT CHILD RELATIONSHIP OK");
525 BOOST_TEST_MESSAGE(
"NORMALIZATION LAYER ENTITY OK");
530 BOOST_TEST_MESSAGE(
"NORMALIZATION LAYER NAME LABEL OK");
536 normalizationLayerNameGuid,
540 BOOST_TEST_MESSAGE(
"NORMALIZATION LAYER NAME RELATIONSHIP OK");
550 BOOST_TEST_MESSAGE(
"NORMALIZATION LAYER TYPE RELATIONSHIP OK");
560 BOOST_TEST_MESSAGE(
"NETWORK - NORMALIZATION LAYER CHILD RELATIONSHIP OK");
570 BOOST_TEST_MESSAGE(
"INPUT - NORMALIZATION LAYER CONNECTION OK");
576 BOOST_TEST_MESSAGE(
"NORMALIZATION WORKLOAD ENTITY OK");
581 normalizationWorkloadGuid,
583 LabelsAndEventClasses::TYPE_GUID,
586 BOOST_TEST_MESSAGE(
"NORMALIZATION WORKLOAD TYPE RELATIONSHIP OK");
591 BOOST_TEST_MESSAGE(
"CPUREF LABEL OK");
596 normalizationWorkloadGuid,
601 BOOST_TEST_MESSAGE(
"NORMALIZATION WORKLOAD BACKEND ID RELATIONSHIP OK");
607 normalizationWorkloadGuid,
611 BOOST_TEST_MESSAGE(
"NORMALIZATION LAYER - WORKLOAD CHILD RELATIONSHIP OK");
616 BOOST_TEST_MESSAGE(
"OUTPUT LAYER ENTITY OK");
621 BOOST_TEST_MESSAGE(
"OUTPUT LAYER NAME LABEL OK");
631 BOOST_TEST_MESSAGE(
"OUTPUT LAYER NAME RELATIONSHIP OK");
641 BOOST_TEST_MESSAGE(
"OUTPUT LAYER TYPE RELATIONSHIP OK");
651 BOOST_TEST_MESSAGE(
"NETWORK - OUTPUT LAYER CHILD RELATIONSHIP OK");
661 BOOST_TEST_MESSAGE(
"NORMALIZE LAYER - OUTPUT LAYER CONNECTION OK");
663 bufferManager.MarkRead(readableBuffer);
666 std::vector<float> inputData(16);
667 std::vector<float> outputData(16);
682 auto inputReadableBuffer = bufferManager.GetReadableBuffer();
683 BOOST_CHECK(inputReadableBuffer !=
nullptr);
686 auto outputReadableBuffer = bufferManager.GetReadableBuffer();
687 BOOST_CHECK(outputReadableBuffer !=
nullptr);
690 auto inferenceReadableBuffer = bufferManager.GetReadableBuffer();
691 BOOST_CHECK(inferenceReadableBuffer !=
nullptr);
694 size = inputReadableBuffer->GetSize();
695 BOOST_CHECK(size == 164);
697 readableData = inputReadableBuffer->GetReadableData();
698 BOOST_CHECK(readableData !=
nullptr);
704 BOOST_TEST_MESSAGE(
"INPUT WORKLOAD HEADER OK");
709 BOOST_TEST_MESSAGE(
"INPUT WORKLOAD ENTITY OK");
716 LabelsAndEventClasses::TYPE_GUID,
719 BOOST_TEST_MESSAGE(
"INPUT WORKLOAD TYPE RELATIONSHIP OK");
724 BOOST_TEST_MESSAGE(
"CPUREF LABEL OK (INPUT WORKLOAD)");
734 BOOST_TEST_MESSAGE(
"INPUT WORKLOAD BACKEND ID RELATIONSHIP OK");
744 BOOST_TEST_MESSAGE(
"INPUT LAYER - INPUT WORKLOAD CHILD RELATIONSHIP OK");
746 bufferManager.MarkRead(inputReadableBuffer);
749 size = outputReadableBuffer->GetSize();
750 BOOST_CHECK(size == 164);
752 readableData = outputReadableBuffer->GetReadableData();
753 BOOST_CHECK(readableData !=
nullptr);
759 BOOST_TEST_MESSAGE(
"OUTPUT WORKLOAD HEADER OK");
764 BOOST_TEST_MESSAGE(
"OUTPUT WORKLOAD ENTITY OK");
771 LabelsAndEventClasses::TYPE_GUID,
774 BOOST_TEST_MESSAGE(
"OUTPUT WORKLOAD TYPE RELATIONSHIP OK");
778 BOOST_TEST_MESSAGE(
"OUTPUT WORKLOAD CPU REF LABEL OK");
788 BOOST_TEST_MESSAGE(
"OUTPUT WORKLOAD BACKEND ID RELATIONSHIP OK");
798 BOOST_TEST_MESSAGE(
"OUTPUT LAYER - OUTPUT WORKLOAD CHILD RELATIONSHIP OK");
800 bufferManager.MarkRead(outputReadableBuffer);
803 size = inferenceReadableBuffer->GetSize();
806 readableData = inferenceReadableBuffer->GetReadableData();
807 BOOST_CHECK(readableData !=
nullptr);
813 BOOST_TEST_MESSAGE(
"INFERENCE HEADER OK");
818 BOOST_TEST_MESSAGE(
"INFERENCE ENTITY OK");
825 LabelsAndEventClasses::TYPE_GUID,
828 BOOST_TEST_MESSAGE(
"INFERENCE TYPE RELATIONSHIP OK");
838 BOOST_TEST_MESSAGE(
"NETWORK - INFERENCE EXECUTION_OF RELATIONSHIP OK");
844 BOOST_TEST_MESSAGE(
"INFERENCE START OF LIFE EVENT OK");
854 BOOST_TEST_MESSAGE(
"INFERENCE START OF LIFE RELATIONSHIP OK");
861 BOOST_TEST_MESSAGE(
"INPUT WORKLOAD EXECUTION ENTITY OK");
866 inputWorkloadExecutionGuid,
868 LabelsAndEventClasses::TYPE_GUID,
871 BOOST_TEST_MESSAGE(
"INPUT WORKLOAD EXECUTION TYPE RELATIONSHIP OK");
877 inputWorkloadExecutionGuid,
878 LabelsAndEventClasses::CHILD_GUID,
881 BOOST_TEST_MESSAGE(
"INFERENCE - INPUT WORKLOAD EXECUTION CHILD RELATIONSHIP OK");
887 inputWorkloadExecutionGuid,
891 BOOST_TEST_MESSAGE(
"INPUT WORKLOAD - INPUT WORKLOAD EXECUTION RELATIONSHIP OK");
901 inputWorkloadExecutionGuid,
902 inputWorkloadExecutionSOLEventId,
906 BOOST_TEST_MESSAGE(
"INPUT WORKLOAD EXECUTION - START OF LIFE EVENT RELATIONSHIP OK");
916 inputWorkloadExecutionGuid,
917 inputWorkloadExecutionEOLEventId,
921 BOOST_TEST_MESSAGE(
"INPUT WORKLOAD EXECUTION - END OF LIFE EVENT RELATIONSHIP OK");
927 BOOST_TEST_MESSAGE(
"NORMALIZE WORKLOAD EXECUTION ENTITY OK");
932 normalizeWorkloadExecutionGuid,
934 LabelsAndEventClasses::TYPE_GUID,
937 BOOST_TEST_MESSAGE(
"NORMALIZE WORKLOAD EXECUTION TYPE RELATIONSHIP OK");
943 normalizeWorkloadExecutionGuid,
944 LabelsAndEventClasses::CHILD_GUID,
947 BOOST_TEST_MESSAGE(
"INFERENCE - NORMALIZE WORKLOAD EXECUTION CHILD RELATIONSHIP OK");
952 normalizationWorkloadGuid,
953 normalizeWorkloadExecutionGuid,
957 BOOST_TEST_MESSAGE(
"NORMALIZATION WORKLOAD - NORMALIZATION WORKLOAD EXECUTION RELATIONSHIP OK");
963 BOOST_TEST_MESSAGE(
"NORMALIZATION WORKLOAD EXECUTION START OF LIFE EVENT OK");
968 normalizeWorkloadExecutionGuid,
969 normalizationWorkloadExecutionSOLEventGuid,
973 BOOST_TEST_MESSAGE(
"NORMALIZATION WORKLOAD EXECUTION START OF LIFE RELATIONSHIP OK");
979 BOOST_TEST_MESSAGE(
"NORMALIZATION WORKLOAD EXECUTION END OF LIFE EVENT OK");
984 normalizeWorkloadExecutionGuid,
985 normalizationWorkloadExecutionEOLEventGuid,
989 BOOST_TEST_MESSAGE(
"NORMALIZATION WORKLOAD EXECUTION END OF LIFE RELATIONSHIP OK");
995 BOOST_TEST_MESSAGE(
"OUTPUT WORKLOAD EXECUTION ENTITY OK");
1000 outputWorkloadExecutionGuid,
1002 LabelsAndEventClasses::TYPE_GUID,
1005 BOOST_TEST_MESSAGE(
"OUTPUT WORKLOAD EXECUTION TYPE RELATIONSHIP OK");
1011 outputWorkloadExecutionGuid,
1012 LabelsAndEventClasses::CHILD_GUID,
1015 BOOST_TEST_MESSAGE(
"INFERENCE - OUTPUT WORKLOAD EXECUTION CHILD RELATIONSHIP OK");
1021 outputWorkloadExecutionGuid,
1025 BOOST_TEST_MESSAGE(
"OUTPUT WORKLOAD - OUTPUT WORKLOAD EXECUTION EXECUTION_OF RELATIONSHIP OK");
1031 BOOST_TEST_MESSAGE(
"OUTPUT WORKLOAD EXECUTION START OF LIFE EVENT OK");
1036 outputWorkloadExecutionGuid,
1037 outputWorkloadExecutionSOLEventGuid,
1041 BOOST_TEST_MESSAGE(
"OUTPUT WORKLOAD EXECUTION - START OF LIFE EVENT RELATIONSHIP OK");
1047 BOOST_TEST_MESSAGE(
"OUTPUT WORKLOAD EXECUTION END OF LIFE EVENT OK");
1052 outputWorkloadExecutionGuid,
1053 outputWorkloadExecutionEOLEventGuid,
1057 BOOST_TEST_MESSAGE(
"OUTPUT WORKLOAD EXECUTION - END OF LIFE EVENT RELATIONSHIP OK");
1063 BOOST_TEST_MESSAGE(
"INFERENCE END OF LIFE EVENT OK");
1069 inferenceEOLEventGuid,
1073 BOOST_TEST_MESSAGE(
"INFERENCE - END OF LIFE EVENT RELATIONSHIP OK");
1075 bufferManager.MarkRead(inferenceReadableBuffer);
#define ARMNN_SCOPED_LEAK_CHECKER(TAG)
BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)
static ARMNN_DLLEXPORT ProfilingStaticGuid INFERENCE_GUID
profiling::ProfilingService & GetProfilingService(armnn::RuntimeImpl *runtime)
#define ARMNN_LOCAL_LEAK_CHECKING_ONLY()
TensorInfo GetInputTensorInfo(NetworkId networkId, LayerBindingId layerId) const
static IRuntimePtr Create(const CreationOptions &options)
Interface for a layer that is connectable to other layers via InputSlots and OutputSlots.
ProfilingGuid VerifyTimelineEntityBinaryPacketData(Optional< ProfilingGuid > guid, const unsigned char *readableData, unsigned int &offset)
void VerifyPostOptimisationStructureTestImpl(armnn::BackendId backendId)
CPU Execution: Reference C++ kernels.
void ForceTransitionToState(ProfilingState newState)
Status UnloadNetwork(NetworkId networkId)
Unloads a network from the Runtime.
std::unique_ptr< IRuntime, void(*)(IRuntime *runtime)> IRuntimePtr
Status LoadNetwork(NetworkId &networkIdOut, IOptimizedNetworkPtr network)
Loads a complete network into the Runtime.
std::vector< std::pair< LayerBindingId, class ConstTensor > > InputTensors
TensorInfo GetOutputTensorInfo(NetworkId networkId, LayerBindingId layerId) const
Copyright (c) 2021 ARM Limited and Contributors.
Status EnqueueWorkload(NetworkId networkId, const InputTensors &inputTensors, const OutputTensors &outputTensors)
void IgnoreUnused(Ts &&...)
static ARMNN_DLLEXPORT ProfilingStaticGuid CONNECTION_GUID
static ARMNN_DLLEXPORT ProfilingStaticGuid WORKLOAD_GUID
static ARMNN_DLLEXPORT ProfilingStaticGuid WORKLOAD_EXECUTION_GUID
static ARMNN_DLLEXPORT ProfilingStaticGuid ARMNN_PROFILING_EOL_EVENT_CLASS
virtual void SetTensorInfo(const TensorInfo &tensorInfo)=0
#define ARMNN_LEAK_CHECKER_IS_ACTIVE()
static ARMNN_DLLEXPORT ProfilingStaticGuid NAME_GUID
static ARMNN_DLLEXPORT ProfilingStaticGuid ARMNN_PROFILING_SOL_EVENT_CLASS
A tensor defined by a TensorInfo (shape and data type) and a mutable backing store.
#define ARMNN_OBJECTS_LEAKED_IN_SCOPE()
std::vector< BackendOptions > m_BackendOptions
Pass backend specific options.
const char * GetBackendId()
static ARMNN_DLLEXPORT ProfilingStaticGuid LAYER_GUID
void RuntimeLoadedNetworksReserve(armnn::RuntimeImpl *runtime)
void AddOption(BackendOption &&option)
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.
void VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType relationshipType, Optional< ProfilingGuid > relationshipGuid, Optional< ProfilingGuid > headGuid, Optional< ProfilingGuid > tailGuid, Optional< ProfilingGuid > attributeGuid, const unsigned char *readableData, unsigned int &offset)
const IDeviceSpec & GetDeviceSpec() const
virtual LayerGuid GetGuid() const =0
Returns the unique id of the layer.
static ARMNN_DLLEXPORT ProfilingStaticGuid EXECUTION_OF_GUID
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
void ResetExternalProfilingOptions(const ExternalProfilingOptions &options, bool resetProfilingService=false)
BOOST_AUTO_TEST_CASE(CheckConvolution2dLayer)
IPacketBufferPtr GetReadableBuffer() override
constexpr unsigned int ThreadIdSize
void VerifyTimelineHeaderBinary(const unsigned char *readableData, unsigned int &offset, uint32_t packetDataLength)
static ARMNN_DLLEXPORT ProfilingStaticGuid NETWORK_GUID
Struct for the users to pass backend specific options.
BOOST_AUTO_TEST_SUITE_END()
EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...
static ARMNN_DLLEXPORT ProfilingStaticGuid TYPE_GUID
CPU Execution: NEON: ArmCompute.
#define ARMNN_NO_LEAKS_IN_SCOPE()
virtual const IInputSlot & GetInputSlot(unsigned int index) const =0
Get a const input slot handle by slot index.
BufferManager & GetProfilingBufferManager()
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
ProfilingGuid VerifyTimelineEventBinaryPacket(Optional< uint64_t > timestamp, Optional< int > threadId, Optional< ProfilingGuid > eventGuid, const unsigned char *readableData, unsigned int &offset)
virtual int Connect(IInputSlot &destination)=0
ProfilingGuid VerifyTimelineLabelBinaryPacketData(Optional< ProfilingGuid > guid, const std::string &label, const unsigned char *readableData, unsigned int &offset)
static ARMNN_DLLEXPORT ProfilingStaticGuid PROCESS_ID_GUID
A NormalizationDescriptor for the NormalizationLayer.
ExternalProfilingOptions m_ProfilingOptions
static INetworkPtr Create(NetworkOptions networkOptions={})
A SoftmaxDescriptor for the SoftmaxLayer.
#define ARMNN_BYTES_LEAKED_IN_SCOPE()
static ARMNN_DLLEXPORT ProfilingStaticGuid BACKENDID_GUID
static ARMNN_DLLEXPORT ProfilingStaticGuid CHILD_GUID
BOOST_GLOBAL_FIXTURE(ConfigureLoggingFixture)