From e8d80f9b0d782a3e60a8d4669d1055c03e040f1b Mon Sep 17 00:00:00 2001 From: Pawel Raasz Date: Fri, 13 Oct 2023 12:10:35 +0200 Subject: [PATCH] [core]Shape and Node util functions size optimization (#20206) * Refactor shape_size util to reduce bin size * Make `check_new_args_count` non-template function * Use as not template check_new_args_count in multi-nominal --- src/core/include/openvino/core/node.hpp | 22 +++++++++------------- src/core/include/openvino/core/shape.hpp | 22 +++++++++------------- src/core/src/node.cpp | 11 +++++++++++ src/core/src/op/multinomial.cpp | 4 +--- 4 files changed, 30 insertions(+), 29 deletions(-) diff --git a/src/core/include/openvino/core/node.hpp b/src/core/include/openvino/core/node.hpp index 86029061770..ac1c61ce0f1 100644 --- a/src/core/include/openvino/core/node.hpp +++ b/src/core/include/openvino/core/node.hpp @@ -554,21 +554,17 @@ OPENVINO_API void NodeValidationFailure::create(const CheckLocInfo& check_loc_in NODE_VALIDATION_CHECK(std::make_pair(static_cast((node)), &(input_shapes)), __VA_ARGS__) namespace ov { -template -void check_new_args_count(const Node* node, T new_args) { - NODE_VALIDATION_CHECK(node, - new_args.size() == node->input_values().size(), - "clone_with_new_inputs() expected ", - node->input_values().size(), - " argument", - (node->input_values().size() == 1 ? "" : "s"), - " but got ", - new_args.size()); -} -} // namespace ov +/** + * @brief Check new arguments size if match node inputs count. + * + * This check is required in cloning ov::Node. + * + * @param node Pointer to node. + * @param new_args Vector with new outputs to check. + */ +void OPENVINO_API check_new_args_count(const Node* const node, const OutputVector& new_args); -namespace ov { /// \brief Visits a reference to a node that has been registered with the visitor. template <> class OPENVINO_API AttributeAdapter> : public VisitorAdapter { diff --git a/src/core/include/openvino/core/shape.hpp b/src/core/include/openvino/core/shape.hpp index 392bd9c48bd..a04a864a839 100644 --- a/src/core/include/openvino/core/shape.hpp +++ b/src/core/include/openvino/core/shape.hpp @@ -42,19 +42,6 @@ public: OPENVINO_API std::string to_string() const; }; -/** - * @brief Number of elements in spanned by a shape - * @ingroup ov_model_cpp_api - */ -template -size_t shape_size(const SHAPE_TYPE& shape) { - size_t size = 1; - for (auto d : shape) { - size *= d; - } - return size; -} - /** * Number of elements in a subset of dimensions of a shape. * Returns a product of dimensions in a range [start_dim;end_dim) @@ -72,6 +59,15 @@ size_t shape_size(ForwardIt start_dim, const ForwardIt end_dim) { std::multiplies::value_type>()); } +/** + * @brief Number of elements in spanned by a shape + * @ingroup ov_model_cpp_api + */ +template +size_t shape_size(const SHAPE_TYPE& shape) { + return shape_size(shape.begin(), shape.end()); +} + /// Row-major strides for a shape template std::vector row_major_strides(const SHAPE_TYPE& shape) { diff --git a/src/core/src/node.cpp b/src/core/src/node.cpp index ee2c454bb6a..492f0dec1e3 100644 --- a/src/core/src/node.cpp +++ b/src/core/src/node.cpp @@ -844,6 +844,17 @@ bool ov::Node::visit_attributes(AttributeVisitor&) { } namespace ov { +void check_new_args_count(const Node* const node, const OutputVector& new_args) { + NODE_VALIDATION_CHECK(node, + new_args.size() == node->input_values().size(), + "clone_with_new_inputs() expected ", + node->input_values().size(), + " argument", + (node->input_values().size() == 1 ? "" : "s"), + " but got ", + new_args.size()); +} + AttributeAdapter>::AttributeAdapter(std::shared_ptr& value) : m_ref(value) {} bool AttributeAdapter>::visit_attributes(AttributeVisitor& visitor) { diff --git a/src/core/src/op/multinomial.cpp b/src/core/src/op/multinomial.cpp index 90f41369364..d8e6a967f38 100644 --- a/src/core/src/op/multinomial.cpp +++ b/src/core/src/op/multinomial.cpp @@ -6,11 +6,9 @@ #include -#include "bound_evaluate.hpp" #include "itt.hpp" #include "multinomial_shape_inference.hpp" #include "openvino/core/attribute_visitor.hpp" -#include "openvino/op/constant.hpp" #include "openvino/op/util/op_types.hpp" #include "openvino/reference/multinomial.hpp" @@ -60,7 +58,7 @@ void op::v13::Multinomial::validate_and_infer_types() { std::shared_ptr op::v13::Multinomial::clone_with_new_inputs(const OutputVector& new_args) const { OV_OP_SCOPE(v13_Multinomial_clone_with_new_inputs); - check_new_args_count(this, new_args); + check_new_args_count(this, new_args); return std::make_shared(new_args.at(0), new_args.at(1),