10 #include <boost/test/unit_test.hpp> 16 using namespace armnn;
54 OptimizedNetwork* optNetObjPtr = PolymorphicDowncast<OptimizedNetwork*>(optNet.get());
55 Graph& graph = optNetObjPtr->GetGraph();
81 std::string ignoredErrorMessage;
84 runtime->LoadNetwork(netId, std::move(optNet), ignoredErrorMessage, networkProperties);
87 std::vector<float> inputData0
89 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f, 6.0f
91 std::vector<float> inputData1
93 0.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f
95 std::vector<float> inputData2
97 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f
100 std::vector<float> outputData(12);
102 std::vector<float> expectedOutput
104 11.0f, 9.0f, 7.0f, 5.0f, 3.0f, 1.0f, -1.0f, -3.0f, -5.0f, -7.0f, -9.0f, -11.0f
115 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
118 runtime->GetProfiler(netId)->EnableProfiling(
true);
121 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
125 std::stringstream ss;
127 std::string dump = ss.str();
130 std::size_t found = dump.find(
"NeonSubtractionWorkload_Execute");
131 BOOST_TEST(found != std::string::npos);
134 found = dump.find(
"CopyMemGeneric");
135 BOOST_TEST(found != std::string::npos);
138 BOOST_TEST(outputData == expectedOutput);
143 using namespace armnn;
180 OptimizedNetwork* optNetObjPtr = PolymorphicDowncast<OptimizedNetwork*>(optNet.get());
181 Graph& graph = optNetObjPtr->GetGraph();
192 BOOST_TEST(
CheckOrder(graph, layer0, layer1));
193 BOOST_TEST(
CheckOrder(graph, layer1, layer2));
194 BOOST_TEST(
CheckOrder(graph, layer2, layer3));
195 BOOST_TEST(
CheckOrder(graph, layer3, layer4));
196 BOOST_TEST(
CheckOrder(graph, layer4, layer5));
197 BOOST_TEST(
CheckOrder(graph, layer5, layer6));
207 runtime->LoadNetwork(netId, std::move(optNet));
210 std::vector<float> inputData0
212 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f, 6.0f
214 std::vector<float> inputData1
216 0.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f
218 std::vector<float> inputData2
220 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f
223 std::vector<float> outputData(12);
225 std::vector<float> expectedOutput
227 11.0f, 9.0f, 7.0f, 5.0f, 3.0f, 1.0f, -1.0f, -3.0f, -5.0f, -7.0f, -9.0f, -11.0f
238 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
241 runtime->GetProfiler(netId)->EnableProfiling(
true);
244 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
248 std::stringstream ss;
250 std::string dump = ss.str();
253 std::size_t found = dump.find(
"NeonSubtractionWorkload_Execute");
254 BOOST_TEST(found != std::string::npos);
257 found = dump.find(
"CopyMemGeneric");
258 BOOST_TEST(found != std::string::npos);
261 BOOST_TEST(outputData == expectedOutput);
266 using namespace armnn;
310 OptimizedNetwork* optNetObjPtr = PolymorphicDowncast<OptimizedNetwork*>(optNet.get());
311 Graph& graph = optNetObjPtr->GetGraph();
324 BOOST_TEST(
CheckOrder(graph, layer0, layer1));
325 BOOST_TEST(
CheckOrder(graph, layer1, layer2));
326 BOOST_TEST(
CheckOrder(graph, layer2, layer3));
327 BOOST_TEST(
CheckOrder(graph, layer3, layer4));
328 BOOST_TEST(
CheckOrder(graph, layer4, layer5));
329 BOOST_TEST(
CheckOrder(graph, layer5, layer6));
330 BOOST_TEST(
CheckOrder(graph, layer6, layer7));
331 BOOST_TEST(
CheckOrder(graph, layer7, layer8));
342 std::string ignoredErrorMessage;
345 runtime->LoadNetwork(netId, std::move(optNet), ignoredErrorMessage, networkProperties);
348 std::vector<float> inputData0
350 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f, 6.0f
352 std::vector<float> inputData1
354 0.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f
356 std::vector<float> inputData2
358 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f
361 std::vector<float> outputData(2);
363 std::vector<float> expectedOutput{ 11.0f, -1.0f };
373 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
376 runtime->GetProfiler(netId)->EnableProfiling(
true);
379 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
383 std::stringstream ss;
385 std::string dump = ss.str();
388 std::size_t found = dump.find(
"NeonSubtractionWorkload_Execute");
389 BOOST_TEST(found != std::string::npos);
392 found = dump.find(
"ClPooling2dWorkload_Execute");
393 BOOST_TEST(found != std::string::npos);
396 found = dump.find(
"CopyMemGeneric");
397 BOOST_TEST(found != std::string::npos);
400 BOOST_TEST(outputData == expectedOutput);
405 using namespace armnn;
448 OptimizedNetwork* optNetObjPtr = PolymorphicDowncast<OptimizedNetwork*>(optNet.get());
449 Graph& graph = optNetObjPtr->GetGraph();
462 BOOST_TEST(
CheckOrder(graph, layer0, layer1));
463 BOOST_TEST(
CheckOrder(graph, layer1, layer2));
464 BOOST_TEST(
CheckOrder(graph, layer2, layer3));
465 BOOST_TEST(
CheckOrder(graph, layer3, layer4));
466 BOOST_TEST(
CheckOrder(graph, layer4, layer5));
467 BOOST_TEST(
CheckOrder(graph, layer5, layer6));
468 BOOST_TEST(
CheckOrder(graph, layer6, layer7));
469 BOOST_TEST(
CheckOrder(graph, layer7, layer8));
480 runtime->LoadNetwork(netId, std::move(optNet));
483 std::vector<float> inputData0
485 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f, 6.0f
487 std::vector<float> inputData1
489 0.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 5.0f, 5.0f, 6.0f
491 std::vector<float> inputData2
493 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f
496 std::vector<float> outputData(2);
498 std::vector<float> expectedOutput{ 11.0f, -1.0f };
508 { 0,
armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
511 runtime->GetProfiler(netId)->EnableProfiling(
true);
514 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
518 std::stringstream ss;
520 std::string dump = ss.str();
523 std::size_t found = dump.find(
"NeonSubtractionWorkload_Execute");
524 BOOST_TEST(found != std::string::npos);
527 found = dump.find(
"ClPooling2dWorkload_Execute");
528 BOOST_TEST(found != std::string::npos);
531 found = dump.find(
"CopyMemGeneric");
532 BOOST_TEST(found != std::string::npos);
535 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.
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.
std::unique_ptr< IRuntime, void(*)(IRuntime *runtime)> IRuntimePtr
std::vector< std::pair< LayerBindingId, class ConstTensor > > InputTensors
Copyright (c) 2020 ARM Limited.
virtual void SetTensorInfo(const TensorInfo &tensorInfo)=0
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.
BOOST_AUTO_TEST_CASE(ClImportEnabledFallbackToNeon)
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.
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={})