diff options
author | Finn Williams <finwil01@e127804.cambridge.arm.com> | 2021-10-02 15:06:39 +0100 |
---|---|---|
committer | Finn Williams <finwil01@e127804.cambridge.arm.com> | 2021-10-08 15:42:14 +0100 |
commit | 8636bc705cc33fd869f64ebf24b14836d5a40b29 (patch) | |
tree | e546319af87596d053c75d65eedd1efb1f946228 /src/armnn/LoadedNetwork.hpp | |
parent | 521032fd424cf86681eb125afbf5eaee47d8c585 (diff) | |
download | armnn-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.hpp | 35 |
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; }; } |