From e8b6e1742906c60741792dfa5b75008033029192 Mon Sep 17 00:00:00 2001 From: Tomasz Jankowski Date: Tue, 7 Nov 2023 12:19:34 +0100 Subject: [PATCH] [core] Migrate Softplus operator to new API (#20900) * Drop ngraph remains * Use ov::Tensor instaed of ngraph::HostTensor --- src/core/include/openvino/op/softplus.hpp | 5 +- src/core/src/op/softplus.cpp | 85 ++++++++++------------- 2 files changed, 37 insertions(+), 53 deletions(-) diff --git a/src/core/include/openvino/op/softplus.hpp b/src/core/include/openvino/op/softplus.hpp index aaff04caa53..b8b83fb8c52 100644 --- a/src/core/include/openvino/op/softplus.hpp +++ b/src/core/include/openvino/op/softplus.hpp @@ -22,14 +22,11 @@ public: /// /// \param data Input tensor SoftPlus(const Output& arg); - bool visit_attributes(AttributeVisitor& visitor) override; void validate_and_infer_types() override; std::shared_ptr clone_with_new_inputs(const OutputVector& new_args) const override; - OPENVINO_SUPPRESS_DEPRECATED_START - bool evaluate(const HostTensorVector& outputs, const HostTensorVector& inputs) const override; - OPENVINO_SUPPRESS_DEPRECATED_END + bool evaluate(TensorVector& outputs, const TensorVector& inputs) const override; bool has_evaluate() const override; }; } // namespace v4 diff --git a/src/core/src/op/softplus.cpp b/src/core/src/op/softplus.cpp index 43ce8d9720b..a5896c00795 100644 --- a/src/core/src/op/softplus.cpp +++ b/src/core/src/op/softplus.cpp @@ -2,28 +2,20 @@ // SPDX-License-Identifier: Apache-2.0 // -#include "ngraph/op/softplus.hpp" - -#include +#include "openvino/op/softplus.hpp" +#include "element_visitor.hpp" #include "itt.hpp" -#include "ngraph/attribute_visitor.hpp" -#include "ngraph/runtime/host_tensor.hpp" #include "openvino/reference/softplus.hpp" -using namespace std; -using namespace ngraph; - -op::v4::SoftPlus::SoftPlus(const Output& arg) : util::UnaryElementwiseArithmetic(arg) { +namespace ov { +namespace op { +namespace v4 { +SoftPlus::SoftPlus(const Output& arg) : util::UnaryElementwiseArithmetic(arg) { constructor_validate_and_infer_types(); } -bool op::v4::SoftPlus::visit_attributes(AttributeVisitor& visitor) { - OV_OP_SCOPE(v4_SoftPlus_visit_attributes); - return true; -} - -void op::v4::SoftPlus::validate_and_infer_types() { +void SoftPlus::validate_and_infer_types() { OV_OP_SCOPE(v4_SoftPlus_validate_and_infer_types); const element::Type& input_et = get_input_element_type(0); @@ -36,57 +28,52 @@ void op::v4::SoftPlus::validate_and_infer_types() { set_output_type(0, get_input_element_type(0), get_input_partial_shape(0)); } -shared_ptr op::v4::SoftPlus::clone_with_new_inputs(const OutputVector& new_args) const { +std::shared_ptr SoftPlus::clone_with_new_inputs(const OutputVector& new_args) const { OV_OP_SCOPE(v4_SoftPlus_clone_with_new_inputs); check_new_args_count(this, new_args); - return make_shared(new_args.at(0)); + return std::make_shared(new_args.at(0)); } -OPENVINO_SUPPRESS_DEPRECATED_START namespace softplus { namespace { -template -inline bool evaluate(const HostTensorPtr& arg, const HostTensorPtr& out, const size_t count) { - using T = typename element_type_traits::value_type; - ov::reference::softplus(arg->get_data_ptr(), out->get_data_ptr(), count); - return true; -} +struct Evaluate : element::NoAction { + using element::NoAction::visit; -bool evaluate_softplus(const HostTensorPtr& arg, const HostTensorPtr& out) { - bool rc = true; - out->set_unary(arg); - size_t count = shape_size(arg->get_shape()); - - switch (arg->get_element_type()) { - OPENVINO_TYPE_CASE(evaluate_softplus, bf16, arg, out, count); - OPENVINO_TYPE_CASE(evaluate_softplus, f16, arg, out, count); - OPENVINO_TYPE_CASE(evaluate_softplus, f32, arg, out, count); - default: - rc = false; - break; + template > + static result_type visit(const Tensor& in, Tensor& out, const size_t count) { + ov::reference::softplus(in.data(), out.data(), count); + return true; } - return rc; -} +}; } // namespace } // namespace softplus -bool op::v4::SoftPlus::evaluate(const HostTensorVector& outputs, const HostTensorVector& inputs) const { +bool SoftPlus::evaluate(TensorVector& outputs, const TensorVector& inputs) const { OV_OP_SCOPE(v4_SoftPlus_evaluate); - OPENVINO_SUPPRESS_DEPRECATED_START - OPENVINO_ASSERT(validate_host_tensor_vector(outputs, 1) && validate_host_tensor_vector(inputs, 1)); - OPENVINO_SUPPRESS_DEPRECATED_END - return softplus::evaluate_softplus(inputs[0], outputs[0]); + OPENVINO_ASSERT(outputs.size() == 1); + OPENVINO_ASSERT(inputs.size() == 1); + + const auto& input_shape = inputs[0].get_shape(); + const auto count = shape_size(input_shape); + outputs[0].set_shape(input_shape); + using namespace ov::element; + return IfTypeOf::apply(inputs[0].get_element_type(), + inputs[0], + outputs[0], + count); } -bool op::v4::SoftPlus::has_evaluate() const { +bool SoftPlus::has_evaluate() const { OV_OP_SCOPE(v4_SoftPlus_has_evaluate); switch (get_input_element_type(0)) { - case ngraph::element::bf16: - case ngraph::element::f16: - case ngraph::element::f32: + case element::bf16: + case element::f16: + case element::f32: return true; default: - break; + return false; } - return false; } +} // namespace v4 +} // namespace op +} // namespace ov