11 #include <boost/test/unit_test.hpp> 17 using namespace armnn;
22 BOOST_TEST((backendObjPtr !=
nullptr));
25 if (backendIds.find(
"MockRef") == backendIds.end())
27 std::string message =
"Cannot load MockRef";
85 std::string ignoredErrorMessage;
88 runtime->LoadNetwork(netId, std::move(optNet), ignoredErrorMessage, networkProperties);
91 std::vector<float> inputData0
93 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f, 6.0f
95 std::vector<float> inputData1
97 0.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f
99 std::vector<float> inputData2
101 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f
104 std::vector<float> outputData(12);
106 std::vector<float> expectedOutput
108 11.0f, 9.0f, 7.0f, 5.0f, 3.0f, 1.0f, -1.0f, -3.0f, -5.0f, -7.0f, -9.0f, -11.0f
119 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
122 runtime->GetProfiler(netId)->EnableProfiling(
true);
125 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
129 std::stringstream ss;
131 std::string dump = ss.str();
134 std::size_t found = dump.find(
"ImportMemGeneric");
135 BOOST_TEST(found != std::string::npos);
138 found = dump.find(
"SyncMemGeneric");
139 BOOST_TEST(found != std::string::npos);
142 found = dump.find(
"CopyMemGeneric");
143 BOOST_TEST(found == std::string::npos);
149 BOOST_TEST(outputData == expectedOutput);
154 using namespace armnn;
159 BOOST_TEST((backendObjPtr !=
nullptr));
162 if (backendIds.find(
"MockRef") == backendIds.end())
164 std::string message =
"Cannot load MockRef";
212 BOOST_TEST(
CheckOrder(graph, layer0, layer1));
213 BOOST_TEST(
CheckOrder(graph, layer1, layer2));
214 BOOST_TEST(
CheckOrder(graph, layer2, layer3));
215 BOOST_TEST(
CheckOrder(graph, layer3, layer4));
216 BOOST_TEST(
CheckOrder(graph, layer4, layer5));
220 std::string ignoredErrorMessage;
223 runtime->LoadNetwork(netId, std::move(optNet), ignoredErrorMessage, networkProperties);
226 std::vector<float> inputData0
228 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f, 6.0f
230 std::vector<float> inputData1
232 0.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f
235 std::vector<float> outputData(2);
237 std::vector<float> expectedOutput
249 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
252 runtime->GetProfiler(netId)->EnableProfiling(
true);
255 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
259 std::stringstream ss;
261 std::string dump = ss.str();
264 std::size_t found = dump.find(
"CopyMemGeneric");
265 BOOST_TEST(found != std::string::npos);
268 found = dump.find(
"SyncMemGeneric");
269 BOOST_TEST(found != std::string::npos);
272 found = dump.find(
"ImportMemGeneric");
273 BOOST_TEST(found == std::string::npos);
279 BOOST_TEST(outputData == expectedOutput);
284 using namespace armnn;
289 BOOST_TEST((backendObjPtr !=
nullptr));
292 if (backendIds.find(
"MockRef") == backendIds.end())
294 std::string message =
"Cannot load MockRef";
343 BOOST_TEST(
CheckOrder(graph, layer0, layer1));
344 BOOST_TEST(
CheckOrder(graph, layer1, layer2));
345 BOOST_TEST(
CheckOrder(graph, layer2, layer3));
346 BOOST_TEST(
CheckOrder(graph, layer3, layer4));
347 BOOST_TEST(
CheckOrder(graph, layer4, layer5));
348 BOOST_TEST(
CheckOrder(graph, layer5, layer6));
352 std::string ignoredErrorMessage;
355 runtime->LoadNetwork(netId, std::move(optNet), ignoredErrorMessage, networkProperties);
358 std::vector<float> inputData0
360 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f, 0.0f
362 std::vector<float> inputData1
364 0.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f
366 std::vector<float> inputData2
368 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f
371 std::vector<float> outputData(12);
373 std::vector<float> expectedOutput
375 13.0f, 11.0f, 11.0f, 9.0f, 7.0f, 7.0f, 7.0f, 5.0f, 5.0f, 3.0f, 3.0f, -5.0f
386 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
389 runtime->GetProfiler(netId)->EnableProfiling(
true);
392 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
396 std::stringstream ss;
398 std::string dump = ss.str();
401 std::size_t found = dump.find(
"ImportMemGeneric");
402 BOOST_TEST(found != std::string::npos);
405 found = dump.find(
"SyncMemGeneric");
406 BOOST_TEST(found != std::string::npos);
409 found = dump.find(
"CopyMemGeneric");
410 BOOST_TEST(found == std::string::npos);
416 BOOST_TEST(outputData == expectedOutput);
421 using namespace armnn;
426 BOOST_TEST((backendObjPtr !=
nullptr));
429 if (backendIds.find(
"MockRef") == backendIds.end())
431 std::string message =
"Cannot load MockRef";
479 BOOST_TEST(
CheckOrder(graph, layer0, layer1));
480 BOOST_TEST(
CheckOrder(graph, layer1, layer2));
481 BOOST_TEST(
CheckOrder(graph, layer2, layer3));
482 BOOST_TEST(
CheckOrder(graph, layer3, layer4));
483 BOOST_TEST(
CheckOrder(graph, layer4, layer5));
487 std::string ignoredErrorMessage;
490 runtime->LoadNetwork(netId, std::move(optNet), ignoredErrorMessage, networkProperties);
493 std::vector<float> inputData0
495 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f
497 std::vector<float> inputData1
502 std::vector<float> outputData(2);
504 std::vector<float> expectedOutput
516 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
519 runtime->GetProfiler(netId)->EnableProfiling(
true);
522 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
526 std::stringstream ss;
528 std::string dump = ss.str();
531 std::size_t found = dump.find(
"CopyMemGeneric");
532 BOOST_TEST(found != std::string::npos);
535 found = dump.find(
"SyncMemGeneric");
536 BOOST_TEST(found != std::string::npos);
539 found = dump.find(
"ImportMemGeneric");
540 BOOST_TEST(found == std::string::npos);
546 BOOST_TEST(outputData == expectedOutput);
551 using namespace armnn;
556 BOOST_TEST((backendObjPtr !=
nullptr));
559 if (backendIds.find(
"MockRef") == backendIds.end())
561 std::string message =
"Cannot load MockRef";
608 BOOST_TEST(
CheckOrder(graph, layer0, layer1));
609 BOOST_TEST(
CheckOrder(graph, layer1, layer2));
610 BOOST_TEST(
CheckOrder(graph, layer2, layer3));
611 BOOST_TEST(
CheckOrder(graph, layer3, layer4));
612 BOOST_TEST(
CheckOrder(graph, layer4, layer5));
613 BOOST_TEST(
CheckOrder(graph, layer5, layer6));
617 std::string ignoredErrorMessage;
620 runtime->LoadNetwork(netId, std::move(optNet), ignoredErrorMessage, networkProperties);
623 std::vector<float> inputData0
625 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f, 0.0f
627 std::vector<float> inputData1
629 0.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f
631 std::vector<float> inputData2
633 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f
636 std::vector<float> outputData(12);
638 std::vector<float> expectedOutput
640 13.0f, 11.0f, 11.0f, 9.0f, 7.0f, 7.0f, 7.0f, 5.0f, 5.0f, 3.0f, 3.0f, -5.0f
651 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
654 runtime->GetProfiler(netId)->EnableProfiling(
true);
657 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
661 std::stringstream ss;
663 std::string dump = ss.str();
666 std::size_t found = dump.find(
"CopyMemGeneric");
667 BOOST_TEST(found != std::string::npos);
670 found = dump.find(
"ImportMemGeneric");
671 BOOST_TEST(found == std::string::npos);
677 BOOST_TEST(outputData == expectedOutput);
680 #if defined(ARMCOMPUTECL_ENABLED) 683 using namespace armnn;
732 BOOST_TEST(
CheckOrder(graph, layer0, layer1));
733 BOOST_TEST(
CheckOrder(graph, layer1, layer2));
734 BOOST_TEST(
CheckOrder(graph, layer2, layer3));
735 BOOST_TEST(
CheckOrder(graph, layer3, layer4));
736 BOOST_TEST(
CheckOrder(graph, layer4, layer5));
737 BOOST_TEST(
CheckOrder(graph, layer5, layer6));
747 std::string ignoredErrorMessage;
750 runtime->LoadNetwork(netId, std::move(optNet), ignoredErrorMessage, networkProperties);
753 std::vector<float> inputData0
755 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f, 6.0f
757 std::vector<float> inputData1
759 0.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f
761 std::vector<float> inputData2
763 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f
766 std::vector<float> outputData(12);
768 std::vector<float> expectedOutput
770 11.0f, 9.0f, 7.0f, 5.0f, 3.0f, 1.0f, -1.0f, -3.0f, -5.0f, -7.0f, -9.0f, -11.0f
781 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
784 runtime->GetProfiler(netId)->EnableProfiling(
true);
787 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
791 std::stringstream ss;
793 std::string dump = ss.str();
796 std::size_t found = dump.find(
"ClSubtractionWorkload_Execute");
797 BOOST_TEST(found != std::string::npos);
800 found = dump.find(
"CopyMemGeneric");
801 BOOST_TEST(found != std::string::npos);
804 BOOST_TEST(outputData == expectedOutput);
809 using namespace armnn;
857 BOOST_TEST(
CheckOrder(graph, layer0, layer1));
858 BOOST_TEST(
CheckOrder(graph, layer1, layer2));
859 BOOST_TEST(
CheckOrder(graph, layer2, layer3));
860 BOOST_TEST(
CheckOrder(graph, layer3, layer4));
861 BOOST_TEST(
CheckOrder(graph, layer4, layer5));
862 BOOST_TEST(
CheckOrder(graph, layer5, layer6));
872 runtime->LoadNetwork(netId, std::move(optNet));
875 std::vector<float> inputData0
877 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f, 6.0f
879 std::vector<float> inputData1
881 0.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f
883 std::vector<float> inputData2
885 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f
888 std::vector<float> outputData(12);
890 std::vector<float> expectedOutput
892 11.0f, 9.0f, 7.0f, 5.0f, 3.0f, 1.0f, -1.0f, -3.0f, -5.0f, -7.0f, -9.0f, -11.0f
903 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
906 runtime->GetProfiler(netId)->EnableProfiling(
true);
909 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
913 std::stringstream ss;
915 std::string dump = ss.str();
918 std::size_t found = dump.find(
"ClSubtractionWorkload_Execute");
919 BOOST_TEST(found != std::string::npos);
922 found = dump.find(
"CopyMemGeneric");
923 BOOST_TEST(found != std::string::npos);
926 BOOST_TEST(outputData == expectedOutput);
931 using namespace armnn;
988 BOOST_TEST(
CheckOrder(graph, layer0, layer1));
989 BOOST_TEST(
CheckOrder(graph, layer1, layer2));
990 BOOST_TEST(
CheckOrder(graph, layer2, layer3));
991 BOOST_TEST(
CheckOrder(graph, layer3, layer4));
992 BOOST_TEST(
CheckOrder(graph, layer4, layer5));
993 BOOST_TEST(
CheckOrder(graph, layer5, layer6));
994 BOOST_TEST(
CheckOrder(graph, layer6, layer7));
995 BOOST_TEST(
CheckOrder(graph, layer7, layer8));
1006 std::string ignoredErrorMessage;
1009 runtime->LoadNetwork(netId, std::move(optNet), ignoredErrorMessage, networkProperties);
1012 std::vector<float> inputData0
1014 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f, 6.0f
1016 std::vector<float> inputData1
1018 0.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f
1020 std::vector<float> inputData2
1022 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f
1025 std::vector<float> outputData(2);
1027 std::vector<float> expectedOutput{ 11.0f, -1.0f };
1037 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
1040 runtime->GetProfiler(netId)->EnableProfiling(
true);
1043 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
1047 std::stringstream ss;
1049 std::string dump = ss.str();
1052 std::size_t found = dump.find(
"ClSubtractionWorkload_Execute");
1053 BOOST_TEST(found != std::string::npos);
1056 found = dump.find(
"NeonPooling2dWorkload_Execute");
1057 BOOST_TEST(found != std::string::npos);
1060 found = dump.find(
"CopyMemGeneric");
1061 BOOST_TEST(found != std::string::npos);
1064 found = dump.find(
"SyncMemGeneric");
1065 BOOST_TEST(found != std::string::npos);
1068 BOOST_TEST(outputData == expectedOutput);
1073 using namespace armnn;
1129 BOOST_TEST(
CheckOrder(graph, layer0, layer1));
1130 BOOST_TEST(
CheckOrder(graph, layer1, layer2));
1131 BOOST_TEST(
CheckOrder(graph, layer2, layer3));
1132 BOOST_TEST(
CheckOrder(graph, layer3, layer4));
1133 BOOST_TEST(
CheckOrder(graph, layer4, layer5));
1134 BOOST_TEST(
CheckOrder(graph, layer5, layer6));
1135 BOOST_TEST(
CheckOrder(graph, layer6, layer7));
1136 BOOST_TEST(
CheckOrder(graph, layer7, layer8));
1147 runtime->LoadNetwork(netId, std::move(optNet));
1150 std::vector<float> inputData0
1152 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f, 6.0f
1154 std::vector<float> inputData1
1156 0.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f
1158 std::vector<float> inputData2
1160 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f
1163 std::vector<float> outputData(2);
1165 std::vector<float> expectedOutput{ 11.0f, -1.0f };
1175 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
1178 runtime->GetProfiler(netId)->EnableProfiling(
true);
1181 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
1185 std::stringstream ss;
1187 std::string dump = ss.str();
1190 std::size_t found = dump.find(
"ClSubtractionWorkload_Execute");
1191 BOOST_TEST(found != std::string::npos);
1194 found = dump.find(
"NeonPooling2dWorkload_Execute");
1195 BOOST_TEST(found != std::string::npos);
1198 found = dump.find(
"CopyMemGeneric");
1199 BOOST_TEST(found != std::string::npos);
1202 BOOST_TEST(outputData == expectedOutput);
BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)
static IRuntimePtr Create(const CreationOptions &options)
Interface for a layer that is connectable to other layers via InputSlots and OutputSlots.
BackendIdSet GetBackendIds() const
std::unordered_set< BackendId > BackendIdSet
armnn::Layer * GetFirstLayerWithName(armnn::Graph &graph, const std::string &name)
static ProfilerManager & GetInstance()
bool CheckOrder(const armnn::Graph &graph, const armnn::Layer *first, const armnn::Layer *second)
Checks that first comes before second in the order.
virtual void BackendSelectionHint(Optional< BackendId > backend)=0
Provide a hint for the optimizer as to which backend to prefer for this layer.
BOOST_AUTO_TEST_CASE(FallbackImportToCpuAcc)
std::unique_ptr< IRuntime, void(*)(IRuntime *runtime)> IRuntimePtr
void Print(std::ostream &outStream) const
Print stats for events in JSON Format to the given output stream.
BackendRegistry & BackendRegistryInstance()
std::vector< std::pair< LayerBindingId, class ConstTensor > > InputTensors
Copyright (c) 2021 ARM Limited and Contributors.
virtual void SetTensorInfo(const TensorInfo &tensorInfo)=0
constexpr const char * MockImportBackendId()
IProfiler * GetProfiler()
A tensor defined by a TensorInfo (shape and data type) and a mutable backing store.
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.
A tensor defined by a TensorInfo (shape and data type) and an immutable backing store.
std::vector< std::pair< LayerBindingId, class Tensor > > OutputTensors
LayerType GetType() const override
Returns the armnn::LayerType of this layer.
std::unique_ptr< IOptimizedNetwork, void(*)(IOptimizedNetwork *network)> IOptimizedNetworkPtr
GPU Execution: OpenCL: ArmCompute.
BOOST_AUTO_TEST_CASE(CheckConvolution2dLayer)
const BackendId & GetBackendId() const
Graph & GetGraphForTesting(IOptimizedNetwork *optNet)
BOOST_AUTO_TEST_SUITE_END()
CPU Execution: NEON: ArmCompute.
armnn::IBackendInternalUniquePtr CreateBackendObject(const armnn::BackendId &backendId)
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
virtual int Connect(IInputSlot &destination)=0
A Pooling2dDescriptor for the Pooling2dLayer.
static INetworkPtr Create(NetworkOptions networkOptions={})