[IE][nG][LoadTime] speed up constant folding (#15476)

* speed up constant folding and improved load time for FP16

* fix unit-tests

* added OPENVINO_SUPPRESS_DEPRECATED_START

* new evaluate for Convert; added constructor for Constant; constant copying by reference during constant_fold

* removed deprecation macro from Convert evaluate

* returned back Convert evaluate to old HostTensorPtr because it's used in tests accuracy comparator
This commit is contained in:
Pavel Esir 2023-02-13 05:00:29 +01:00 committed by GitHub
parent b300df1be6
commit 63dd0685fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 5 deletions

View File

@ -30,6 +30,10 @@ public:
/// \param tensor The tensor with data
Constant(const std::shared_ptr<ngraph::runtime::Tensor>& tensor);
/// \brief Initialize a constant from ov::Tensor
/// \param tensor The ov::Tensor with data
Constant(const ov::Tensor& tensor);
/// \brief Constructs a tensor constant.
///
/// \param type The element type of the tensor constant.

View File

@ -794,8 +794,8 @@ bool ov::Node::constant_fold(OutputVector& output_values, const OutputVector& in
for (const auto& input : input_values) {
nodes.push_back(input.get_node_shared_ptr());
auto constant = ov::as_type_ptr<ngraph::op::v0::Constant>(input.get_node_shared_ptr());
auto tensor = ov::Tensor(input.get_element_type(), input.get_shape());
std::copy_n(constant->get_data_ptr<uint8_t>(), constant->get_byte_size(), static_cast<uint8_t*>(tensor.data()));
void* data = (void*)constant->get_data_ptr();
auto tensor = ov::Tensor(input.get_element_type(), input.get_shape(), data);
input_tensors.push_back(tensor);
}
@ -807,9 +807,7 @@ bool ov::Node::constant_fold(OutputVector& output_values, const OutputVector& in
OPENVINO_SUPPRESS_DEPRECATED_START
if (evaluate(output_tensors, input_tensors)) {
for (size_t i = 0; i < output_tensors.size(); ++i) {
output_values[i] = make_shared<ngraph::op::Constant>(output_tensors[i].get_element_type(),
output_tensors[i].get_shape(),
output_tensors[i].data());
output_values[i] = make_shared<ngraph::op::Constant>(output_tensors[i]);
copy_runtime_info(nodes, output_values[i].get_node_shared_ptr());
}
return true;

View File

@ -50,6 +50,17 @@ ov::op::v0::Constant::Constant(const shared_ptr<ngraph::runtime::Tensor>& tensor
constructor_validate_and_infer_types();
}
ov::op::v0::Constant::Constant(const ov::Tensor& tensor) {
m_element_type = tensor.get_element_type();
m_shape = tensor.get_shape();
// Share data from ov::Tensor
m_data = make_shared<ngraph::runtime::SharedBuffer<ov::Tensor>>(static_cast<char*>(tensor.data()),
tensor.get_byte_size(),
tensor);
constructor_validate_and_infer_types();
}
ov::op::v0::Constant::Constant(const element::Type& type,
const ov::Shape& shape,
const std::vector<std::string>& values)