IVGCVSW-6527 Support the new memory API in loaded network

 * enable external memory management for neon and ref backends
 * change m_TensorMemoryVector to hold shared pointers
 * change input layer backend Id to match backend id of connected layer

Signed-off-by: Finn Williams <finn.williams@arm.com>
Change-Id: I2216a724028312eb101b290df3f224177826b1a0
diff --git a/include/armnn/IRuntime.hpp b/include/armnn/IRuntime.hpp
index 93f8b0f..bdfd9b2 100644
--- a/include/armnn/IRuntime.hpp
+++ b/include/armnn/IRuntime.hpp
@@ -43,7 +43,8 @@
           m_ProfilingEnabled(profilingEnabled),
           m_OutputNetworkDetailsMethod(ProfilingDetailsMethod::Undefined),
           m_InputSource(m_ImportEnabled ? MemorySource::Malloc : MemorySource::Undefined),
-          m_OutputSource(m_ExportEnabled ? MemorySource::Malloc : MemorySource::Undefined)
+          m_OutputSource(m_ExportEnabled ? MemorySource::Malloc : MemorySource::Undefined),
+          m_ExternalMemoryManagementEnabled(false)
     {}
 
     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Please use INetworkProperties constructor without numThreads argument", "22.02")
@@ -58,7 +59,8 @@
           m_ProfilingEnabled(profilingEnabled),
           m_OutputNetworkDetailsMethod(ProfilingDetailsMethod::Undefined),
           m_InputSource(inputSource),
-          m_OutputSource(outputSource)
+          m_OutputSource(outputSource),
+          m_ExternalMemoryManagementEnabled(false)
     {
         armnn::IgnoreUnused(numThreads);
     }
@@ -67,14 +69,16 @@
                        MemorySource inputSource,
                        MemorySource outputSource,
                        bool profilingEnabled = false,
-                       ProfilingDetailsMethod detailsMethod = ProfilingDetailsMethod::Undefined)
+                       ProfilingDetailsMethod detailsMethod = ProfilingDetailsMethod::Undefined,
+                       bool externalMemoryManagementEnabled = false)
         : m_ImportEnabled(inputSource != MemorySource::Undefined),
           m_ExportEnabled(outputSource != MemorySource::Undefined),
           m_AsyncEnabled(asyncEnabled),
           m_ProfilingEnabled(profilingEnabled),
           m_OutputNetworkDetailsMethod(detailsMethod),
           m_InputSource(inputSource),
-          m_OutputSource(outputSource)
+          m_OutputSource(outputSource),
+          m_ExternalMemoryManagementEnabled(externalMemoryManagementEnabled)
     {}
 
     /// Deprecated and will be removed in future release.
@@ -91,6 +95,8 @@
     const MemorySource m_InputSource;
     const MemorySource m_OutputSource;
 
+    const bool m_ExternalMemoryManagementEnabled;
+
     virtual ~INetworkProperties() {}
 };
 
diff --git a/include/armnn/backends/IMemoryOptimizerStrategy.hpp b/include/armnn/backends/IMemoryOptimizerStrategy.hpp
index ad5513f..bdb2f5b 100644
--- a/include/armnn/backends/IMemoryOptimizerStrategy.hpp
+++ b/include/armnn/backends/IMemoryOptimizerStrategy.hpp
@@ -19,8 +19,8 @@
              const unsigned int index)
     : m_StartOfLife(startOfLife), m_EndOfLife(endOfLife), m_MemSize(memSize), m_Offset(offset), m_Index(index) {}
 
-    const unsigned int m_StartOfLife; // Y start
-    const unsigned int m_EndOfLife; // Y end
+    const unsigned int m_StartOfLife; // Y start inclusive
+    const unsigned int m_EndOfLife; // Y end inclusive
 
     const size_t m_MemSize; // Offset + Memsize = X end
     size_t m_Offset; // X start