diff --git a/inference-engine/src/transformations/src/transformations/convert_precision.cpp b/inference-engine/src/transformations/src/transformations/convert_precision.cpp index 9b3caf21c5f..d38b884a000 100644 --- a/inference-engine/src/transformations/src/transformations/convert_precision.cpp +++ b/inference-engine/src/transformations/src/transformations/convert_precision.cpp @@ -300,17 +300,22 @@ std::shared_ptr change_constant_precision(std::shared_ptr::value_type; using dst_type = typename element_type_traits::value_type; - std::vector data(std::move(constant->get_vector())); + const auto * src_data = constant->get_data_ptr(); + const auto size = shape_size(constant->get_shape()); + + auto new_constant = std::make_shared(PREC_TO, constant->get_shape()); + auto * dst_data = const_cast(reinterpret_cast(new_constant->get_data_ptr())); + std::vector final_data; - std::transform(data.begin(), data.end(), std::back_inserter(final_data), - [](src_type val) { - if (val > std::numeric_limits::max()) { - return std::numeric_limits::max(); - } else { - return static_cast(val); - } - }); - return std::make_shared(PREC_TO, constant->get_shape(), final_data); + for (size_t i = 0; i < size; ++i) { + const auto & val = src_data[i]; + if (val > std::numeric_limits::max()) { + dst_data[i] = std::numeric_limits::max(); + } else { + dst_data[i] = static_cast(val); + } + } + return new_constant; } bool fuse_type_to_constant(std::shared_ptr & node, element::Type to, const std::vector> & consumers) {