From d5fd9767d426ca465eb660be062eecce51ad1097 Mon Sep 17 00:00:00 2001 From: Nattapat Chaimanowong Date: Thu, 4 Apr 2019 13:33:10 +0100 Subject: IVGCVSW-2886 Support multiple backends in Android driver Change-Id: I4abe1f750801911570b6dc65c187b828c5929b5f Signed-off-by: Nattapat Chaimanowong --- DriverOptions.cpp | 51 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 19 deletions(-) (limited to 'DriverOptions.cpp') diff --git a/DriverOptions.cpp b/DriverOptions.cpp index 10919a7b..cd4b6bfc 100644 --- a/DriverOptions.cpp +++ b/DriverOptions.cpp @@ -16,6 +16,7 @@ #include #include +#include #include #include #include @@ -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& 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(&computeDeviceAsString)->default_value("GpuAcc"), - "Which device to run layers on by default. Possible values are: CpuRef, CpuAcc, GpuAcc") + po::value>()-> + multitoken()->default_value(std::vector{"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 backends = variablesMap["compute"].as>(); + const std::vector 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()) -- cgit v1.2.1