From c5b84b5eaaf25beb7e385ad15f5f1539acd7e22d Mon Sep 17 00:00:00 2001 From: Jan Eilers Date: Tue, 16 Feb 2021 12:40:43 +0000 Subject: 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 Change-Id: I8e304d26c2890b99d5ec4c1af6c372458fa70051 --- .../ExecuteNetworkProgramOptions.cpp | 23 +++++++++++++++------- 1 file 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& computeDevices) computeDevices.end()); } -/// Takes a vector of backend strings and returns a vector of backendIDs. Removes duplicate entries. -std::vector GetBackendIDs(const std::vector& 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 GetBackendIDs(const std::vector& backendStringsVec) { std::vector 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 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>()) ("f,model-format", -- cgit v1.2.1