From 7ed56dd5808d483ab8e294f36e3ecf8e8ddd84f1 Mon Sep 17 00:00:00 2001 From: Mike Kelly Date: Wed, 30 Sep 2020 20:22:56 +0100 Subject: MLCE-233 Added ability to enable fast_math through the NNAPI driver * Added -a command line option to enable fast_math on Neon/CL when launching the NNAPI driver * The invocation will look something like: /vendor/bin/hw/android.hardware.neuralnetworks@1.3-service-armnn -v -c GpuAcc -n arm-armnn -a * Enabling fast_math may cause an increase in VTS or CTS test failures due to a change in precision Signed-off-by: Mike Kelly Change-Id: Ifd8931f95efd65d3ae3aca9d9d61bd381e4e24a5 --- 1.2/ArmnnDriverImpl.cpp | 11 +++++++++++ 1.3/ArmnnDriverImpl.cpp | 11 +++++++++++ ArmnnDriverImpl.cpp | 12 +++++++++++- DriverOptions.cpp | 7 +++++++ DriverOptions.hpp | 2 ++ 5 files changed, 42 insertions(+), 1 deletion(-) diff --git a/1.2/ArmnnDriverImpl.cpp b/1.2/ArmnnDriverImpl.cpp index 4571fe0e..6d713e06 100644 --- a/1.2/ArmnnDriverImpl.cpp +++ b/1.2/ArmnnDriverImpl.cpp @@ -130,6 +130,17 @@ Return ArmnnDriverImpl::prepareArmnnModel_1_2( armnn::OptimizerOptions OptOptions; OptOptions.m_ReduceFp32ToFp16 = float32ToFloat16; + armnn::BackendOptions gpuAcc("GpuAcc", + { + { "FastMathEnabled", options.IsFastMathEnabled() } + }); + armnn::BackendOptions cpuAcc("CpuAcc", + { + { "FastMathEnabled", options.IsFastMathEnabled() } + }); + OptOptions.m_ModelOptions.push_back(gpuAcc); + OptOptions.m_ModelOptions.push_back(cpuAcc); + std::vector errMessages; try { diff --git a/1.3/ArmnnDriverImpl.cpp b/1.3/ArmnnDriverImpl.cpp index 6168c9d0..b2524d3b 100644 --- a/1.3/ArmnnDriverImpl.cpp +++ b/1.3/ArmnnDriverImpl.cpp @@ -141,6 +141,17 @@ Return ArmnnDriverImpl::prepareArmnnModel_1_3( armnn::OptimizerOptions OptOptions; OptOptions.m_ReduceFp32ToFp16 = float32ToFloat16; + armnn::BackendOptions gpuAcc("GpuAcc", + { + { "FastMathEnabled", options.IsFastMathEnabled() } + }); + armnn::BackendOptions cpuAcc("CpuAcc", + { + { "FastMathEnabled", options.IsFastMathEnabled() } + }); + OptOptions.m_ModelOptions.push_back(gpuAcc); + OptOptions.m_ModelOptions.push_back(cpuAcc); + std::vector errMessages; try { diff --git a/ArmnnDriverImpl.cpp b/ArmnnDriverImpl.cpp index 9c6d51fd..936cc6e5 100644 --- a/ArmnnDriverImpl.cpp +++ b/ArmnnDriverImpl.cpp @@ -53,7 +53,6 @@ Return FailPrepareModel(V1_0::ErrorStatus error, return error; } - } // namespace namespace armnn_driver @@ -105,6 +104,17 @@ Return ArmnnDriverImpl::prepareModel( armnn::OptimizerOptions OptOptions; OptOptions.m_ReduceFp32ToFp16 = float32ToFloat16; + armnn::BackendOptions gpuAcc("GpuAcc", + { + { "FastMathEnabled", options.IsFastMathEnabled() } + }); + armnn::BackendOptions cpuAcc("CpuAcc", + { + { "FastMathEnabled", options.IsFastMathEnabled() } + }); + OptOptions.m_ModelOptions.push_back(gpuAcc); + OptOptions.m_ModelOptions.push_back(cpuAcc); + std::vector errMessages; try { diff --git a/DriverOptions.cpp b/DriverOptions.cpp index 1f534b6e..d179d653 100644 --- a/DriverOptions.cpp +++ b/DriverOptions.cpp @@ -35,6 +35,7 @@ DriverOptions::DriverOptions(armnn::Compute computeDevice, bool fp16Enabled) , m_ClTuningLevel(armnn::IGpuAccTunedParameters::TuningLevel::Rapid) , m_EnableGpuProfiling(false) , m_fp16Enabled(fp16Enabled) + , m_FastMathEnabled(false) { } @@ -45,6 +46,7 @@ DriverOptions::DriverOptions(const std::vector& backends, bool , m_ClTuningLevel(armnn::IGpuAccTunedParameters::TuningLevel::Rapid) , m_EnableGpuProfiling(false) , m_fp16Enabled(fp16Enabled) + , m_FastMathEnabled(false) { } @@ -54,6 +56,7 @@ DriverOptions::DriverOptions(int argc, char** argv) , m_ClTuningLevel(armnn::IGpuAccTunedParameters::TuningLevel::Rapid) , m_EnableGpuProfiling(false) , m_fp16Enabled(false) + , m_FastMathEnabled(false) { namespace po = boost::program_options; @@ -104,6 +107,10 @@ DriverOptions::DriverOptions(int argc, char** argv) "exhaustive approach " "rapid: only 3 lws values should be tested for each kernel ") + ("fast-math,a", + po::bool_switch(&m_FastMathEnabled), + "Turns FastMath on") + ("gpu-profiling,p", po::bool_switch(&m_EnableGpuProfiling), "Turns GPU profiling on") diff --git a/DriverOptions.hpp b/DriverOptions.hpp index b05647c5..ba0919c1 100644 --- a/DriverOptions.hpp +++ b/DriverOptions.hpp @@ -31,6 +31,7 @@ public: armnn::IGpuAccTunedParameters::Mode GetClTunedParametersMode() const { return m_ClTunedParametersMode; } armnn::IGpuAccTunedParameters::TuningLevel GetClTuningLevel() const { return m_ClTuningLevel; } bool IsGpuProfilingEnabled() const { return m_EnableGpuProfiling; } + bool IsFastMathEnabled() const { return m_FastMathEnabled; } bool GetFp16Enabled() const { return m_fp16Enabled; } void SetBackends(const std::vector& backends) { m_Backends = backends; } @@ -45,6 +46,7 @@ private: armnn::IGpuAccTunedParameters::TuningLevel m_ClTuningLevel; bool m_EnableGpuProfiling; bool m_fp16Enabled; + bool m_FastMathEnabled; }; } // namespace armnn_driver -- cgit v1.2.1