From 8636bc705cc33fd869f64ebf24b14836d5a40b29 Mon Sep 17 00:00:00 2001 From: Finn Williams Date: Sat, 2 Oct 2021 15:06:39 +0100 Subject: 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 --- src/armnn/LoadedNetwork.hpp | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) (limited to 'src/armnn/LoadedNetwork.hpp') 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 ImportInputs(const InputTensors& inputTensors); + std::vector ImportOutputs(const OutputTensors& outputTensors); + + void ClearImportedInputs(const std::vector inputIds); + void ClearImportedOutputs(const std::vector 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 preImportedInputs = {}); + std::vector preImportedInputs = {}, + std::vector preImportedOutputs = {}); static std::unique_ptr MakeLoadedNetwork(std::unique_ptr 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& 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; BackendPtrMap m_Backends; @@ -134,21 +142,36 @@ private: profiling::ProfilingService& m_ProfilingService; - struct ImportedInputHandlePin + struct ImportedTensorHandlePin { - ImportedInputHandlePin(LayerBindingId layerBindingId, - std::unique_ptr tensorHandle) + ImportedTensorHandlePin() + {} + + ImportedTensorHandlePin(LayerBindingId layerBindingId, + std::unique_ptr 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 m_TensorHandle; }; - std::vector m_PreImportedInputHandles; + std::vector m_PreImportedInputHandles; + std::vector m_PreImportedOutputHandles; ImportedInputId m_CurImportedInputId = 0; + ImportedInputId m_CurImportedOutputId = 0; }; } -- cgit v1.2.1