Enable Logistic op for ACL neon (#7156)
author장지섭/On-Device Lab(SR)/Engineer/삼성전자 <jiseob.jang@samsung.com>
Wed, 4 Sep 2019 05:57:17 +0000 (14:57 +0900)
committer이춘석/On-Device Lab(SR)/Staff Engineer/삼성전자 <chunseok.lee@samsung.com>
Wed, 4 Sep 2019 05:57:17 +0000 (14:57 +0900)
This commit enables to support Logistic op for ACL neon.

Signed-off-by: jiseob.jang <jiseob.jang@samsung.com>
runtimes/neurun/backend/acl_neon/KernelGenerator.cc
runtimes/neurun/backend/acl_neon/KernelGenerator.h
runtimes/neurun/backend/acl_neon/ShapeFixer.cc
runtimes/neurun/backend/acl_neon/ShapeFixer.h
tests/nnapi/nnapi_gtest.skip.armv7l-linux.acl_neon
tests/scripts/neurun_frameworktest_list.armv7l.acl_neon.txt

index 20ee28d..f892ee9 100644 (file)
@@ -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)};
index 80b48b6..8914a58 100644 (file)
@@ -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;
index ed9c2f6..046a18a 100644 (file)
@@ -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)};
index 42f5cb1..2c3987d 100644 (file)
@@ -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;
index bcafc7e..97792df 100644 (file)
@@ -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*