aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Kelly <mike.kelly@arm.com>2020-09-30 20:22:56 +0100
committermike.kelly <mike.kelly@arm.com>2020-09-30 19:41:56 +0000
commit7ed56dd5808d483ab8e294f36e3ecf8e8ddd84f1 (patch)
treeb53d5499204280f539e17e7f66d0d4e7790863c2
parent9b088d9c275ed11ca39f8b035e02a68f681c5d45 (diff)
downloadandroid-nn-driver-7ed56dd5808d483ab8e294f36e3ecf8e8ddd84f1.tar.gz
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 <mike.kelly@arm.com> Change-Id: Ifd8931f95efd65d3ae3aca9d9d61bd381e4e24a5
-rw-r--r--1.2/ArmnnDriverImpl.cpp11
-rw-r--r--1.3/ArmnnDriverImpl.cpp11
-rw-r--r--ArmnnDriverImpl.cpp12
-rw-r--r--DriverOptions.cpp7
-rw-r--r--DriverOptions.hpp2
5 files changed, 42 insertions, 1 deletions
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<V1_0::ErrorStatus> 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<std::string> 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<V1_3::ErrorStatus> 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<std::string> 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<V1_0::ErrorStatus> FailPrepareModel(V1_0::ErrorStatus error,
return error;
}
-
} // namespace
namespace armnn_driver
@@ -105,6 +104,17 @@ Return<V1_0::ErrorStatus> ArmnnDriverImpl<HalPolicy>::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<std::string> 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<armnn::BackendId>& 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<armnn::BackendId>& 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