diff options
author | Nattapat Chaimanowong <nattapat.chaimanowong@arm.com> | 2019-04-04 13:33:10 +0100 |
---|---|---|
committer | Nattapat Chaimanowong <nattapat.chaimanowong@arm.com> | 2019-04-04 13:33:10 +0100 |
commit | d5fd9767d426ca465eb660be062eecce51ad1097 (patch) | |
tree | b2a2b684c9072dda7b52b40e579a5b0c4aae3c21 /DriverOptions.cpp | |
parent | 16196e267833178dae62926ff090c50ec6813ad4 (diff) | |
download | android-nn-driver-d5fd9767d426ca465eb660be062eecce51ad1097.tar.gz |
IVGCVSW-2886 Support multiple backends in Android driver
Change-Id: I4abe1f750801911570b6dc65c187b828c5929b5f
Signed-off-by: Nattapat Chaimanowong <nattapat.chaimanowong@arm.com>
Diffstat (limited to 'DriverOptions.cpp')
-rw-r--r-- | DriverOptions.cpp | 51 |
1 files changed, 32 insertions, 19 deletions
diff --git a/DriverOptions.cpp b/DriverOptions.cpp index 10919a7b..cd4b6bfc 100644 --- a/DriverOptions.cpp +++ b/DriverOptions.cpp @@ -16,6 +16,7 @@ #include <boost/algorithm/string/predicate.hpp> #include <boost/program_options.hpp> +#include <algorithm> #include <cassert> #include <functional> #include <string> @@ -28,7 +29,7 @@ namespace armnn_driver { DriverOptions::DriverOptions(armnn::Compute computeDevice, bool fp16Enabled) - : m_ComputeDevice(computeDevice) + : m_Backends({computeDevice}) , m_VerboseLogging(false) , m_ClTunedParametersMode(armnn::IGpuAccTunedParameters::Mode::UseTunedParameters) , m_EnableGpuProfiling(false) @@ -36,24 +37,32 @@ DriverOptions::DriverOptions(armnn::Compute computeDevice, bool fp16Enabled) { } -DriverOptions::DriverOptions(int argc, char** argv) - : m_ComputeDevice(armnn::Compute::GpuAcc) +DriverOptions::DriverOptions(const std::vector<armnn::BackendId>& backends, bool fp16Enabled) + : m_Backends(backends) , m_VerboseLogging(false) , m_ClTunedParametersMode(armnn::IGpuAccTunedParameters::Mode::UseTunedParameters) , m_EnableGpuProfiling(false) + , m_fp16Enabled(fp16Enabled) +{ +} + +DriverOptions::DriverOptions(int argc, char** argv) + : m_VerboseLogging(false) + , m_ClTunedParametersMode(armnn::IGpuAccTunedParameters::Mode::UseTunedParameters) + , m_EnableGpuProfiling(false) , m_fp16Enabled(false) { namespace po = boost::program_options; - std::string computeDeviceAsString; std::string unsupportedOperationsAsString; std::string clTunedParametersModeAsString; po::options_description optionsDesc("Options"); optionsDesc.add_options() ("compute,c", - po::value<std::string>(&computeDeviceAsString)->default_value("GpuAcc"), - "Which device to run layers on by default. Possible values are: CpuRef, CpuAcc, GpuAcc") + po::value<std::vector<std::string>>()-> + multitoken()->default_value(std::vector<std::string>{"GpuAcc"}, "{GpuAcc}"), + "Which backend to run layers on. Possible values are: CpuRef, CpuAcc, GpuAcc") ("verbose-logging,v", po::bool_switch(&m_VerboseLogging), @@ -99,22 +108,26 @@ DriverOptions::DriverOptions(int argc, char** argv) ALOGW("An error occurred attempting to parse program options: %s", e.what()); } - if (computeDeviceAsString == "CpuRef") - { - m_ComputeDevice = armnn::Compute::CpuRef; - } - else if (computeDeviceAsString == "GpuAcc") - { - m_ComputeDevice = armnn::Compute::GpuAcc; - } - else if (computeDeviceAsString == "CpuAcc") + const std::vector<std::string> backends = variablesMap["compute"].as<std::vector<std::string>>(); + const std::vector<string> supportedDevices({"CpuRef", "CpuAcc", "GpuAcc"}); + m_Backends.reserve(backends.size()); + + for (auto&& backend : backends) { - m_ComputeDevice = armnn::Compute::CpuAcc; + if (std::find(supportedDevices.cbegin(), supportedDevices.cend(), backend) == supportedDevices.cend()) + { + ALOGW("Requested unknown backend %s", backend.c_str()); + } + else + { + m_Backends.emplace_back(backend); + } } - else + + if (m_Backends.empty()) { - ALOGW("Requested unknown compute device %s. Defaulting to compute id %s", - computeDeviceAsString.c_str(), GetComputeDeviceAsCString(m_ComputeDevice)); + m_Backends.emplace_back("GpuAcc"); + ALOGW("No known backend specified. Defaulting to: GpuAcc"); } if (!unsupportedOperationsAsString.empty()) |