aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Eilers <jan.eilers@arm.com>2021-02-16 12:40:43 +0000
committerJan Eilers <jan.eilers@arm.com>2021-02-17 09:48:07 +0000
commitc5b84b5eaaf25beb7e385ad15f5f1539acd7e22d (patch)
tree535597e89edb3241b99a247625d5e9323830a3f0
parent689c96cc96e0f1181d971d8376b36e8d7088f9ed (diff)
downloadarmnn-c5b84b5eaaf25beb7e385ad15f5f1539acd7e22d.tar.gz
IVGCVSW-5581 ExecuteNetwork: Fix pass backends as comma separated list
* Allow passing multiple preferred backends as comma separated list e.g. "-c CpuAcc,CpuRef" or by repeating the option "-c CpuAcc -c CpuRef" Signed-off-by: Jan Eilers <jan.eilers@arm.com> Change-Id: I8e304d26c2890b99d5ec4c1af6c372458fa70051
-rw-r--r--tests/ExecuteNetwork/ExecuteNetworkProgramOptions.cpp23
1 files changed, 16 insertions, 7 deletions
diff --git a/tests/ExecuteNetwork/ExecuteNetworkProgramOptions.cpp b/tests/ExecuteNetwork/ExecuteNetworkProgramOptions.cpp
index 0eaf8da890..ba28dd0173 100644
--- a/tests/ExecuteNetwork/ExecuteNetworkProgramOptions.cpp
+++ b/tests/ExecuteNetwork/ExecuteNetworkProgramOptions.cpp
@@ -75,13 +75,20 @@ void RemoveDuplicateDevices(std::vector<armnn::BackendId>& computeDevices)
computeDevices.end());
}
-/// Takes a vector of backend strings and returns a vector of backendIDs. Removes duplicate entries.
-std::vector<armnn::BackendId> GetBackendIDs(const std::vector<std::string>& backendStrings)
+/// Takes a vector of backend strings and returns a vector of backendIDs.
+/// Removes duplicate entries.
+/// Can handle backend strings that contain multiple backends separated by comma e.g "CpuRef,CpuAcc"
+std::vector<armnn::BackendId> GetBackendIDs(const std::vector<std::string>& backendStringsVec)
{
std::vector<armnn::BackendId> backendIDs;
- for (const auto& b : backendStrings)
+ for (const auto& backendStrings : backendStringsVec)
{
- backendIDs.push_back(armnn::BackendId(b));
+ // Each backendStrings might contain multiple backends separated by comma e.g "CpuRef,CpuAcc"
+ std::vector<std::string> backendStringVec = ParseStringList(backendStrings, ",");
+ for (const auto& b : backendStringVec)
+ {
+ backendIDs.push_back(armnn::BackendId(b));
+ }
}
RemoveDuplicateDevices(backendIDs);
@@ -157,10 +164,12 @@ ProgramOptions::ProgramOptions() : m_CxxOptions{"ExecuteNetwork",
// separate function CheckRequiredOptions() for that.
m_CxxOptions.add_options("a) Required")
("c,compute",
- "Which device to run layers on by default. Possible choices: "
+ "Which device to run layers on by default. If a single device doesn't support all layers in the model "
+ "you can specify a second or third to fall back on. Possible choices: "
+ armnn::BackendRegistryInstance().GetBackendIdsAsString()
- + " NOTE: Compute devices need to be passed as a comma separated list without whitespaces "
- "e.g. CpuRef,CpuAcc",
+ + " NOTE: Multiple compute devices need to be passed as a comma separated list without whitespaces "
+ "e.g. GpuAcc,CpuAcc,CpuRef or by repeating the program option e.g. '-c Cpuacc -c CpuRef'. "
+ "Duplicates are ignored.",
cxxopts::value<std::vector<std::string>>())
("f,model-format",