diff options
author | Narumol Prangnawarat <narumol.prangnawarat@arm.com> | 2022-02-04 17:50:20 +0000 |
---|---|---|
committer | TeresaARM <teresa.charlinreyes@arm.com> | 2022-02-06 19:20:11 +0000 |
commit | ec5463d394453d268706ee6213b1c6a7619d4a5d (patch) | |
tree | 98d17988da24affbe57a324241d9407ae3345f83 /src/armnn/LoadedNetwork.cpp | |
parent | 23c26277086c78704a17f0dae86da947816320c0 (diff) | |
download | armnn-ec5463d394453d268706ee6213b1c6a7619d4a5d.tar.gz |
IVGCVSW-6747 Call Cl sync after EnqueueWorkload
* Add AfterEnqueueWorkload to IBackendContext
* Implement AfterEnqueueWorkload in ClBackendContext to call Cl sync
* Set allocated data on outputhandler only once
* Handle PreImportedHandles and CurImportedId the same way as Async
Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com>
Change-Id: I9f59d57e298d4a494569faec3078d66af799f77b
Diffstat (limited to 'src/armnn/LoadedNetwork.cpp')
-rw-r--r-- | src/armnn/LoadedNetwork.cpp | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/src/armnn/LoadedNetwork.cpp b/src/armnn/LoadedNetwork.cpp index 45891f7dc3..48a3040b23 100644 --- a/src/armnn/LoadedNetwork.cpp +++ b/src/armnn/LoadedNetwork.cpp @@ -699,7 +699,7 @@ Status LoadedNetwork::EnqueueWorkload(const InputTensors& inputTensors, for (const BindableLayer* inputLayer : graph.GetInputLayers()) { - if (preImportedInputIds.size() != m_PreImportedInputHandles.size()) + if (preImportedInputIds.size() > graph.GetNumInputs()) { throw InvalidArgumentException("Invalid number of preImportedInputIds"); } @@ -727,7 +727,7 @@ Status LoadedNetwork::EnqueueWorkload(const InputTensors& inputTensors, for (const BindableLayer* outputLayer : graph.GetOutputLayers()) { - if (preImportedOutputIds.size() != m_PreImportedOutputHandles.size()) + if (preImportedOutputIds.size() > graph.GetNumOutputs()) { throw InvalidArgumentException("Invalid number of preImportedOutputIds"); } @@ -770,11 +770,6 @@ Status LoadedNetwork::EnqueueWorkload(const InputTensors& inputTensors, } } } - // Clear m_PreImportedInputHandles and m_PreImportedOutputHandles - m_PreImportedInputHandles.clear(); - m_PreImportedOutputHandles.clear(); - m_CurImportedInputId = 0; - m_CurImportedOutputId = 0; std::unique_ptr<TimelineUtilityMethods> timelineUtils = TimelineUtilityMethods::GetTimelineUtils(m_ProfilingService); @@ -1271,6 +1266,16 @@ std::vector<ImportedInputId> LoadedNetwork::ImportInputs(const InputTensors& inp { // Cannot import, use allocated data handler.UseAllocatedData(); + // Ensure that the workload get correct tensor + try + { + m_WorkloadQueue[m_InputWorkloadSlotPairs[layerBindingId].first].get()->ReplaceInputTensorHandle( + handler.GetData(), m_InputWorkloadSlotPairs[layerBindingId].second); + } + catch(armnn::UnimplementedException& e) + { + IgnoreUnused(e); + } } } @@ -1437,6 +1442,17 @@ std::vector<ImportedOutputId> LoadedNetwork::ImportOutputs(const OutputTensors& { // Cannot import, use allocated memory outputHandler.UseAllocatedData(); + // Ensure that the workload get correct tensor + try + { + m_WorkloadQueue[m_OutputWorkloadSlotPairs[layerBindingId].first].get()-> + ReplaceOutputTensorHandle(outputHandler.GetData(), + m_OutputWorkloadSlotPairs[layerBindingId].second); + } + catch(armnn::UnimplementedException& e) + { + IgnoreUnused(e); + } } } return importedOutputs; |