From ce3e84a8d449cbf31cee57e30f0eef6a96c0ce94 Mon Sep 17 00:00:00 2001 From: telsoa01 Date: Fri, 31 Aug 2018 09:31:35 +0100 Subject: Release 18.08 --- DriverOptions.cpp | 159 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 DriverOptions.cpp (limited to 'DriverOptions.cpp') diff --git a/DriverOptions.cpp b/DriverOptions.cpp new file mode 100644 index 00000000..3d397e37 --- /dev/null +++ b/DriverOptions.cpp @@ -0,0 +1,159 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// See LICENSE file in the project root for full license information. +// + +#define LOG_TAG "ArmnnDriver" + +#include "DriverOptions.hpp" +#include "Utils.hpp" + +#include +#include "SystemPropertiesUtils.hpp" + +#include + +#include +#include + +#include +#include +#include +#include + +using namespace android; +using namespace std; + +namespace armnn_driver +{ + +DriverOptions::DriverOptions(armnn::Compute computeDevice) + : m_ComputeDevice(computeDevice) + , m_VerboseLogging(false) + , m_ClTunedParametersMode(armnn::IGpuAccTunedParameters::Mode::UseTunedParameters) + , m_EnableGpuProfiling(false) + , m_fp16Enabled(false) +{ +} + +DriverOptions::DriverOptions(int argc, char** argv) + : m_ComputeDevice(armnn::Compute::GpuAcc) + , 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") + + ("verbose-logging,v", + po::bool_switch(&m_VerboseLogging), + "Turns verbose logging on") + + ("request-inputs-and-outputs-dump-dir,d", + po::value(&m_RequestInputsAndOutputsDumpDir)->default_value(""), + "If non-empty, the directory where request inputs and outputs should be dumped") + + ("unsupported-operations,u", + po::value(&unsupportedOperationsAsString)->default_value(""), + "If non-empty, a comma-separated list of operation indices which the driver will forcibly " + "consider unsupported") + + ("cl-tuned-parameters-file,t", + po::value(&m_ClTunedParametersFile)->default_value(""), + "If non-empty, the given file will be used to load/save CL tuned parameters. " + "See also --cl-tuned-parameters-mode") + + ("cl-tuned-parameters-mode,m", + po::value(&clTunedParametersModeAsString)->default_value("UseTunedParameters"), + "If 'UseTunedParameters' (the default), will read CL tuned parameters from the file specified by " + "--cl-tuned-parameters-file. " + "If 'UpdateTunedParameters', will also find the optimum parameters when preparing new networks and update " + "the file accordingly.") + + ("gpu-profiling,p", + po::bool_switch(&m_EnableGpuProfiling), + "Turns GPU profiling on"); + + ("fp16-enabled,f", + po::bool_switch(&m_fp16Enabled), + "Enables support for relaxed computation from Float32 to Float16"); + + po::variables_map variablesMap; + try + { + po::store(po::parse_command_line(argc, argv, optionsDesc), variablesMap); + po::notify(variablesMap); + } + catch (const po::error& e) + { + 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") + { + m_ComputeDevice = armnn::Compute::CpuAcc; + } + else + { + ALOGW("Requested unknown compute device %s. Defaulting to compute id %s", + computeDeviceAsString.c_str(), GetComputeDeviceAsCString(m_ComputeDevice)); + } + + if (!unsupportedOperationsAsString.empty()) + { + std::istringstream argStream(unsupportedOperationsAsString); + + std::string s; + while (!argStream.eof()) + { + std::getline(argStream, s, ','); + try + { + unsigned int operationIdx = std::stoi(s); + m_ForcedUnsupportedOperations.insert(operationIdx); + } + catch (const std::invalid_argument&) + { + ALOGW("Ignoring invalid integer argument in -u/--unsupported-operations value: %s", s.c_str()); + } + } + } + + if (!m_ClTunedParametersFile.empty()) + { + // The mode is only relevant if the file path has been provided + if (clTunedParametersModeAsString == "UseTunedParameters") + { + m_ClTunedParametersMode = armnn::IGpuAccTunedParameters::Mode::UseTunedParameters; + } + else if (clTunedParametersModeAsString == "UpdateTunedParameters") + { + m_ClTunedParametersMode = armnn::IGpuAccTunedParameters::Mode::UpdateTunedParameters; + } + else + { + ALOGW("Requested unknown cl-tuned-parameters-mode '%s'. Defaulting to UseTunedParameters", + clTunedParametersModeAsString.c_str()); + } + } +} + +} // namespace armnn_driver -- cgit v1.2.1