IVGCVSW-6679 Add input and output workload slot pairs to LoadedNetwork
* Added vectors to store the indexes of workload queues which contain inputs or outputs and their corresponding input / output slots
Signed-off-by: David Monahan <David.Monahan@arm.com>
Change-Id: Ide626726718216c7a778cce583da75af3ca2dc9a
diff --git a/src/armnn/LoadedNetwork.cpp b/src/armnn/LoadedNetwork.cpp
index 965deee..1d1aae5 100644
--- a/src/armnn/LoadedNetwork.cpp
+++ b/src/armnn/LoadedNetwork.cpp
@@ -312,6 +312,39 @@
}
else
{
+ if (layer->GetNumInputSlots() >= 1)
+ {
+ unsigned int slotIndex = 0;
+ for (auto& inputSlot : layer->GetInputSlots())
+ {
+ if (inputSlot.GetOwningLayer().GetType() == LayerType::Input)
+ {
+ m_InputWorkloadSlotPairs.push_back(
+ std::make_pair(m_WorkloadQueue.size(), slotIndex));
+ }
+ ++slotIndex;
+ }
+ }
+
+ if (layer->GetNumOutputSlots() >= 1)
+ {
+ unsigned int slotIndex = 0;
+ for (auto& outputSlot : layer->GetOutputSlots())
+ {
+ for (unsigned int i = 0; i < outputSlot.GetNumConnections(); i++)
+ {
+ // If any of the connections on this outputSlot are connected to an Output then
+ // Add its index within layer->GetOutputSlots() to m_OutputWorkloadSlotPairs
+ if (outputSlot.GetConnection(i)->GetOwningLayer().GetType() == LayerType::Output)
+ {
+ m_OutputWorkloadSlotPairs.push_back(
+ std::make_pair(m_WorkloadQueue.size(), slotIndex));
+ continue;
+ }
+ }
+ ++slotIndex;
+ }
+ }
m_WorkloadQueue.push_back(std::move(workload));
}
diff --git a/src/armnn/LoadedNetwork.hpp b/src/armnn/LoadedNetwork.hpp
index 53c35d6..9de6307 100644
--- a/src/armnn/LoadedNetwork.hpp
+++ b/src/armnn/LoadedNetwork.hpp
@@ -197,6 +197,11 @@
std::unique_ptr<MemoryManager> m_ExternalMemoryManager;
std::unordered_map<BackendId, bool> m_SupportsExternallyManagedMemory;
+
+ // A set of vectors to record the workload queue indexes and their corresponding Input/Output Slot indexes
+ // which are connected to Inputs and Outputs for the network.
+ std::vector<std::pair<unsigned int, unsigned int>> m_InputWorkloadSlotPairs;
+ std::vector<std::pair<unsigned int, unsigned int>> m_OutputWorkloadSlotPairs;
};
}