diff options
Diffstat (limited to 'src/armnn')
-rw-r--r-- | src/armnn/Graph.cpp | 8 | ||||
-rw-r--r-- | src/armnn/Layer.cpp | 2 | ||||
-rw-r--r-- | src/armnn/Layer.hpp | 6 | ||||
-rw-r--r-- | src/armnn/LoadedNetwork.cpp | 32 | ||||
-rw-r--r-- | src/armnn/Network.cpp | 10 | ||||
-rw-r--r-- | src/armnn/layers/LayerCloneBase.hpp | 2 | ||||
-rw-r--r-- | src/armnn/test/CreateWorkload.hpp | 2 | ||||
-rw-r--r-- | src/armnn/test/GraphTests.cpp | 30 | ||||
-rw-r--r-- | src/armnn/test/NetworkTests.cpp | 26 |
9 files changed, 54 insertions, 64 deletions
diff --git a/src/armnn/Graph.cpp b/src/armnn/Graph.cpp index 0ba2d0666a..83d82a5ffe 100644 --- a/src/armnn/Graph.cpp +++ b/src/armnn/Graph.cpp @@ -67,7 +67,7 @@ Status Graph::Print() const for (auto&& it : TopologicalSort()) { BOOST_LOG_TRIVIAL(info) << it->GetName() << ":" << GetLayerTypeAsCString(it->GetType()) - << ":" << GetComputeDeviceAsCString(it->GetComputeDevice()); + << ":" << it->GetBackendId().Get(); } BOOST_LOG_TRIVIAL(info) << "\n\n"; @@ -260,7 +260,7 @@ void Graph::AddCopyLayers() auto MayNeedCopyLayer = [](const Layer& layer) { // All layers should have been associated with a valid compute device at this point. - BOOST_ASSERT(layer.GetComputeDevice() != Compute::Undefined); + BOOST_ASSERT(layer.GetBackendId() != Compute::Undefined); // Does not need another copy layer if a copy layer is already present. return layer.GetType() != LayerType::MemCopy; }; @@ -276,7 +276,7 @@ void Graph::AddCopyLayers() for (auto&& dstInput : connectionCopy) { Layer& dstLayer = dstInput->GetOwningLayer(); - if (MayNeedCopyLayer(dstLayer) && (dstLayer.GetComputeDevice() != srcLayer->GetComputeDevice())) + if (MayNeedCopyLayer(dstLayer) && (dstLayer.GetBackendId() != srcLayer->GetBackendId())) { // A copy layer is needed in between the source and destination layers. // Record the operation rather than attempting to modify the graph as we go. @@ -288,7 +288,7 @@ void Graph::AddCopyLayers() % dstInput->GetSlotIndex()); MemCopyLayer* const copyLayer = InsertNewLayer<MemCopyLayer>(*dstInput, copyLayerName.c_str()); - copyLayer->SetComputeDevice(dstLayer.GetComputeDevice()); + copyLayer->SetBackendId(dstLayer.GetBackendId()); } } ++srcOutputIndex; diff --git a/src/armnn/Layer.cpp b/src/armnn/Layer.cpp index d9229203ea..08a8bc3211 100644 --- a/src/armnn/Layer.cpp +++ b/src/armnn/Layer.cpp @@ -133,7 +133,7 @@ Layer::Layer(unsigned int numInputSlots, , m_LayerName(name ? name : "") , m_Type(type) , m_DataLayout(layout) -, m_ComputeDevice(Compute::Undefined) +, m_BackendId(UninitializedBackendId()) , m_Guid(GenerateLayerGuid()) { m_InputSlots.reserve(numInputSlots); diff --git a/src/armnn/Layer.hpp b/src/armnn/Layer.hpp index d897b255a6..a969607100 100644 --- a/src/armnn/Layer.hpp +++ b/src/armnn/Layer.hpp @@ -237,8 +237,8 @@ public: DataLayout GetDataLayout() const { return m_DataLayout; } - Compute GetComputeDevice() const { return m_ComputeDevice; } - void SetComputeDevice(Compute device) { m_ComputeDevice = device; } + const BackendId& GetBackendId() const { return m_BackendId; } + void SetBackendId(const BackendId& id) { m_BackendId = id; } // Virtuals @@ -345,7 +345,7 @@ private: const LayerType m_Type; const DataLayout m_DataLayout; - Compute m_ComputeDevice; + BackendId m_BackendId; /// Used for sorting. mutable LayerPriority m_Priority = 0; diff --git a/src/armnn/LoadedNetwork.cpp b/src/armnn/LoadedNetwork.cpp index ce9f76c986..4f73bda832 100644 --- a/src/armnn/LoadedNetwork.cpp +++ b/src/armnn/LoadedNetwork.cpp @@ -122,7 +122,7 @@ LoadedNetwork::LoadedNetwork(std::unique_ptr<OptimizedNetwork> net) const char* const layerName = layer->GetNameStr().length() != 0 ? layer->GetName() : "<Unnamed>"; throw InvalidArgumentException(boost::str( boost::format("No workload created for layer (name: '%1%' type: '%2%') (compute '%3%')") - % layerName % static_cast<int>(layer->GetType()) % layer->GetComputeDevice() + % layerName % static_cast<int>(layer->GetType()) % layer->GetBackendId().Get() )); } @@ -176,27 +176,17 @@ const IWorkloadFactory& LoadedNetwork::GetWorkloadFactory(const Layer& layer) co { const IWorkloadFactory* workloadFactory = nullptr; - switch (layer.GetComputeDevice()) + if (layer.GetBackendId() == Compute::CpuAcc) { - case Compute::CpuAcc: - { - workloadFactory = &m_CpuAcc; - break; - } - case Compute::GpuAcc: - { - workloadFactory = &m_GpuAcc; - break; - } - case Compute::CpuRef: - { - workloadFactory = &m_CpuRef; - break; - } - default: - { - break; - } + workloadFactory = &m_CpuAcc; + } + else if (layer.GetBackendId() == Compute::GpuAcc) + { + workloadFactory = &m_GpuAcc; + } + else if (layer.GetBackendId() == Compute::CpuRef) + { + workloadFactory = &m_CpuRef; } BOOST_ASSERT_MSG(workloadFactory, "No workload factory"); diff --git a/src/armnn/Network.cpp b/src/armnn/Network.cpp index 51490e33c4..c43f336145 100644 --- a/src/armnn/Network.cpp +++ b/src/armnn/Network.cpp @@ -187,7 +187,7 @@ IOptimizedNetworkPtr Optimize(const INetwork& inNetwork, { // need to set the compute device on the layer // before we can check if it is supported - layer->SetComputeDevice(backend); + layer->SetBackendId(backend); if (!IWorkloadFactory::IsLayerSupported(*layer, dataType, reasonIfUnsupported)) { if (dataType == DataType::Float16) @@ -211,7 +211,7 @@ IOptimizedNetworkPtr Optimize(const INetwork& inNetwork, std::string reasonIfUnsupported; // Try preferred backend first - layer->SetComputeDevice(preferredBackend); + layer->SetBackendId(preferredBackend); if (IWorkloadFactory::IsLayerSupported(*layer, boost::none, reasonIfUnsupported)) { supportedBackendFound = true; @@ -226,7 +226,7 @@ IOptimizedNetworkPtr Optimize(const INetwork& inNetwork, continue; } - layer->SetComputeDevice(backend); + layer->SetBackendId(backend); if (IWorkloadFactory::IsLayerSupported(*layer, boost::none, reasonIfUnsupported)) { supportedBackendFound = true; @@ -260,7 +260,7 @@ IOptimizedNetworkPtr Optimize(const INetwork& inNetwork, } std::stringstream warningMsg; warningMsg << "WARNING: Layer of type " << GetLayerTypeAsCString(layer->GetType()) - << " is not supported on requested backend " << layer->GetComputeDevice() + << " is not supported on requested backend " << layer->GetBackendId().Get() << " for data type " << GetDataTypeName(dataType) << " (reason: " << reasonIfUnsupported << "), falling back to the next backend."; @@ -287,7 +287,7 @@ IOptimizedNetworkPtr Optimize(const INetwork& inNetwork, layerType == armnn::LayerType::Constant || layerType == armnn::LayerType::Permute)) { - layer->SetComputeDevice(armnn::Compute::CpuRef); + layer->SetBackendId(armnn::Compute::CpuRef); } else { diff --git a/src/armnn/layers/LayerCloneBase.hpp b/src/armnn/layers/LayerCloneBase.hpp index 9b9e1eaea3..3671d6642a 100644 --- a/src/armnn/layers/LayerCloneBase.hpp +++ b/src/armnn/layers/LayerCloneBase.hpp @@ -15,7 +15,7 @@ LayerType* Layer::CloneBase(Graph& graph, Params&& ... params) const { LayerType* const layer = graph.AddLayer<LayerType>(std::forward<Params>(params)...); - layer->SetComputeDevice(m_ComputeDevice); + layer->SetBackendId(GetBackendId()); layer->SetGuid(GetGuid()); return layer; diff --git a/src/armnn/test/CreateWorkload.hpp b/src/armnn/test/CreateWorkload.hpp index 21385d7a99..db1773a0ce 100644 --- a/src/armnn/test/CreateWorkload.hpp +++ b/src/armnn/test/CreateWorkload.hpp @@ -32,7 +32,7 @@ std::unique_ptr<Workload> MakeAndCheckWorkload(Layer& layer, Graph& graph, const BOOST_TEST(workload.get() == boost::polymorphic_downcast<Workload*>(workload.get()), "Cannot convert to derived class"); std::string reasonIfUnsupported; - layer.SetComputeDevice(factory.GetCompute()); + layer.SetBackendId(factory.GetCompute()); BOOST_TEST(factory.IsLayerSupported(layer, layer.GetDataType(), reasonIfUnsupported)); return std::unique_ptr<Workload>(static_cast<Workload*>(workload.release())); } diff --git a/src/armnn/test/GraphTests.cpp b/src/armnn/test/GraphTests.cpp index b297a74785..e99cb153fc 100644 --- a/src/armnn/test/GraphTests.cpp +++ b/src/armnn/test/GraphTests.cpp @@ -336,7 +336,7 @@ static void TestGraphAfterAddingCopyLayers(const armnn::Graph& graph, const armn // Both layers must have the same compute device. if (srcLayer && dstLayer) { - BOOST_TEST((srcLayer->GetComputeDevice() == dstLayer->GetComputeDevice())); + BOOST_TEST((srcLayer->GetBackendId() == dstLayer->GetBackendId())); } // Marks edge in original graph as observed (by deleting it). @@ -418,7 +418,7 @@ static void TestGraphAfterAddingCopyLayers(const armnn::Graph& graph, const armn } // Both layers must have different compute devices. - BOOST_TEST((nonCopyLayer->GetComputeDevice() != adjLayer->GetComputeDevice())); + BOOST_TEST((nonCopyLayer->GetBackendId() != adjLayer->GetBackendId())); // There must exist an edge connecting both layers directly in the original graph. { @@ -453,40 +453,40 @@ struct CopyLayersFixture using namespace std; Layer* const inputLayer = AddLayer<InputLayer>(0, "input"); - inputLayer->SetComputeDevice(Compute::CpuRef); + inputLayer->SetBackendId(Compute::CpuRef); Convolution2dDescriptor convolutionDefaults; Layer* const convLayer1 = AddLayer<Convolution2dLayer>(convolutionDefaults, "conv1"); - convLayer1->SetComputeDevice(Compute::CpuRef); + convLayer1->SetBackendId(Compute::CpuRef); inputLayer->GetOutputSlot(0).Connect(convLayer1->GetInputSlot(0)); Layer* const convLayer2 = AddLayer<Convolution2dLayer>(convolutionDefaults, "conv2"); - convLayer2->SetComputeDevice(Compute::CpuRef); + convLayer2->SetBackendId(Compute::CpuRef); convLayer1->GetOutputSlot(0).Connect(convLayer2->GetInputSlot(0)); armnn::OriginsDescriptor mergerDefaults(2); Layer* const mergerLayer = AddLayer<MergerLayer>(mergerDefaults, "merger"); - mergerLayer->SetComputeDevice(armnn::Compute::CpuRef); + mergerLayer->SetBackendId(armnn::Compute::CpuRef); convLayer1->GetOutputSlot(0).Connect(mergerLayer->GetInputSlot(0)); convLayer2->GetOutputSlot(0).Connect(mergerLayer->GetInputSlot(1)); armnn::ActivationDescriptor activationDefaults; Layer* const actLayer = AddLayer<ActivationLayer>(activationDefaults, "act"); - actLayer->SetComputeDevice(armnn::Compute::CpuRef); + actLayer->SetBackendId(armnn::Compute::CpuRef); mergerLayer->GetOutputSlot(0).Connect(actLayer->GetInputSlot(0)); armnn::SoftmaxDescriptor softmaxDefaults; Layer* const softmaxLayer = AddLayer<SoftmaxLayer>(softmaxDefaults, "softmax"); - softmaxLayer->SetComputeDevice(armnn::Compute::CpuRef); + softmaxLayer->SetBackendId(armnn::Compute::CpuRef); actLayer->GetOutputSlot(0).Connect(softmaxLayer->GetInputSlot(0)); Layer* const outputLayer = AddLayer<OutputLayer>(0, "output"); - outputLayer->SetComputeDevice(armnn::Compute::CpuRef); + outputLayer->SetBackendId(armnn::Compute::CpuRef); softmaxLayer->GetOutputSlot(0).Connect(outputLayer->GetInputSlot(0)); } @@ -537,17 +537,17 @@ BOOST_AUTO_TEST_CASE(CopyLayersAddedBetweenSameLayersHaveDifferentNames) armnn::Graph graph; armnn::InputLayer* const inputLayer = graph.AddLayer<armnn::InputLayer>(0, "input"); - inputLayer->SetComputeDevice(armnn::Compute::CpuRef); + inputLayer->SetBackendId(armnn::Compute::CpuRef); armnn::ViewsDescriptor splitterDesc(2); armnn::SplitterLayer* const splitterLayer = graph.AddLayer<armnn::SplitterLayer>(splitterDesc, "splitter"); - splitterLayer->SetComputeDevice(armnn::Compute::GpuAcc); + splitterLayer->SetBackendId(armnn::Compute::GpuAcc); armnn::AdditionLayer* const additionLayer = graph.AddLayer<armnn::AdditionLayer>("addition"); - additionLayer->SetComputeDevice(armnn::Compute::CpuRef); + additionLayer->SetBackendId(armnn::Compute::CpuRef); armnn::OutputLayer* const outputLayer = graph.AddLayer<armnn::OutputLayer>(0, "output"); - outputLayer->SetComputeDevice(armnn::Compute::CpuRef); + outputLayer->SetBackendId(armnn::Compute::CpuRef); inputLayer->GetOutputSlot(0).Connect(splitterLayer->GetInputSlot(0)); splitterLayer->GetOutputSlot(0).Connect(additionLayer->GetInputSlot(0)); @@ -568,10 +568,10 @@ BOOST_AUTO_TEST_CASE(DuplicateLayerNames) armnn::Graph graph; armnn::InputLayer* const inputLayer = graph.AddLayer<armnn::InputLayer>(0, "layer"); - inputLayer->SetComputeDevice(armnn::Compute::CpuRef); + inputLayer->SetBackendId(armnn::Compute::CpuRef); armnn::OutputLayer* const outputLayer = graph.AddLayer<armnn::OutputLayer>(0, "layer"); - outputLayer->SetComputeDevice(armnn::Compute::CpuRef); + outputLayer->SetBackendId(armnn::Compute::CpuRef); inputLayer->GetOutputSlot(0).Connect(outputLayer->GetInputSlot(0)); diff --git a/src/armnn/test/NetworkTests.cpp b/src/armnn/test/NetworkTests.cpp index f1319464fc..3b426fa8ab 100644 --- a/src/armnn/test/NetworkTests.cpp +++ b/src/armnn/test/NetworkTests.cpp @@ -510,7 +510,7 @@ BOOST_AUTO_TEST_CASE(OptimizeValidateCpuAccDeviceSupportLayerNoFallback) armnn::NeonWorkloadFactory fact; for (auto&& layer : static_cast<armnn::OptimizedNetwork*>(optNet.get())->GetGraph()) { - BOOST_CHECK_EQUAL(armnn::Compute::CpuAcc, layer->GetComputeDevice()); + BOOST_CHECK(layer->GetBackendId() == armnn::Compute::CpuAcc); BOOST_CHECK_NO_THROW( layer->CreateWorkload(static_cast<armnn::OptimizedNetwork*>(optNet.get())->GetGraph(), fact)); } @@ -541,7 +541,7 @@ BOOST_AUTO_TEST_CASE(OptimizeValidateGpuDeviceSupportLayerNoFallback) armnn::ClWorkloadFactory fact; for (auto&& layer : static_cast<armnn::OptimizedNetwork*>(optNet.get())->GetGraph()) { - BOOST_CHECK_EQUAL(armnn::Compute::GpuAcc, layer->GetComputeDevice()); + BOOST_CHECK(layer->GetBackendId() == armnn::Compute::GpuAcc); BOOST_CHECK_NO_THROW( layer->CreateWorkload(static_cast<armnn::OptimizedNetwork*>(optNet.get())->GetGraph(), fact)); } @@ -609,14 +609,14 @@ BOOST_AUTO_TEST_CASE(OptimizeValidateDeviceNonSupportLayerWithFallback) #if ARMCOMPUTENEON_ENABLED if (layer->GetType() == armnn::LayerType::Input || layer->GetType() == armnn::LayerType::Output) { - BOOST_CHECK_EQUAL(armnn::Compute::CpuAcc, layer->GetComputeDevice()); + BOOST_CHECK(layer->GetBackendId() == armnn::Compute::CpuAcc); } else if (layer->GetType() == armnn::LayerType::Normalization) { - BOOST_CHECK_EQUAL(armnn::Compute::CpuRef, layer->GetComputeDevice()); + BOOST_CHECK(layer->GetBackendId() == armnn::Compute::CpuRef); } #else - BOOST_CHECK_EQUAL(armnn::Compute::CpuRef, layer->GetComputeDevice()); + BOOST_CHECK(layer->GetBackendId() == armnn::Compute::CpuRef); #endif } } @@ -747,7 +747,7 @@ BOOST_AUTO_TEST_CASE(OptimizeValidateWorkloadsUndefinedComputeDeviceWithFallback armnn::RefWorkloadFactory fact; for (auto&& layer : static_cast<armnn::OptimizedNetwork*>(optNet.get())->GetGraph()) { - BOOST_CHECK_EQUAL(armnn::Compute::CpuRef, layer->GetComputeDevice()); + BOOST_CHECK(layer->GetBackendId() == armnn::Compute::CpuRef); BOOST_CHECK_NO_THROW( layer->CreateWorkload(static_cast<armnn::OptimizedNetwork*>(optNet.get())->GetGraph(), fact)); } @@ -791,23 +791,23 @@ BOOST_AUTO_TEST_CASE(OptimizeValidateWorkloadsDuplicateComputeDeviceWithFallback #if ARMCOMPUTENEON_ENABLED if (layer->GetType() == armnn::LayerType::Input || layer->GetType() == armnn::LayerType::Output) { - BOOST_CHECK_EQUAL(armnn::Compute::CpuAcc, layer->GetComputeDevice()); + BOOST_CHECK(layer->GetBackendId() == armnn::Compute::CpuAcc); } else if (layer->GetType() == armnn::LayerType::Normalization) { - BOOST_CHECK_EQUAL(armnn::Compute::CpuRef, layer->GetComputeDevice()); + BOOST_CHECK(layer->GetBackendId() == armnn::Compute::CpuRef); } #elif ARMCOMPUTECL_ENABLED if (layer->GetType() == armnn::LayerType::Input || layer->GetType() == armnn::LayerType::Output) { - BOOST_CHECK_EQUAL(armnn::Compute::GpuAcc, layer->GetComputeDevice()); + BOOST_CHECK(layer->GetBackendId() == armnn::Compute::GpuAcc); } else if (layer->GetType() == armnn::LayerType::Normalization) { - BOOST_CHECK_EQUAL(armnn::Compute::CpuRef, layer->GetComputeDevice()); + BOOST_CHECK(layer->GetBackendId() == armnn::Compute::CpuRef); } #else - BOOST_CHECK_EQUAL(armnn::Compute::CpuRef, layer->GetComputeDevice()); + BOOST_CHECK(layer->GetBackendId() == armnn::Compute::CpuRef); #endif } } @@ -841,7 +841,7 @@ BOOST_AUTO_TEST_CASE(OptimizeValidateWorkloadsCpuRefPermuteLayer) for (auto&& layer : static_cast<armnn::OptimizedNetwork*>(optNet.get())->GetGraph()) { - BOOST_CHECK_EQUAL(armnn::Compute::CpuRef, layer->GetComputeDevice()); + BOOST_CHECK(layer->GetBackendId() == armnn::Compute::CpuRef); } } @@ -874,7 +874,7 @@ BOOST_AUTO_TEST_CASE(OptimizeValidateWorkloadsCpuRefMeanLayer) for (auto&& layer : static_cast<armnn::OptimizedNetwork*>(optNet.get())->GetGraph()) { - BOOST_CHECK_EQUAL(armnn::Compute::CpuRef, layer->GetComputeDevice()); + BOOST_CHECK(layer->GetBackendId() == armnn::Compute::CpuRef); } } |