IVGCVSW-2980 Build ArmNN with the latest version of the driver stack library
authorMatteo Martincigh <matteo.martincigh@arm.com>
Wed, 17 Apr 2019 14:37:30 +0000 (15:37 +0100)
committerMatteo Martincigh <matteo.martincigh@arm.com>
Thu, 18 Apr 2019 07:50:28 +0000 (08:50 +0100)
 * Changed the pre-compiled object held by the pre-compiled layer into
   a unique pointer, so that now the layer has the ownership of it
 * Changed the pre-compiled object held by the descriptor and the workload
   into a naked pointer, to leave the ownership to the layer

Change-Id: I4a582e45ca0aa3978e8e40b786c743a6eddce852
Signed-off-by: Matteo Martincigh <matteo.martincigh@arm.com>
src/armnn/ISubGraphConverter.hpp
src/armnn/layers/PreCompiledLayer.cpp
src/armnn/layers/PreCompiledLayer.hpp
src/backends/backendsCommon/WorkloadData.hpp

index 1d40c67..3a6866e 100644 (file)
@@ -6,17 +6,21 @@
 #pragma once
 
 #include <memory>
+#include <vector>
+#include <functional>
 
 namespace armnn
 {
 
+using CompiledBlobDeleter = std::function<void(const void*)>;
+using CompiledBlobPtr = std::unique_ptr<void, CompiledBlobDeleter>;
+
 class ISubGraphConverter
 {
 public:
-    virtual ~ISubGraphConverter() {};
+    virtual ~ISubGraphConverter() {}
 
-    virtual std::shared_ptr<void> GetOutput() = 0;
+    virtual std::vector<CompiledBlobPtr> GetOutput() = 0;
 };
 
-}
-
+} // namespace armnn
index 1106421..29b3514 100644 (file)
@@ -16,7 +16,6 @@ namespace armnn
 
 PreCompiledLayer::PreCompiledLayer(const PreCompiledDescriptor& param, const char* name)
     : LayerWithParameters(param.m_NumInputSlots, param.m_NumOutputSlots, LayerType::PreCompiled, param, name)
-    , m_PreCompiledObject(nullptr)
 {}
 
 PreCompiledLayer::~PreCompiledLayer()
@@ -25,7 +24,7 @@ PreCompiledLayer::~PreCompiledLayer()
 PreCompiledLayer* PreCompiledLayer::Clone(Graph& graph) const
 {
     PreCompiledLayer* clone = CloneBase<PreCompiledLayer>(graph, m_Param, GetName());
-    clone->m_PreCompiledObject = this->m_PreCompiledObject;
+    clone->m_PreCompiledObject.reset(const_cast<PreCompiledLayer*>(this)->m_PreCompiledObject.release());
     return clone;
 }
 
@@ -33,7 +32,7 @@ std::unique_ptr<IWorkload> PreCompiledLayer::CreateWorkload(const armnn::Graph&
                                                             const armnn::IWorkloadFactory& factory) const
 {
     PreCompiledQueueDescriptor descriptor;
-    descriptor.m_PreCompiledObject = m_PreCompiledObject;
+    descriptor.m_PreCompiledObject = m_PreCompiledObject.get();
     return factory.CreatePreCompiled(descriptor, PrepInfoAndDesc(descriptor, graph));
 }
 
@@ -43,14 +42,9 @@ void PreCompiledLayer::ValidateTensorShapesFromInputs()
     // we do not need to validate its input shapes
 }
 
-std::shared_ptr<void> PreCompiledLayer::GetPreCompiledObject() const
+void PreCompiledLayer::SetPreCompiledObject(PreCompiledObjectPtr preCompiledObject)
 {
-    return m_PreCompiledObject;
-}
-
-void PreCompiledLayer::SetPreCompiledObject(const std::shared_ptr<void>& preCompiledObject)
-{
-    m_PreCompiledObject = preCompiledObject;
+    m_PreCompiledObject = std::move(preCompiledObject);
 }
 
 void PreCompiledLayer::Accept(ILayerVisitor& visitor) const
index 854a78c..ec5a9d6 100644 (file)
 #include <armnn/Descriptors.hpp>
 
 #include <memory>
+#include <functional>
 
 namespace armnn
 {
 
+using PreCompiledObjectDeleter = std::function<void(const void*)>;
+using PreCompiledObjectPtr = std::unique_ptr<void, PreCompiledObjectDeleter>;
+
 class PreCompiledLayer : public LayerWithParameters<PreCompiledDescriptor>
 {
 public:
@@ -28,9 +32,7 @@ public:
 
     void ValidateTensorShapesFromInputs() override;
 
-    std::shared_ptr<void> GetPreCompiledObject() const;
-
-    void SetPreCompiledObject(const std::shared_ptr<void>& preCompiledObject);
+    void SetPreCompiledObject(PreCompiledObjectPtr preCompiledObject);
 
     void Accept(ILayerVisitor& visitor) const override;
 
@@ -38,7 +40,7 @@ private:
     PreCompiledLayer(const PreCompiledLayer& other) = delete;
     PreCompiledLayer& operator=(const PreCompiledLayer& other) = delete;
 
-    std::shared_ptr<void> m_PreCompiledObject;
+    PreCompiledObjectPtr m_PreCompiledObject;
 };
 
 } // namespace armnn
index 1b5f86d..689c6d2 100644 (file)
@@ -411,7 +411,7 @@ struct PreCompiledQueueDescriptor : QueueDescriptorWithParameters<PreCompiledDes
     {
     }
 
-    std::shared_ptr<void> m_PreCompiledObject;
+    void* m_PreCompiledObject;
 
     void Validate(const WorkloadInfo& workloadInfo) const;
 };