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");
140 runtime.LoadNetwork(networkIdentifier1,
Optimize(*mockNetwork1, backends, runtime.GetDeviceSpec()));
141 runtime.UnloadNetwork(networkIdentifier1);
144 VALGRIND_DO_QUICK_LEAK_CHECK;
145 VALGRIND_COUNT_LEAKS(leakedBefore, dubious, reachableBefore, suppressed);
148 runtime.LoadNetwork(networkIdentifier1,
Optimize(*mockNetwork1, backends, runtime.GetDeviceSpec()));
149 runtime.UnloadNetwork(networkIdentifier1);
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;
261 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
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;
354 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
359 CHECK(runtime.LoadNetwork(netId, std::move(optNet)) == Status::Success);
366 CHECK(!readableBuffer);
369 TEST_CASE(
"ProfilingEnableCpuRef")
371 using namespace armnn;
383 profilingServiceHelper.ForceTransitionToState(ProfilingState::NotConnected);
384 profilingServiceHelper.ForceTransitionToState(ProfilingState::WaitingForAck);
385 profilingServiceHelper.ForceTransitionToState(ProfilingState::Active);
393 IConnectableLayer* normalize = net->AddNormalizationLayer(descriptor,
"normalization");
404 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
407 ProfilingGuid optNetGuid = optNet->GetGuid();
411 CHECK(runtime.LoadNetwork(netId, std::move(optNet)) == Status::Success);
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);
640 {0,
ConstTensor(runtime.GetInputTensorInfo(netId, 0), inputData.data())}
644 {0,
Tensor(runtime.GetOutputTensorInfo(netId, 0), outputData.data())}
648 runtime.EnqueueWorkload(netId, inputTensors, outputTensors);
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")
#define ARMNN_SCOPED_LEAK_CHECKER(TAG)
profiling::ProfilingService & GetProfilingService(armnn::RuntimeImpl *runtime)
#define ARMNN_LOCAL_LEAK_CHECKING_ONLY()
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.
std::unique_ptr< IRuntime, void(*)(IRuntime *runtime)> IRuntimePtr
std::vector< std::pair< LayerBindingId, class ConstTensor > > InputTensors
Copyright (c) 2021 ARM Limited and Contributors.
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)
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.
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()