IVGCVSW-5685 Add CpuAcc specific configuration option numberOfThreads

 * Added ability to set number of threads used in CpuAcc backend
 * Enabled number-of-threads option in ExecuteNetwork
 * Added TfLiteDelegate ModelOptions test
 * Added unsigned int type to BackendOptions.hpp

Signed-off-by: Matthew Sloyan <matthew.sloyan@arm.com>
Change-Id: Ia576d4f45cbe5df3654bc730bb5ebd5181d82b5a
diff --git a/tests/ExecuteNetwork/ExecuteNetwork.cpp b/tests/ExecuteNetwork/ExecuteNetwork.cpp
index 5df5dfb..c19f519 100644
--- a/tests/ExecuteNetwork/ExecuteNetwork.cpp
+++ b/tests/ExecuteNetwork/ExecuteNetwork.cpp
@@ -308,6 +308,7 @@
         inferenceModelParams.m_EnableFastMath                 = params.m_EnableFastMath;
         inferenceModelParams.m_SaveCachedNetwork              = params.m_SaveCachedNetwork;
         inferenceModelParams.m_CachedNetworkFilePath          = params.m_CachedNetworkFilePath;
+        inferenceModelParams.m_NumberOfThreads                = params.m_NumberOfThreads;
 
         for(const std::string& inputName: params.m_InputNames)
         {
diff --git a/tests/ExecuteNetwork/ExecuteNetworkParams.hpp b/tests/ExecuteNetwork/ExecuteNetworkParams.hpp
index 56d3290..830270a 100644
--- a/tests/ExecuteNetwork/ExecuteNetworkParams.hpp
+++ b/tests/ExecuteNetwork/ExecuteNetworkParams.hpp
@@ -34,6 +34,7 @@
     size_t                        m_Iterations;
     std::string                   m_ModelFormat;
     std::string                   m_ModelPath;
+    unsigned int                  m_NumberOfThreads;
     std::vector<std::string>      m_OutputNames;
     std::vector<std::string>      m_OutputTensorFiles;
     std::vector<std::string>      m_OutputTypes;
diff --git a/tests/ExecuteNetwork/ExecuteNetworkProgramOptions.cpp b/tests/ExecuteNetwork/ExecuteNetworkProgramOptions.cpp
index a080e57..73da1f1 100644
--- a/tests/ExecuteNetwork/ExecuteNetworkProgramOptions.cpp
+++ b/tests/ExecuteNetwork/ExecuteNetworkProgramOptions.cpp
@@ -276,6 +276,12 @@
                  "performance improvements but may result in reduced or different precision.",
                  cxxopts::value<bool>(m_ExNetParams.m_EnableFastMath)->default_value("false")->implicit_value("true"))
 
+                ("number-of-threads",
+                 "Assign the number of threads used by the CpuAcc backend. "
+                 "Input value must be between 1 and 64. "
+                 "Default is set to 0 (Backend will decide number of threads to use).",
+                 cxxopts::value<unsigned int>(m_ExNetParams.m_NumberOfThreads)->default_value("0"))
+
                 ("save-cached-network",
                  "Enables saving of the cached network to a file given with the cached-network-filepath option. "
                  "See also --cached-network-filepath",
diff --git a/tests/InferenceModel.hpp b/tests/InferenceModel.hpp
index 936d0bf..d20bb22 100644
--- a/tests/InferenceModel.hpp
+++ b/tests/InferenceModel.hpp
@@ -99,6 +99,7 @@
     bool                            m_EnableFastMath;
     bool                            m_SaveCachedNetwork;
     std::string                     m_CachedNetworkFilePath;
+    unsigned int                    m_NumberOfThreads;
 
     Params()
         : m_ComputeDevices{}
@@ -113,6 +114,7 @@
         , m_EnableFastMath(false)
         , m_SaveCachedNetwork(false)
         , m_CachedNetworkFilePath("")
+        , m_NumberOfThreads(0)
     {}
 };
 
@@ -436,7 +438,8 @@
             });
             armnn::BackendOptions cpuAcc("CpuAcc",
             {
-                { "FastMathEnabled", params.m_EnableFastMath }
+                { "FastMathEnabled", params.m_EnableFastMath },
+                { "NumberOfThreads", params.m_NumberOfThreads }
             });
             options.m_ModelOptions.push_back(gpuAcc);
             options.m_ModelOptions.push_back(cpuAcc);