13 #include <common/include/LabelsAndEventClasses.hpp> 20 #include <valgrind/memcheck.h> 23 #include <doctest/doctest.h> 32 runtime->m_LoadedNetworks.reserve(1);
39 TEST_CASE(
"RuntimeUnloadNetwork")
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()
79 TEST_CASE_FIXTURE(DisableGlobalLeakChecking,
"RuntimeHeapMemoryUsageSanityChecks")
87 std::unique_ptr<char[]> dummyAllocation(
new char[1000]);
100 #endif // ARMNN_LEAK_CHECKING_ENABLED 106 TEST_CASE(
"RuntimeMemoryLeak")
112 unsigned long leakedBefore = 0;
113 unsigned long leakedAfter = 0;
118 unsigned long reachableBefore = 0;
119 unsigned long reachableAfter = 0;
122 unsigned long dubious = 0;
123 unsigned long suppressed = 0;
137 mockNetwork1->AddInputLayer(0,
"test layer");
144 VALGRIND_DO_QUICK_LEAK_CHECK;
145 VALGRIND_COUNT_LEAKS(leakedBefore, dubious, reachableBefore, suppressed);
151 VALGRIND_DO_ADDED_LEAK_CHECK;
152 VALGRIND_COUNT_LEAKS(leakedAfter, dubious, reachableAfter, suppressed);
156 CHECK(leakedBefore == leakedAfter);
157 CHECK(reachableBefore == reachableAfter);
164 #endif // WITH_VALGRIND 166 TEST_CASE(
"RuntimeCpuRef")
168 using namespace armnn;
197 CHECK(runtime->LoadNetwork(netId, std::move(optNet)) ==
Status::Success);
200 TEST_CASE(
"RuntimeFallbackToCpuRef")
202 using namespace armnn;
232 CHECK(runtime->LoadNetwork(netId, std::move(optNet)) ==
Status::Success);
235 TEST_CASE(
"IVGCVSW_1929_QuantizedSoftmaxIssue")
238 using namespace armnn;
262 std::vector<std::string> errMessages;
268 runtime->GetDeviceSpec(),
271 FAIL(
"An exception should have been thrown");
277 CHECK(errMessages.size() > 0);
280 TEST_CASE(
"RuntimeBackendOptions")
282 using namespace armnn;
296 options1.
AddOption({
"Option3",
"some_value" });
299 backendOptions.push_back(options1);
308 CHECK(backendOptions[0].
GetBackendId().Get() ==
"FakeBackend1");
309 CHECK(backendOptions[0].GetOption(0).GetName() ==
"Option1");
310 CHECK(backendOptions[0].GetOption(0).GetValue().IsFloat() ==
true);
311 CHECK(backendOptions[0].GetOption(0).GetValue().AsFloat() == 1.3f);
313 CHECK(backendOptions[0].GetOption(1).GetName() ==
"Option2");
314 CHECK(backendOptions[0].GetOption(1).GetValue().IsBool() ==
true);
315 CHECK(backendOptions[0].GetOption(1).GetValue().AsBool() ==
true);
317 CHECK(backendOptions[0].GetOption(2).GetName() ==
"Option3");
318 CHECK(backendOptions[0].GetOption(2).GetValue().IsString() ==
true);
319 CHECK(backendOptions[0].GetOption(2).GetValue().AsString() ==
"some_value");
322 CHECK(backendOptions[1].
GetBackendId().Get() ==
"FakeBackend1");
323 CHECK(backendOptions[1].GetOption(0).GetName() ==
"Option4");
324 CHECK(backendOptions[1].GetOption(0).GetValue().IsInt() ==
true);
325 CHECK(backendOptions[1].GetOption(0).GetValue().AsInt() == 42);
328 TEST_CASE(
"ProfilingDisable")
330 using namespace armnn;
366 CHECK(!readableBuffer);
369 TEST_CASE(
"ProfilingEnableCpuRef")
371 using namespace armnn;
393 IConnectableLayer* normalize = net->AddNormalizationLayer(descriptor,
"normalization");
407 ProfilingGuid optNetGuid = optNet->GetGuid();
417 CHECK(readableBuffer !=
nullptr);
419 unsigned int size = readableBuffer->GetSize();
421 const unsigned char* readableData = readableBuffer->GetReadableData();
422 CHECK(readableData !=
nullptr);
424 unsigned int offset = 0;
437 LabelsAndEventClasses::NETWORK_GUID,
438 LabelsAndEventClasses::TYPE_GUID,
454 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
460 std::stringstream ss;
462 std::string processIdLabel = ss.str();
470 LabelsAndEventClasses::PROCESS_ID_GUID,
486 LabelsAndEventClasses::NAME_GUID,
494 LabelsAndEventClasses::LAYER_GUID,
495 LabelsAndEventClasses::TYPE_GUID,
504 LabelsAndEventClasses::CHILD_GUID,
520 normalizationLayerNameGuid,
521 LabelsAndEventClasses::NAME_GUID,
529 LabelsAndEventClasses::LAYER_GUID,
530 LabelsAndEventClasses::TYPE_GUID,
539 LabelsAndEventClasses::CHILD_GUID,
548 LabelsAndEventClasses::CONNECTION_GUID,
560 normalizationWorkloadGuid,
561 LabelsAndEventClasses::WORKLOAD_GUID,
562 LabelsAndEventClasses::TYPE_GUID,
573 normalizationWorkloadGuid,
575 LabelsAndEventClasses::BACKENDID_GUID,
583 normalizationWorkloadGuid,
584 LabelsAndEventClasses::CHILD_GUID,
601 LabelsAndEventClasses::NAME_GUID,
609 LabelsAndEventClasses::LAYER_GUID,
610 LabelsAndEventClasses::TYPE_GUID,
619 LabelsAndEventClasses::CHILD_GUID,
628 LabelsAndEventClasses::CONNECTION_GUID,
632 bufferManager.MarkRead(readableBuffer);
635 std::vector<float> inputData(16);
636 std::vector<float> outputData(16);
651 auto inputReadableBuffer = bufferManager.GetReadableBuffer();
652 CHECK(inputReadableBuffer !=
nullptr);
655 auto outputReadableBuffer = bufferManager.GetReadableBuffer();
656 CHECK(outputReadableBuffer !=
nullptr);
659 auto inferenceReadableBuffer = bufferManager.GetReadableBuffer();
660 CHECK(inferenceReadableBuffer !=
nullptr);
663 size = inputReadableBuffer->GetSize();
666 readableData = inputReadableBuffer->GetReadableData();
667 CHECK(readableData !=
nullptr);
682 LabelsAndEventClasses::WORKLOAD_GUID,
683 LabelsAndEventClasses::TYPE_GUID,
696 LabelsAndEventClasses::BACKENDID_GUID,
705 LabelsAndEventClasses::CHILD_GUID,
709 bufferManager.MarkRead(inputReadableBuffer);
712 size = outputReadableBuffer->GetSize();
715 readableData = outputReadableBuffer->GetReadableData();
716 CHECK(readableData !=
nullptr);
731 LabelsAndEventClasses::WORKLOAD_GUID,
732 LabelsAndEventClasses::TYPE_GUID,
744 LabelsAndEventClasses::BACKENDID_GUID,
753 LabelsAndEventClasses::CHILD_GUID,
757 bufferManager.MarkRead(outputReadableBuffer);
760 size = inferenceReadableBuffer->GetSize();
763 readableData = inferenceReadableBuffer->GetReadableData();
764 CHECK(readableData !=
nullptr);
779 LabelsAndEventClasses::INFERENCE_GUID,
780 LabelsAndEventClasses::TYPE_GUID,
789 LabelsAndEventClasses::EXECUTION_OF_GUID,
803 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
816 inputWorkloadExecutionGuid,
817 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
818 LabelsAndEventClasses::TYPE_GUID,
826 inputWorkloadExecutionGuid,
827 LabelsAndEventClasses::CHILD_GUID,
835 inputWorkloadExecutionGuid,
836 LabelsAndEventClasses::EXECUTION_OF_GUID,
848 inputWorkloadExecutionGuid,
849 inputWorkloadExecutionSOLEventId,
850 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
862 inputWorkloadExecutionGuid,
863 inputWorkloadExecutionEOLEventId,
864 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
876 normalizeWorkloadExecutionGuid,
877 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
878 LabelsAndEventClasses::TYPE_GUID,
886 normalizeWorkloadExecutionGuid,
887 LabelsAndEventClasses::CHILD_GUID,
894 normalizationWorkloadGuid,
895 normalizeWorkloadExecutionGuid,
896 LabelsAndEventClasses::EXECUTION_OF_GUID,
908 normalizeWorkloadExecutionGuid,
909 normalizationWorkloadExecutionSOLEventGuid,
910 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
922 normalizeWorkloadExecutionGuid,
923 normalizationWorkloadExecutionEOLEventGuid,
924 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
936 outputWorkloadExecutionGuid,
937 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
938 LabelsAndEventClasses::TYPE_GUID,
946 outputWorkloadExecutionGuid,
947 LabelsAndEventClasses::CHILD_GUID,
955 outputWorkloadExecutionGuid,
956 LabelsAndEventClasses::EXECUTION_OF_GUID,
968 outputWorkloadExecutionGuid,
969 outputWorkloadExecutionSOLEventGuid,
970 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
982 outputWorkloadExecutionGuid,
983 outputWorkloadExecutionEOLEventGuid,
984 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
997 inferenceEOLEventGuid,
998 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1002 bufferManager.MarkRead(inferenceReadableBuffer);
1005 TEST_CASE(
"ProfilingPostOptimisationStructureCpuRef")
TEST_SUITE("TestConstTensorLayerVisitor")
#define ARMNN_SCOPED_LEAK_CHECKER(TAG)
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 &&...)
virtual void SetTensorInfo(const TensorInfo &tensorInfo)=0
#define ARMNN_LEAK_CHECKER_IS_ACTIVE()
A tensor defined by a TensorInfo (shape and data type) and a mutable backing store.
#define ARMNN_OBJECTS_LEAKED_IN_SCOPE()
TEST_CASE_FIXTURE(ClContextControlFixture, "CopyBetweenNeonAndGpu")
std::vector< BackendOptions > m_BackendOptions
Pass backend specific options.
const char * GetBackendId()
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.
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)
IPacketBufferPtr GetReadableBuffer() override
constexpr unsigned int ThreadIdSize
void VerifyTimelineHeaderBinary(const unsigned char *readableData, unsigned int &offset, uint32_t packetDataLength)
Struct for the users to pass backend specific options.
EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...
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)
A NormalizationDescriptor for the NormalizationLayer.
ExternalProfilingOptions m_ProfilingOptions
static INetworkPtr Create(NetworkOptions networkOptions={})
A SoftmaxDescriptor for the SoftmaxLayer.
#define ARMNN_BYTES_LEAKED_IN_SCOPE()