aboutsummaryrefslogtreecommitdiff
path: root/RequestThread.cpp
diff options
context:
space:
mode:
authorMike Kelly <mike.kelly@arm.com>2019-06-11 16:35:25 +0100
committerMike Kelly <mike.kelly@arm.com>2019-06-11 16:35:25 +0100
commitb5fdf38f0c6596958fab2b84882f2792a31e585a (patch)
treed6b578b51c1923c759653d8a04efa90923ad4dd8 /RequestThread.cpp
parentb92f8901fc34749337ea7a9ad7a2717fc9490de5 (diff)
downloadandroid-nn-driver-b5fdf38f0c6596958fab2b84882f2792a31e585a.tar.gz
IVGCVSW-3181 Add HAL 1.2 support to android-nn-driver
* Updated Android.mk to build HAL 1.2 driver * Added 1.2 HalPolicy and ArmnnDriver * Added 1.2 ArmnnPreparedModel * Updated converters and utilities to accept new HAL 1.2 operands and operand types. Signed-off-by: Sadik Armagan <sadik.armagan@arm.com> Signed-off-by: Mike Kelly <mike.kelly@arm.com> Change-Id: I62856deab24e106f72cccce09468db4971756fa6
Diffstat (limited to 'RequestThread.cpp')
-rw-r--r--RequestThread.cpp44
1 files changed, 27 insertions, 17 deletions
diff --git a/RequestThread.cpp b/RequestThread.cpp
index bc1eccc0..4b646034 100644
--- a/RequestThread.cpp
+++ b/RequestThread.cpp
@@ -8,6 +8,10 @@
#include "RequestThread.hpp"
#include "ArmnnPreparedModel.hpp"
+#ifdef ARMNN_ANDROID_NN_V1_2
+#include "ArmnnPreparedModel_1_2.hpp"
+#endif
+
#include <boost/assert.hpp>
#include <log/log.h>
@@ -17,15 +21,15 @@ using namespace android;
namespace armnn_driver
{
-template<typename HalVersion>
-RequestThread<HalVersion>::RequestThread()
+template <template <typename HalVersion> class PreparedModel, typename HalVersion>
+RequestThread<PreparedModel, HalVersion>::RequestThread()
{
ALOGV("RequestThread::RequestThread()");
m_Thread = std::make_unique<std::thread>(&RequestThread::Process, this);
}
-template<typename HalVersion>
-RequestThread<HalVersion>::~RequestThread()
+template <template <typename HalVersion> class PreparedModel, typename HalVersion>
+RequestThread<PreparedModel, HalVersion>::~RequestThread()
{
ALOGV("RequestThread::~RequestThread()");
@@ -50,12 +54,12 @@ RequestThread<HalVersion>::~RequestThread()
catch (const std::exception&) { } // Swallow any exception.
}
-template<typename HalVersion>
-void RequestThread<HalVersion>::PostMsg(ArmnnPreparedModel<HalVersion>* model,
- std::shared_ptr<std::vector<::android::nn::RunTimePoolInfo>>& memPools,
- std::shared_ptr<armnn::InputTensors>& inputTensors,
- std::shared_ptr<armnn::OutputTensors>& outputTensors,
- const ::android::sp<V1_0::IExecutionCallback>& callback)
+template <template <typename HalVersion> class PreparedModel, typename HalVersion>
+void RequestThread<PreparedModel, HalVersion>::PostMsg(PreparedModel<HalVersion>* model,
+ std::shared_ptr<std::vector<::android::nn::RunTimePoolInfo>>& memPools,
+ std::shared_ptr<armnn::InputTensors>& inputTensors,
+ std::shared_ptr<armnn::OutputTensors>& outputTensors,
+ const ::android::sp<V1_0::IExecutionCallback>& callback)
{
ALOGV("RequestThread::PostMsg(...)");
auto data = std::make_shared<AsyncExecuteData>(model,
@@ -67,8 +71,8 @@ void RequestThread<HalVersion>::PostMsg(ArmnnPreparedModel<HalVersion>* model,
PostMsg(pMsg);
}
-template<typename HalVersion>
-void RequestThread<HalVersion>::PostMsg(std::shared_ptr<ThreadMsg>& pMsg)
+template <template <typename HalVersion> class PreparedModel, typename HalVersion>
+void RequestThread<PreparedModel, HalVersion>::PostMsg(std::shared_ptr<ThreadMsg>& pMsg)
{
ALOGV("RequestThread::PostMsg(pMsg)");
// Add a message to the queue and notify the request thread
@@ -77,8 +81,8 @@ void RequestThread<HalVersion>::PostMsg(std::shared_ptr<ThreadMsg>& pMsg)
m_Cv.notify_one();
}
-template<typename HalVersion>
-void RequestThread<HalVersion>::Process()
+template <template <typename HalVersion> class PreparedModel, typename HalVersion>
+void RequestThread<PreparedModel, HalVersion>::Process()
{
ALOGV("RequestThread::Process()");
while (true)
@@ -103,7 +107,7 @@ void RequestThread<HalVersion>::Process()
{
ALOGV("RequestThread::Process() - request");
// invoke the asynchronous execution method
- ArmnnPreparedModel<HalVersion>* model = pMsg->data->m_Model;
+ PreparedModel<HalVersion>* model = pMsg->data->m_Model;
model->ExecuteGraph(pMsg->data->m_MemPools,
pMsg->data->m_InputTensors,
pMsg->data->m_OutputTensors,
@@ -135,10 +139,16 @@ void RequestThread<HalVersion>::Process()
/// Class template specializations
///
-template class RequestThread<hal_1_0::HalPolicy>;
+template class RequestThread<ArmnnPreparedModel, hal_1_0::HalPolicy>;
#ifdef ARMNN_ANDROID_NN_V1_1
-template class RequestThread<hal_1_1::HalPolicy>;
+template class RequestThread<armnn_driver::ArmnnPreparedModel, hal_1_1::HalPolicy>;
+#endif
+
+#ifdef ARMNN_ANDROID_NN_V1_2
+template class RequestThread<ArmnnPreparedModel, hal_1_1::HalPolicy>;
+template class RequestThread<ArmnnPreparedModel, hal_1_2::HalPolicy>;
+template class RequestThread<ArmnnPreparedModel_1_2, hal_1_2::HalPolicy>;
#endif
} // namespace armnn_driver