aboutsummaryrefslogtreecommitdiff
path: root/src/armnn/LoadedNetwork.hpp
diff options
context:
space:
mode:
authorFinn Williams <finwil01@e127804.cambridge.arm.com>2021-10-02 15:06:39 +0100
committerFinn Williams <finwil01@e127804.cambridge.arm.com>2021-10-08 15:42:14 +0100
commit8636bc705cc33fd869f64ebf24b14836d5a40b29 (patch)
treee546319af87596d053c75d65eedd1efb1f946228 /src/armnn/LoadedNetwork.hpp
parent521032fd424cf86681eb125afbf5eaee47d8c585 (diff)
downloadarmnn-8636bc705cc33fd869f64ebf24b14836d5a40b29.tar.gz
IVGCVSW-6313 Support pre-importing outputs
* Add ClearImportedInputs/Outputs function to IRuntime * Add UnImport function to ITensorHandle * Remove mutex from IWorkingMemHandle Change-Id: I34c9b6e1618755e10f3b4597afa1d9a9ea97e5fe Signed-off-by: Finn Williams <finwil01@e127804.cambridge.arm.com>
Diffstat (limited to 'src/armnn/LoadedNetwork.hpp')
-rw-r--r--src/armnn/LoadedNetwork.hpp35
1 files changed, 29 insertions, 6 deletions
diff --git a/src/armnn/LoadedNetwork.hpp b/src/armnn/LoadedNetwork.hpp
index e713be215a..99dac556ae 100644
--- a/src/armnn/LoadedNetwork.hpp
+++ b/src/armnn/LoadedNetwork.hpp
@@ -50,6 +50,10 @@ public:
TensorInfo GetOutputTensorInfo(LayerBindingId layerId) const;
std::vector<ImportedInputId> ImportInputs(const InputTensors& inputTensors);
+ std::vector<ImportedOutputId> ImportOutputs(const OutputTensors& outputTensors);
+
+ void ClearImportedInputs(const std::vector<ImportedInputId> inputIds);
+ void ClearImportedOutputs(const std::vector<ImportedOutputId> outputIds);
/// Single thread execution of the loaded network
Status EnqueueWorkload(const InputTensors& inputTensors, const OutputTensors& outputTensors);
@@ -58,7 +62,8 @@ public:
Status Execute(const InputTensors& inputTensors,
const OutputTensors& outputTensors,
IWorkingMemHandle& workingMemHandle,
- std::vector<ImportedInputId> preImportedInputs = {});
+ std::vector<ImportedInputId> preImportedInputs = {},
+ std::vector<ImportedOutputId> preImportedOutputs = {});
static std::unique_ptr<LoadedNetwork> MakeLoadedNetwork(std::unique_ptr<IOptimizedNetwork> net,
std::string& errorMessage,
@@ -105,13 +110,16 @@ private:
void EnqueueInput(const ConstTensor& inputTensor, ITensorHandle* inputTensorHandle);
- void EnqueueOutput(const BindableLayer& layer, const Tensor& outputTensor, WorkingMemHandle& handle);
+ void ImportOutputTensor(const Tensor& outputTensor, ITensorHandle* outputTensorHandle);
bool Execute(std::unique_ptr<profiling::TimelineUtilityMethods>& timelineUtils,
profiling::ProfilingGuid inferenceGuid);
const IWorkloadFactory& GetWorkloadFactory(const Layer& layer) const;
+ inline LayerBindingId ValidateImportedInputID(ImportedInputId id);
+ inline LayerBindingId ValidateImportedOutputID(ImportedOutputId id);
+
using BackendPtrMap = std::unordered_map<BackendId, IBackendInternalUniquePtr>;
BackendPtrMap m_Backends;
@@ -134,21 +142,36 @@ private:
profiling::ProfilingService& m_ProfilingService;
- struct ImportedInputHandlePin
+ struct ImportedTensorHandlePin
{
- ImportedInputHandlePin(LayerBindingId layerBindingId,
- std::unique_ptr<ITensorHandle> tensorHandle)
+ ImportedTensorHandlePin()
+ {}
+
+ ImportedTensorHandlePin(LayerBindingId layerBindingId,
+ std::unique_ptr<ITensorHandle> tensorHandle)
: m_LayerBindingId(layerBindingId)
, m_TensorHandle(std::move(tensorHandle))
{}
+ ImportedTensorHandlePin(ImportedTensorHandlePin&&) = default;
+
+ ~ImportedTensorHandlePin()
+ {
+ if (m_TensorHandle)
+ {
+ m_TensorHandle->Unimport();
+ }
+ }
+
LayerBindingId m_LayerBindingId;
std::unique_ptr<ITensorHandle> m_TensorHandle;
};
- std::vector<ImportedInputHandlePin> m_PreImportedInputHandles;
+ std::vector<ImportedTensorHandlePin> m_PreImportedInputHandles;
+ std::vector<ImportedTensorHandlePin> m_PreImportedOutputHandles;
ImportedInputId m_CurImportedInputId = 0;
+ ImportedInputId m_CurImportedOutputId = 0;
};
}