diff options
author | 장지섭/On-Device Lab(SR)/Engineer/삼성전자 <jiseob.jang@samsung.com> | 2019-09-02 15:14:04 +0900 |
---|---|---|
committer | 오형석/On-Device Lab(SR)/Staff Engineer/삼성전자 <hseok82.oh@samsung.com> | 2019-09-02 15:14:04 +0900 |
commit | c1adb0fc48c85d0cdc94bd9b26d83b3aee006603 (patch) | |
tree | 28d80b5e28c3a1ff43be83b05f83a6a851c1439f | |
parent | c04ed020ac2c9440b9d20f4c49b9f0229b07c236 (diff) | |
download | nnfw-c1adb0fc48c85d0cdc94bd9b26d83b3aee006603.tar.gz nnfw-c1adb0fc48c85d0cdc94bd9b26d83b3aee006603.tar.bz2 nnfw-c1adb0fc48c85d0cdc94bd9b26d83b3aee006603.zip |
Enable Exp op for ACL neon (#7093)
This commit enables to support Exp op for ACL neon.
Signed-off-by: jiseob.jang <jiseob.jang@samsung.com>
6 files changed, 36 insertions, 3 deletions
diff --git a/runtimes/neurun/backend/acl_neon/KernelGenerator.cc b/runtimes/neurun/backend/acl_neon/KernelGenerator.cc index a3d627b0c..be93fed68 100644 --- a/runtimes/neurun/backend/acl_neon/KernelGenerator.cc +++ b/runtimes/neurun/backend/acl_neon/KernelGenerator.cc @@ -1040,8 +1040,23 @@ void KernelGenerator::visit(const model::operation::DivNode &node) void KernelGenerator::visit(const model::operation::ExpNode &node) { - (void)node; - throw std::runtime_error("Not supported, yet"); + const auto output_index{node.getOutputs().at(0)}; + const auto input_index{node.getInputs().at(model::operation::ExpNode::Input::INPUT)}; + + auto output_alloc = _tensor_builder->at(output_index).get(); + auto input_alloc = _tensor_builder->at(input_index).get(); + + std::unique_ptr<::arm_compute::IFunction> fn; + + auto l = nnfw::cpp14::make_unique<::arm_compute::NEExpLayer>(); + + l->configure(input_alloc->handle(), output_alloc->handle()); + + fn = std::move(l); + + auto acl_fn = asAclFunction(std::move(fn)); + + _execution_builder->append(std::move(acl_fn)); } void KernelGenerator::visit(const model::operation::ReduceMaxNode &node) diff --git a/runtimes/neurun/backend/acl_neon/ShapeFixer.cc b/runtimes/neurun/backend/acl_neon/ShapeFixer.cc index e6fdca788..96a35203c 100644 --- a/runtimes/neurun/backend/acl_neon/ShapeFixer.cc +++ b/runtimes/neurun/backend/acl_neon/ShapeFixer.cc @@ -79,6 +79,8 @@ void ShapeFixer::visit(const model::operation::ConcatNode &node) _tensor_builder->dimCorrection(inputs, false); } +void ShapeFixer::visit(const model::operation::ExpNode &) { /* DO NOTHING */} + void ShapeFixer::visit(const model::operation::FullyConnectedNode &node) { using model::operation::FullyConnectedNode; diff --git a/runtimes/neurun/backend/acl_neon/ShapeFixer.h b/runtimes/neurun/backend/acl_neon/ShapeFixer.h index 392df911e..336179c44 100644 --- a/runtimes/neurun/backend/acl_neon/ShapeFixer.h +++ b/runtimes/neurun/backend/acl_neon/ShapeFixer.h @@ -44,6 +44,7 @@ public: void visit(const model::operation::MeanNode &) override; void visit(const model::operation::AvgPool2DNode &) override; void visit(const model::operation::ConcatNode &) override; + void visit(const model::operation::ExpNode &) override; void visit(const model::operation::FullyConnectedNode &) override; void visit(const model::operation::MulNode &) override; void visit(const model::operation::ReLUNode &) override; diff --git a/runtimes/neurun/core/src/compiler/OperationValidator.cc b/runtimes/neurun/core/src/compiler/OperationValidator.cc index ee5ebfa71..2677157e7 100644 --- a/runtimes/neurun/core/src/compiler/OperationValidator.cc +++ b/runtimes/neurun/core/src/compiler/OperationValidator.cc @@ -338,6 +338,18 @@ void OperationValidator::visit(const model::operation::EmbeddingLookupNode &node } } +void OperationValidator::visit(const model::operation::ExpNode &node) +{ + const auto output_index{node.getOutputs().at(0)}; + const auto input_index{node.getInputs().at(model::operation::ExpNode::Input::INPUT)}; + + UNUSED_RELEASE(output_index); + UNUSED_RELEASE(input_index); + + assert(_ctx.at(output_index).shape() == _ctx.at(input_index).shape()); + assert(_ctx.at(output_index).typeInfo().type() == _ctx.at(input_index).typeInfo().type()); +} + void OperationValidator::visit(const model::operation::HashtableLookupNode &node) { const auto output_index{ diff --git a/runtimes/neurun/core/src/compiler/OperationValidator.h b/runtimes/neurun/core/src/compiler/OperationValidator.h index 99b9a02e8..96dc1b8bf 100644 --- a/runtimes/neurun/core/src/compiler/OperationValidator.h +++ b/runtimes/neurun/core/src/compiler/OperationValidator.h @@ -50,6 +50,7 @@ public: void visit(const model::operation::RNNNode &node) override; void visit(const model::operation::SpaceToDepthNode &node) override; void visit(const model::operation::EmbeddingLookupNode &node) override; + void visit(const model::operation::ExpNode &node) override; void visit(const model::operation::HashtableLookupNode &node) override; void visit(const model::operation::TransposeConvNode &node) override; void visit(const model::operation::GatherNode &node) override; diff --git a/tests/nnapi/nnapi_gtest.skip.armv7l-linux.acl_neon b/tests/nnapi/nnapi_gtest.skip.armv7l-linux.acl_neon index e87aba38b..143108e19 100644 --- a/tests/nnapi/nnapi_gtest.skip.armv7l-linux.acl_neon +++ b/tests/nnapi/nnapi_gtest.skip.armv7l-linux.acl_neon @@ -9,7 +9,6 @@ GeneratedTests.dequantize GeneratedTests.embedding_lookup GeneratedTests.embedding_lookup_2d_nnfw GeneratedTests.embedding_lookup_4d_nnfw -GeneratedTests.exp_ex* GeneratedTests.floor_ GeneratedTests.greater_equal_ex* GeneratedTests.hashtable_lookup* @@ -50,3 +49,6 @@ generatedtests.logical_not_ex* # Need to be fixed GeneratedTests.logical_not_ex_1D GeneratedTests.logical_not_ex_4D +# Float error +GeneratedTests.exp_ex_1D_float +GeneratedTests.exp_ex_2D_float |