From e15f21680c7308f5f566f7fa22f5b298695d0862 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EC=9E=A5=EC=A7=80=EC=84=AD/On-Device=20Lab=28SR=29/Enginee?= =?utf8?q?r/=EC=82=BC=EC=84=B1=EC=A0=84=EC=9E=90?= Date: Wed, 4 Sep 2019 14:57:17 +0900 Subject: [PATCH] Enable Logistic op for ACL neon (#7156) This commit enables to support Logistic op for ACL neon. Signed-off-by: jiseob.jang --- runtimes/neurun/backend/acl_neon/KernelGenerator.cc | 20 ++++++++++++++++++++ runtimes/neurun/backend/acl_neon/KernelGenerator.h | 1 + runtimes/neurun/backend/acl_neon/ShapeFixer.cc | 2 ++ runtimes/neurun/backend/acl_neon/ShapeFixer.h | 1 + tests/nnapi/nnapi_gtest.skip.armv7l-linux.acl_neon | 1 - .../neurun_frameworktest_list.armv7l.acl_neon.txt | 1 + 6 files changed, 25 insertions(+), 1 deletion(-) diff --git a/runtimes/neurun/backend/acl_neon/KernelGenerator.cc b/runtimes/neurun/backend/acl_neon/KernelGenerator.cc index 20ee28d..f892ee9 100644 --- a/runtimes/neurun/backend/acl_neon/KernelGenerator.cc +++ b/runtimes/neurun/backend/acl_neon/KernelGenerator.cc @@ -656,6 +656,26 @@ void KernelGenerator::visit(const model::operation::L2Pool2DNode &node) ActivationBuilder{*_execution_builder}.append(activation, ofm_alloc->handle()); } +void KernelGenerator::visit(const model::operation::LogisticNode &node) +{ + const auto ofm_index{node.getOutputs().at(0)}; + const auto ifm_index{node.getInputs().at(model::operation::LogisticNode::Input::INPUT)}; + + auto ofm_alloc = _tensor_builder->at(ofm_index).get(); + auto ifm_alloc = _tensor_builder->at(ifm_index).get(); + + const ::arm_compute::ActivationLayerInfo act_info{ + ::arm_compute::ActivationLayerInfo::ActivationFunction::LOGISTIC}; + + auto fn = nnfw::cpp14::make_unique<::arm_compute::NEActivationLayer>(); + + fn->configure(ifm_alloc->handle(), ofm_alloc->handle(), act_info); + + auto acl_fn = asAclFunction(std::move(fn)); + + _execution_builder->append(std::move(acl_fn)); +} + void KernelGenerator::visit(const model::operation::MulNode &node) { const auto ofm_index{node.getOutputs().at(0)}; diff --git a/runtimes/neurun/backend/acl_neon/KernelGenerator.h b/runtimes/neurun/backend/acl_neon/KernelGenerator.h index 80b48b6..8914a58 100644 --- a/runtimes/neurun/backend/acl_neon/KernelGenerator.h +++ b/runtimes/neurun/backend/acl_neon/KernelGenerator.h @@ -47,6 +47,7 @@ public: void visit(const model::operation::FullyConnectedNode &) override; void visit(const model::operation::L2NormalizationNode &) override; void visit(const model::operation::L2Pool2DNode &) override; + void visit(const model::operation::LogisticNode &) override; void visit(const model::operation::MulNode &) override; void visit(const model::operation::ReLUNode &) override; void visit(const model::operation::ReLU1Node &) override; diff --git a/runtimes/neurun/backend/acl_neon/ShapeFixer.cc b/runtimes/neurun/backend/acl_neon/ShapeFixer.cc index ed9c2f6..046a18a 100644 --- a/runtimes/neurun/backend/acl_neon/ShapeFixer.cc +++ b/runtimes/neurun/backend/acl_neon/ShapeFixer.cc @@ -100,6 +100,8 @@ void ShapeFixer::visit(const model::operation::L2NormalizationNode &) { /* DO NO void ShapeFixer::visit(const model::operation::L2Pool2DNode &) { /* DO NOTHING */} +void ShapeFixer::visit(const model::operation::LogisticNode &) { /* DO NOTHING */} + void ShapeFixer::visit(const model::operation::MulNode &node) { const auto lhs_index{node.getInputs().at(model::operation::MulNode::Input::LHS)}; diff --git a/runtimes/neurun/backend/acl_neon/ShapeFixer.h b/runtimes/neurun/backend/acl_neon/ShapeFixer.h index 42f5cb1..2c3987d 100644 --- a/runtimes/neurun/backend/acl_neon/ShapeFixer.h +++ b/runtimes/neurun/backend/acl_neon/ShapeFixer.h @@ -49,6 +49,7 @@ public: void visit(const model::operation::FullyConnectedNode &) override; void visit(const model::operation::L2NormalizationNode &) override; void visit(const model::operation::L2Pool2DNode &) override; + void visit(const model::operation::LogisticNode &) override; void visit(const model::operation::MulNode &) override; void visit(const model::operation::ReLUNode &) override; void visit(const model::operation::ReLU1Node &) override; diff --git a/tests/nnapi/nnapi_gtest.skip.armv7l-linux.acl_neon b/tests/nnapi/nnapi_gtest.skip.armv7l-linux.acl_neon index bcafc7e..97792df 100644 --- a/tests/nnapi/nnapi_gtest.skip.armv7l-linux.acl_neon +++ b/tests/nnapi/nnapi_gtest.skip.armv7l-linux.acl_neon @@ -14,7 +14,6 @@ GeneratedTests.hashtable_lookup* GeneratedTests.local_response_norm* GeneratedTests.logical_and_ex* GeneratedTests.logical_or_ex* -GeneratedTests.logistic* GeneratedTests.lsh_projection* GeneratedTests.lstm* GeneratedTests.mobilenet* diff --git a/tests/scripts/neurun_frameworktest_list.armv7l.acl_neon.txt b/tests/scripts/neurun_frameworktest_list.armv7l.acl_neon.txt index 1bcf468..d5c1149 100644 --- a/tests/scripts/neurun_frameworktest_list.armv7l.acl_neon.txt +++ b/tests/scripts/neurun_frameworktest_list.armv7l.acl_neon.txt @@ -6,6 +6,7 @@ conv_2d depthwise_conv_2d fullyconnected/fc1 l2_pool_2d +logistic max_pool_2d relu relu6 -- 2.7.4