aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNarumol Prangnawarat <narumol.prangnawarat@arm.com>2019-05-03 16:42:52 +0100
committerNarumol Prangnawarat <narumol.prangnawarat@arm.com>2019-05-03 16:53:08 +0100
commit856d1c9c9b0b1609282c4f797cbafefc6531240d (patch)
tree280526045f3c33727112640d82438da9081cad74
parent689c6ee3604ab34197812b13ad3ccefa4ca60418 (diff)
downloadandroid-nn-driver-856d1c9c9b0b1609282c4f797cbafefc6531240d.tar.gz
IVGCVSW-3014 Check supported backends from runtime divice spec
!armnn:1070 Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com> Change-Id: If0f411f2232e856ebc4f1a4c10fa626e3277a6ab
-rw-r--r--ArmnnDevice.cpp25
-rw-r--r--DriverOptions.cpp17
-rw-r--r--DriverOptions.hpp1
3 files changed, 27 insertions, 16 deletions
diff --git a/ArmnnDevice.cpp b/ArmnnDevice.cpp
index 216b010c..c96798a8 100644
--- a/ArmnnDevice.cpp
+++ b/ArmnnDevice.cpp
@@ -81,6 +81,31 @@ ArmnnDevice::ArmnnDevice(DriverOptions options)
ALOGE("ArmnnDevice: Failed to setup CL runtime: %s. Device will be unavailable.", error.what());
}
#endif
+ std::vector<armnn::BackendId> backends;
+
+ if (m_Runtime)
+ {
+ const armnn::BackendIdSet supportedDevices = m_Runtime->GetDeviceSpec().GetSupportedBackends();
+ for (auto &backend : m_Options.GetBackends())
+ {
+ if (std::find(supportedDevices.cbegin(), supportedDevices.cend(), backend) == supportedDevices.cend())
+ {
+ ALOGW("Requested unknown backend %s", backend.Get().c_str());
+ }
+ else
+ {
+ backends.push_back(backend);
+ }
+ }
+ }
+
+ if (backends.empty())
+ {
+ backends.emplace_back("GpuAcc");
+ ALOGW("No known backend specified. Defaulting to: GpuAcc");
+ }
+
+ m_Options.SetBackends(backends);
ALOGV("ArmnnDevice: Created device with the following backends: %s",
GetBackendString(m_Options).c_str());
}
diff --git a/DriverOptions.cpp b/DriverOptions.cpp
index 6615e519..94fd5942 100644
--- a/DriverOptions.cpp
+++ b/DriverOptions.cpp
@@ -66,7 +66,7 @@ DriverOptions::DriverOptions(int argc, char** argv)
("compute,c",
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")
+ "Which backend to run layers on. Examples of possible values are: CpuRef, CpuAcc, GpuAcc")
("verbose-logging,v",
po::bool_switch(&m_VerboseLogging),
@@ -120,25 +120,10 @@ DriverOptions::DriverOptions(int argc, char** argv)
}
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)
{
- if (std::find(supportedDevices.cbegin(), supportedDevices.cend(), backend) == supportedDevices.cend())
- {
- ALOGW("Requested unknown backend %s", backend.c_str());
- }
- else
- {
m_Backends.emplace_back(backend);
- }
- }
-
- if (m_Backends.empty())
- {
- m_Backends.emplace_back("GpuAcc");
- ALOGW("No known backend specified. Defaulting to: GpuAcc");
}
if (!unsupportedOperationsAsString.empty())
diff --git a/DriverOptions.hpp b/DriverOptions.hpp
index 895af574..141ca8a2 100644
--- a/DriverOptions.hpp
+++ b/DriverOptions.hpp
@@ -31,6 +31,7 @@ public:
armnn::IGpuAccTunedParameters::TuningLevel GetClTuningLevel() const { return m_ClTuningLevel; }
bool IsGpuProfilingEnabled() const { return m_EnableGpuProfiling; }
bool GetFp16Enabled() const { return m_fp16Enabled; }
+ void SetBackends(const std::vector<armnn::BackendId>& backends) { m_Backends = backends; }
private:
std::vector<armnn::BackendId> m_Backends;