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";
65 OptimizedNetwork* optNetObjPtr = PolymorphicDowncast<OptimizedNetwork*>(optNet.get());
66 Graph& graph = optNetObjPtr->GetGraph();
86 std::string ignoredErrorMessage;
89 runtime->LoadNetwork(netId, std::move(optNet), ignoredErrorMessage, networkProperties);
92 std::vector<float> inputData0
94 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f, 6.0f
96 std::vector<float> inputData1
98 0.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f
100 std::vector<float> inputData2
102 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f
105 std::vector<float> outputData(12);
107 std::vector<float> expectedOutput
109 11.0f, 9.0f, 7.0f, 5.0f, 3.0f, 1.0f, -1.0f, -3.0f, -5.0f, -7.0f, -9.0f, -11.0f
120 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
123 runtime->GetProfiler(netId)->EnableProfiling(
true);
126 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
130 std::stringstream ss;
132 std::string dump = ss.str();
135 std::size_t found = dump.find(
"ImportMemGeneric");
136 BOOST_TEST(found != std::string::npos);
139 found = dump.find(
"SyncMemGeneric");
140 BOOST_TEST(found != std::string::npos);
143 found = dump.find(
"CopyMemGeneric");
144 BOOST_TEST(found == std::string::npos);
150 BOOST_TEST(outputData == expectedOutput);
155 using namespace armnn;
160 BOOST_TEST((backendObjPtr !=
nullptr));
163 if (backendIds.find(
"MockRef") == backendIds.end())
165 std::string message =
"Cannot load MockRef";
203 OptimizedNetwork* optNetObjPtr = PolymorphicDowncast<OptimizedNetwork*>(optNet.get());
204 Graph& graph = optNetObjPtr->GetGraph();
214 BOOST_TEST(
CheckOrder(graph, layer0, layer1));
215 BOOST_TEST(
CheckOrder(graph, layer1, layer2));
216 BOOST_TEST(
CheckOrder(graph, layer2, layer3));
217 BOOST_TEST(
CheckOrder(graph, layer3, layer4));
218 BOOST_TEST(
CheckOrder(graph, layer4, layer5));
222 std::string ignoredErrorMessage;
225 runtime->LoadNetwork(netId, std::move(optNet), ignoredErrorMessage, networkProperties);
228 std::vector<float> inputData0
230 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f, 6.0f
232 std::vector<float> inputData1
234 0.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f
237 std::vector<float> outputData(2);
239 std::vector<float> expectedOutput
251 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
254 runtime->GetProfiler(netId)->EnableProfiling(
true);
257 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
261 std::stringstream ss;
263 std::string dump = ss.str();
266 std::size_t found = dump.find(
"CopyMemGeneric");
267 BOOST_TEST(found != std::string::npos);
270 found = dump.find(
"SyncMemGeneric");
271 BOOST_TEST(found != std::string::npos);
274 found = dump.find(
"ImportMemGeneric");
275 BOOST_TEST(found == std::string::npos);
281 BOOST_TEST(outputData == expectedOutput);
286 using namespace armnn;
291 BOOST_TEST((backendObjPtr !=
nullptr));
294 if (backendIds.find(
"MockRef") == backendIds.end())
296 std::string message =
"Cannot load MockRef";
334 OptimizedNetwork* optNetObjPtr = PolymorphicDowncast<OptimizedNetwork*>(optNet.get());
335 Graph& graph = optNetObjPtr->GetGraph();
346 BOOST_TEST(
CheckOrder(graph, layer0, layer1));
347 BOOST_TEST(
CheckOrder(graph, layer1, layer2));
348 BOOST_TEST(
CheckOrder(graph, layer2, layer3));
349 BOOST_TEST(
CheckOrder(graph, layer3, layer4));
350 BOOST_TEST(
CheckOrder(graph, layer4, layer5));
351 BOOST_TEST(
CheckOrder(graph, layer5, layer6));
355 std::string ignoredErrorMessage;
358 runtime->LoadNetwork(netId, std::move(optNet), ignoredErrorMessage, networkProperties);
361 std::vector<float> inputData0
363 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f, 0.0f
365 std::vector<float> inputData1
367 0.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f
369 std::vector<float> inputData2
371 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f
374 std::vector<float> outputData(12);
376 std::vector<float> expectedOutput
378 13.0f, 11.0f, 11.0f, 9.0f, 7.0f, 7.0f, 7.0f, 5.0f, 5.0f, 3.0f, 3.0f, -5.0f
389 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
392 runtime->GetProfiler(netId)->EnableProfiling(
true);
395 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
399 std::stringstream ss;
401 std::string dump = ss.str();
404 std::size_t found = dump.find(
"ImportMemGeneric");
405 BOOST_TEST(found != std::string::npos);
408 found = dump.find(
"SyncMemGeneric");
409 BOOST_TEST(found != std::string::npos);
412 found = dump.find(
"CopyMemGeneric");
413 BOOST_TEST(found == std::string::npos);
419 BOOST_TEST(outputData == expectedOutput);
424 using namespace armnn;
429 BOOST_TEST((backendObjPtr !=
nullptr));
432 if (backendIds.find(
"MockRef") == backendIds.end())
434 std::string message =
"Cannot load MockRef";
472 OptimizedNetwork* optNetObjPtr = PolymorphicDowncast<OptimizedNetwork*>(optNet.get());
473 Graph& graph = optNetObjPtr->GetGraph();
483 BOOST_TEST(
CheckOrder(graph, layer0, layer1));
484 BOOST_TEST(
CheckOrder(graph, layer1, layer2));
485 BOOST_TEST(
CheckOrder(graph, layer2, layer3));
486 BOOST_TEST(
CheckOrder(graph, layer3, layer4));
487 BOOST_TEST(
CheckOrder(graph, layer4, layer5));
491 std::string ignoredErrorMessage;
494 runtime->LoadNetwork(netId, std::move(optNet), ignoredErrorMessage, networkProperties);
497 std::vector<float> inputData0
499 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f
501 std::vector<float> inputData1
506 std::vector<float> outputData(2);
508 std::vector<float> expectedOutput
520 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
523 runtime->GetProfiler(netId)->EnableProfiling(
true);
526 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
530 std::stringstream ss;
532 std::string dump = ss.str();
535 std::size_t found = dump.find(
"CopyMemGeneric");
536 BOOST_TEST(found != std::string::npos);
539 found = dump.find(
"SyncMemGeneric");
540 BOOST_TEST(found != std::string::npos);
543 found = dump.find(
"ImportMemGeneric");
544 BOOST_TEST(found == std::string::npos);
550 BOOST_TEST(outputData == expectedOutput);
555 using namespace armnn;
560 BOOST_TEST((backendObjPtr !=
nullptr));
563 if (backendIds.find(
"MockRef") == backendIds.end())
565 std::string message =
"Cannot load MockRef";
601 OptimizedNetwork* optNetObjPtr = PolymorphicDowncast<OptimizedNetwork*>(optNet.get());
602 Graph& graph = optNetObjPtr->GetGraph();
613 BOOST_TEST(
CheckOrder(graph, layer0, layer1));
614 BOOST_TEST(
CheckOrder(graph, layer1, layer2));
615 BOOST_TEST(
CheckOrder(graph, layer2, layer3));
616 BOOST_TEST(
CheckOrder(graph, layer3, layer4));
617 BOOST_TEST(
CheckOrder(graph, layer4, layer5));
618 BOOST_TEST(
CheckOrder(graph, layer5, layer6));
622 std::string ignoredErrorMessage;
625 runtime->LoadNetwork(netId, std::move(optNet), ignoredErrorMessage, networkProperties);
628 std::vector<float> inputData0
630 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f, 0.0f
632 std::vector<float> inputData1
634 0.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f
636 std::vector<float> inputData2
638 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f
641 std::vector<float> outputData(12);
643 std::vector<float> expectedOutput
645 13.0f, 11.0f, 11.0f, 9.0f, 7.0f, 7.0f, 7.0f, 5.0f, 5.0f, 3.0f, 3.0f, -5.0f
656 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
659 runtime->GetProfiler(netId)->EnableProfiling(
true);
662 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
666 std::stringstream ss;
668 std::string dump = ss.str();
671 std::size_t found = dump.find(
"CopyMemGeneric");
672 BOOST_TEST(found != std::string::npos);
675 found = dump.find(
"ImportMemGeneric");
676 BOOST_TEST(found == std::string::npos);
682 BOOST_TEST(outputData == expectedOutput);
685 #if defined(ARMCOMPUTECL_ENABLED) 688 using namespace armnn;
726 OptimizedNetwork* optNetObjPtr = PolymorphicDowncast<OptimizedNetwork*>(optNet.get());
727 Graph& graph = optNetObjPtr->GetGraph();
738 BOOST_TEST(
CheckOrder(graph, layer0, layer1));
739 BOOST_TEST(
CheckOrder(graph, layer1, layer2));
740 BOOST_TEST(
CheckOrder(graph, layer2, layer3));
741 BOOST_TEST(
CheckOrder(graph, layer3, layer4));
742 BOOST_TEST(
CheckOrder(graph, layer4, layer5));
743 BOOST_TEST(
CheckOrder(graph, layer5, layer6));
753 std::string ignoredErrorMessage;
756 runtime->LoadNetwork(netId, std::move(optNet), ignoredErrorMessage, networkProperties);
759 std::vector<float> inputData0
761 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f, 6.0f
763 std::vector<float> inputData1
765 0.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f
767 std::vector<float> inputData2
769 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f
772 std::vector<float> outputData(12);
774 std::vector<float> expectedOutput
776 11.0f, 9.0f, 7.0f, 5.0f, 3.0f, 1.0f, -1.0f, -3.0f, -5.0f, -7.0f, -9.0f, -11.0f
787 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
790 runtime->GetProfiler(netId)->EnableProfiling(
true);
793 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
797 std::stringstream ss;
799 std::string dump = ss.str();
802 std::size_t found = dump.find(
"ClSubtractionWorkload_Execute");
803 BOOST_TEST(found != std::string::npos);
806 found = dump.find(
"CopyMemGeneric");
807 BOOST_TEST(found != std::string::npos);
810 BOOST_TEST(outputData == expectedOutput);
815 using namespace armnn;
852 OptimizedNetwork* optNetObjPtr = PolymorphicDowncast<OptimizedNetwork*>(optNet.get());
853 Graph& graph = optNetObjPtr->GetGraph();
864 BOOST_TEST(
CheckOrder(graph, layer0, layer1));
865 BOOST_TEST(
CheckOrder(graph, layer1, layer2));
866 BOOST_TEST(
CheckOrder(graph, layer2, layer3));
867 BOOST_TEST(
CheckOrder(graph, layer3, layer4));
868 BOOST_TEST(
CheckOrder(graph, layer4, layer5));
869 BOOST_TEST(
CheckOrder(graph, layer5, layer6));
879 runtime->LoadNetwork(netId, std::move(optNet));
882 std::vector<float> inputData0
884 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f, 6.0f
886 std::vector<float> inputData1
888 0.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f
890 std::vector<float> inputData2
892 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f
895 std::vector<float> outputData(12);
897 std::vector<float> expectedOutput
899 11.0f, 9.0f, 7.0f, 5.0f, 3.0f, 1.0f, -1.0f, -3.0f, -5.0f, -7.0f, -9.0f, -11.0f
910 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
913 runtime->GetProfiler(netId)->EnableProfiling(
true);
916 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
920 std::stringstream ss;
922 std::string dump = ss.str();
925 std::size_t found = dump.find(
"ClSubtractionWorkload_Execute");
926 BOOST_TEST(found != std::string::npos);
929 found = dump.find(
"CopyMemGeneric");
930 BOOST_TEST(found != std::string::npos);
933 BOOST_TEST(outputData == expectedOutput);
938 using namespace armnn;
982 OptimizedNetwork* optNetObjPtr = PolymorphicDowncast<OptimizedNetwork*>(optNet.get());
983 Graph& graph = optNetObjPtr->GetGraph();
996 BOOST_TEST(
CheckOrder(graph, layer0, layer1));
997 BOOST_TEST(
CheckOrder(graph, layer1, layer2));
998 BOOST_TEST(
CheckOrder(graph, layer2, layer3));
999 BOOST_TEST(
CheckOrder(graph, layer3, layer4));
1000 BOOST_TEST(
CheckOrder(graph, layer4, layer5));
1001 BOOST_TEST(
CheckOrder(graph, layer5, layer6));
1002 BOOST_TEST(
CheckOrder(graph, layer6, layer7));
1003 BOOST_TEST(
CheckOrder(graph, layer7, layer8));
1014 std::string ignoredErrorMessage;
1017 runtime->LoadNetwork(netId, std::move(optNet), ignoredErrorMessage, networkProperties);
1020 std::vector<float> inputData0
1022 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f, 6.0f
1024 std::vector<float> inputData1
1026 0.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f
1028 std::vector<float> inputData2
1030 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f
1033 std::vector<float> outputData(2);
1035 std::vector<float> expectedOutput{ 11.0f, -1.0f };
1045 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
1048 runtime->GetProfiler(netId)->EnableProfiling(
true);
1051 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
1055 std::stringstream ss;
1057 std::string dump = ss.str();
1060 std::size_t found = dump.find(
"ClSubtractionWorkload_Execute");
1061 BOOST_TEST(found != std::string::npos);
1064 found = dump.find(
"NeonPooling2dWorkload_Execute");
1065 BOOST_TEST(found != std::string::npos);
1068 found = dump.find(
"CopyMemGeneric");
1069 BOOST_TEST(found != std::string::npos);
1072 found = dump.find(
"SyncMemGeneric");
1073 BOOST_TEST(found != std::string::npos);
1076 BOOST_TEST(outputData == expectedOutput);
1081 using namespace armnn;
1124 OptimizedNetwork* optNetObjPtr = PolymorphicDowncast<OptimizedNetwork*>(optNet.get());
1125 Graph& graph = optNetObjPtr->GetGraph();
1138 BOOST_TEST(
CheckOrder(graph, layer0, layer1));
1139 BOOST_TEST(
CheckOrder(graph, layer1, layer2));
1140 BOOST_TEST(
CheckOrder(graph, layer2, layer3));
1141 BOOST_TEST(
CheckOrder(graph, layer3, layer4));
1142 BOOST_TEST(
CheckOrder(graph, layer4, layer5));
1143 BOOST_TEST(
CheckOrder(graph, layer5, layer6));
1144 BOOST_TEST(
CheckOrder(graph, layer6, layer7));
1145 BOOST_TEST(
CheckOrder(graph, layer7, layer8));
1156 runtime->LoadNetwork(netId, std::move(optNet));
1159 std::vector<float> inputData0
1161 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f, 6.0f
1163 std::vector<float> inputData1
1165 0.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f
1167 std::vector<float> inputData2
1169 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f
1172 std::vector<float> outputData(2);
1174 std::vector<float> expectedOutput{ 11.0f, -1.0f };
1184 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
1187 runtime->GetProfiler(netId)->EnableProfiling(
true);
1190 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
1194 std::stringstream ss;
1196 std::string dump = ss.str();
1199 std::size_t found = dump.find(
"ClSubtractionWorkload_Execute");
1200 BOOST_TEST(found != std::string::npos);
1203 found = dump.find(
"NeonPooling2dWorkload_Execute");
1204 BOOST_TEST(found != std::string::npos);
1207 found = dump.find(
"CopyMemGeneric");
1208 BOOST_TEST(found != std::string::npos);
1211 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
BackendRegistry & BackendRegistryInstance()
std::vector< std::pair< LayerBindingId, class ConstTensor > > InputTensors
Copyright (c) 2020 ARM Limited.
virtual void SetTensorInfo(const TensorInfo &tensorInfo)=0
constexpr const char * MockImportBackendId()
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
std::unique_ptr< IOptimizedNetwork, void(*)(IOptimizedNetwork *network)> IOptimizedNetworkPtr
GPU Execution: OpenCL: ArmCompute.
BOOST_AUTO_TEST_CASE(CheckConvolution2dLayer)
const BackendId & GetBackendId() const
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.
LayerType GetType() const
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.
void Print(std::ostream &outStream) const override
Print stats for events in JSON Format to the given output stream.
static INetworkPtr Create(NetworkOptions networkOptions={})