split evaluate_map.cpp to small files (#16216)

* Split evaluate_map.cpp

Signed-off-by: Zhai, Xuejun <xuejun.zhai@intel.com>

* Fix compiler error

Signed-off-by: Zhai, Xuejun <xuejun.zhai@intel.com>

* Fix CI build error

Signed-off-by: Zhai, Xuejun <xuejun.zhai@intel.com>

* Fix CI build error

Signed-off-by: Zhai, Xuejun <xuejun.zhai@intel.com>

* Fix CI build error

Signed-off-by: Zhai, Xuejun <xuejun.zhai@intel.com>

* Fix CI format issues

Signed-off-by: Zhai, Xuejun <xuejun.zhai@intel.com>

* Fix CI format issues

Signed-off-by: Zhai, Xuejun <xuejun.zhai@intel.com>

* Fix CI format issues

Signed-off-by: Zhai, Xuejun <xuejun.zhai@intel.com>

* Fix CI format issues

Signed-off-by: Zhai, Xuejun <xuejun.zhai@intel.com>

* Add op v7::Gelu

Signed-off-by: Zhai, Xuejun <xuejun.zhai@intel.com>

---------

Signed-off-by: Zhai, Xuejun <xuejun.zhai@intel.com>
This commit is contained in:
Xuejun Zhai 2023-04-14 10:57:19 +08:00 committed by GitHub
parent 68f46ff9a1
commit 802742e59f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
92 changed files with 12945 additions and 4511 deletions

View File

@ -2,6 +2,10 @@
# SPDX-License-Identifier: Apache-2.0
#
file(GLOB OPS_SRC
"${CMAKE_CURRENT_SOURCE_DIR}/ops/*.cpp"
)
set (SRC
backend.cpp
backend.hpp
@ -18,7 +22,7 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
endif()
add_library(interpreter_backend STATIC EXCLUDE_FROM_ALL ${SRC})
add_library(interpreter_backend STATIC EXCLUDE_FROM_ALL ${OPS_SRC} ${SRC})
add_library(openvino::interpreter_backend ALIAS interpreter_backend)
if(CMAKE_COMPILER_IS_GNUCXX)
@ -34,7 +38,7 @@ target_compile_definitions(interpreter_backend
)
target_link_libraries(interpreter_backend PRIVATE ngraph::builder ngraph::reference openvino::util openvino::runtime::dev ov_shape_inference)
target_include_directories(interpreter_backend PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
target_include_directories(interpreter_backend PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/ops/>)
file(GLOB_RECURSE all_backends_src "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp")
add_clang_format_target(interpreter_backend_clang FOR_SOURCES ${all_backends_src})

File diff suppressed because it is too large Load Diff

View File

@ -5,6 +5,13 @@
#pragma once
#include "ngraph/node.hpp"
std::vector<float> get_floats(const std::shared_ptr<ngraph::HostTensor>& input, const ngraph::Shape& shape);
std::vector<int64_t> get_integers(const std::shared_ptr<ngraph::HostTensor>& input, const ngraph::Shape& shape);
std::vector<int64_t> get_signal_size(const std::vector<std::shared_ptr<ngraph::HostTensor>>& inputs,
size_t num_of_axes);
namespace ngraph {
namespace runtime {
namespace interpreter {

View File

@ -0,0 +1,66 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
// clang-format off
#include "evaluate_node.hpp"
#include "ngraph/runtime/reference/abs.hpp"
// clang-format on
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::Abs>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::abs<T>(inputs[0]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
ngraph::shape_size(inputs[0]->get_shape()));
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::Abs>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::Abs>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::Abs>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::Abs>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::Abs>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::Abs>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::Abs>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::Abs>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::Abs>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::Abs>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::Abs>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::Abs>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::Abs>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::Abs>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::Abs>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::Abs>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::Abs>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,98 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/adaptive_avg_pool.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v8::AdaptiveAvgPool>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::adaptive_avg_pool(inputs[0]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
inputs[0]->get_shape(),
op->get_output_shape(0));
return true;
}
template <>
bool evaluate_node<ngraph::op::v8::AdaptiveAvgPool>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v8::AdaptiveAvgPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v8::AdaptiveAvgPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v8::AdaptiveAvgPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v8::AdaptiveAvgPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v8::AdaptiveAvgPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v8::AdaptiveAvgPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v8::AdaptiveAvgPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v8::AdaptiveAvgPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v8::AdaptiveAvgPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v8::AdaptiveAvgPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v8::AdaptiveAvgPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v8::AdaptiveAvgPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v8::AdaptiveAvgPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v8::AdaptiveAvgPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v8::AdaptiveAvgPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v8::AdaptiveAvgPool>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,109 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
// clang-format off
#include "evaluate_node.hpp"
#include "ngraph/runtime/reference/adaptive_avg_pool.hpp"
#include "ngraph/runtime/reference/adaptive_max_pool.hpp"
// clang-format on
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v8::AdaptiveMaxPool>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
if (op->get_index_element_type() == ngraph::element::i32) {
ngraph::runtime::reference::adaptive_max_pool(inputs[0]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
outputs[1]->get_data_ptr<int32_t>(),
inputs[0]->get_shape(),
op->get_output_shape(0));
} else if (op->get_index_element_type() == ngraph::element::i64) {
ngraph::runtime::reference::adaptive_max_pool(inputs[0]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
outputs[1]->get_data_ptr<int64_t>(),
inputs[0]->get_shape(),
op->get_output_shape(0));
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v8::AdaptiveMaxPool>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v8::AdaptiveMaxPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v8::AdaptiveMaxPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v8::AdaptiveMaxPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v8::AdaptiveMaxPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v8::AdaptiveMaxPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v8::AdaptiveMaxPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v8::AdaptiveMaxPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v8::AdaptiveMaxPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v8::AdaptiveMaxPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v8::AdaptiveMaxPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v8::AdaptiveMaxPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v8::AdaptiveMaxPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v8::AdaptiveMaxPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v8::AdaptiveMaxPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v8::AdaptiveMaxPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v8::AdaptiveMaxPool>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,64 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v3::Assign>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
outputs[0]->set_unary(inputs[0]);
void* input = inputs[0]->get_data_ptr();
outputs[0]->write(input, outputs[0]->get_size_in_bytes());
return true;
}
template <>
bool evaluate_node<ngraph::op::v3::Assign>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v3::Assign>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v3::Assign>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v3::Assign>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v3::Assign>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v3::Assign>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v3::Assign>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v3::Assign>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v3::Assign>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v3::Assign>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v3::Assign>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v3::Assign>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v3::Assign>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v3::Assign>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v3::Assign>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v3::Assign>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v3::Assign>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,73 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/avg_pool.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v1::AvgPool>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::avg_pool<T>(inputs[0]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
inputs[0]->get_shape(),
op->get_output_shape(0),
op->get_kernel(),
op->get_strides(),
op->get_pads_begin(),
op->get_pads_end(),
!op->get_exclude_pad());
return true;
}
template <>
bool evaluate_node<ngraph::op::v1::AvgPool>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v1::AvgPool>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v1::AvgPool>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v1::AvgPool>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v1::AvgPool>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v1::AvgPool>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v1::AvgPool>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v1::AvgPool>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v1::AvgPool>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v1::AvgPool>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v1::AvgPool>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v1::AvgPool>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v1::AvgPool>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v1::AvgPool>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v1::AvgPool>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v1::AvgPool>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v1::AvgPool>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,197 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/batch_norm.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::BatchNormInference>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::batch_norm_inference<T>(static_cast<float>(op->get_eps_value()),
inputs[2]->get_data_ptr<T>(),
inputs[0]->get_data_ptr<T>(),
inputs[1]->get_data_ptr<T>(),
inputs[3]->get_data_ptr<T>(),
inputs[4]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
inputs[2]->get_shape());
return true;
}
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v5::BatchNormInference>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::batch_norm_inference<T>(static_cast<float>(static_cast<float>(op->get_eps_value())),
inputs[0]->get_data_ptr<const T>(),
inputs[1]->get_data_ptr<const T>(),
inputs[2]->get_data_ptr<const T>(),
inputs[3]->get_data_ptr<const T>(),
inputs[4]->get_data_ptr<const T>(),
outputs[0]->get_data_ptr<T>(),
op->get_input_shape(0));
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::BatchNormInference>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::BatchNormInference>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}
template <>
bool evaluate_node<ngraph::op::v5::BatchNormInference>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v5::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v5::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v5::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v5::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v5::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v5::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v5::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v5::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v5::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v5::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v5::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v5::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v5::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v5::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v5::BatchNormInference>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v5::BatchNormInference>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,130 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/binary_convolution.hpp"
#include "evaluate_node.hpp"
namespace bin_conv_v1 {
template <ngraph::element::Type_t t_in, ngraph::element::Type_t t_f>
inline void evaluate(const std::shared_ptr<ngraph::op::v1::BinaryConvolution>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T_IN = typename ngraph::element_type_traits<t_in>::value_type;
using T_F = typename ngraph::element_type_traits<t_f>::value_type;
const auto in_data_ptr = inputs[0]->get_data_ptr<T_IN>();
const auto filter_data_ptr = inputs[1]->get_data_ptr<T_F>();
auto out_data_ptr = outputs[0]->get_data_ptr<T_IN>();
const auto in_shape = inputs[0]->get_shape();
const auto filter_shape = inputs[1]->get_shape();
const auto out_shape = outputs[0]->get_shape();
ngraph::runtime::reference::binary_convolution<T_IN, T_F>(in_data_ptr,
filter_data_ptr,
out_data_ptr,
in_shape,
filter_shape,
out_shape,
op->get_strides(),
op->get_dilations(),
op->get_pads_begin(),
op->get_pads_end(),
op->get_pad_value());
}
} // namespace bin_conv_v1
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v1::BinaryConvolution>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
switch (inputs[1]->get_element_type()) {
case ngraph::element::Type_t::u1:
bin_conv_v1::evaluate<ET, ngraph::element::Type_t::u8>(op, outputs, inputs);
break;
default:
throw std::runtime_error("BinaryConvolution supports only u1 element type for filters input");
break;
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v1::BinaryConvolution>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v1::BinaryConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v1::BinaryConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v1::BinaryConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v1::BinaryConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v1::BinaryConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v1::BinaryConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v1::BinaryConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v1::BinaryConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v1::BinaryConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v1::BinaryConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v1::BinaryConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v1::BinaryConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v1::BinaryConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v1::BinaryConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v1::BinaryConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v1::BinaryConvolution>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,217 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/bucketize.hpp"
#include "evaluate_node.hpp"
namespace bucketize_v3 {
template <ngraph::element::Type_t t1, ngraph::element::Type_t t2, ngraph::element::Type_t t3>
inline void evaluate(const std::shared_ptr<ngraph::op::v3::Bucketize>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T1 = typename ngraph::element_type_traits<t1>::value_type;
using T2 = typename ngraph::element_type_traits<t2>::value_type;
using T3 = typename ngraph::element_type_traits<t3>::value_type;
ngraph::runtime::reference::bucketize<T1, T2, T3>(inputs[0]->get_data_ptr<T1>(),
inputs[1]->get_data_ptr<T2>(),
outputs[0]->get_data_ptr<T3>(),
op->get_input_shape(0),
op->get_input_shape(1),
op->get_with_right_bound());
}
static inline constexpr uint16_t getElementMask(ngraph::element::Type_t type1, ngraph::element::Type_t type2) {
return (static_cast<uint8_t>(type1)) | (static_cast<uint8_t>(type2) << 8);
}
} // namespace bucketize_v3
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v3::Bucketize>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
switch (bucketize_v3::getElementMask(op->get_input_element_type(0), op->get_input_element_type(1))) {
case bucketize_v3::getElementMask(ngraph::element::Type_t::f32, ngraph::element::Type_t::f32):
bucketize_v3::evaluate<ngraph::element::Type_t::f32, ngraph::element::Type_t::f32, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::f32, ngraph::element::Type_t::f16):
bucketize_v3::evaluate<ngraph::element::Type_t::f32, ngraph::element::Type_t::f16, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::f32, ngraph::element::Type_t::i32):
bucketize_v3::evaluate<ngraph::element::Type_t::f32, ngraph::element::Type_t::i32, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::f32, ngraph::element::Type_t::i64):
bucketize_v3::evaluate<ngraph::element::Type_t::f32, ngraph::element::Type_t::i64, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::f32, ngraph::element::Type_t::i8):
bucketize_v3::evaluate<ngraph::element::Type_t::f32, ngraph::element::Type_t::i8, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::f32, ngraph::element::Type_t::u8):
bucketize_v3::evaluate<ngraph::element::Type_t::f32, ngraph::element::Type_t::u8, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::f16, ngraph::element::Type_t::f32):
bucketize_v3::evaluate<ngraph::element::Type_t::f16, ngraph::element::Type_t::f32, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::f16, ngraph::element::Type_t::f16):
bucketize_v3::evaluate<ngraph::element::Type_t::f16, ngraph::element::Type_t::f16, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::f16, ngraph::element::Type_t::i32):
bucketize_v3::evaluate<ngraph::element::Type_t::f16, ngraph::element::Type_t::i32, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::f16, ngraph::element::Type_t::i64):
bucketize_v3::evaluate<ngraph::element::Type_t::f16, ngraph::element::Type_t::i64, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::f16, ngraph::element::Type_t::i8):
bucketize_v3::evaluate<ngraph::element::Type_t::f16, ngraph::element::Type_t::i8, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::f16, ngraph::element::Type_t::u8):
bucketize_v3::evaluate<ngraph::element::Type_t::f16, ngraph::element::Type_t::u8, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::i32, ngraph::element::Type_t::f32):
bucketize_v3::evaluate<ngraph::element::Type_t::i32, ngraph::element::Type_t::f32, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::i32, ngraph::element::Type_t::f16):
bucketize_v3::evaluate<ngraph::element::Type_t::i32, ngraph::element::Type_t::f16, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::i32, ngraph::element::Type_t::i32):
bucketize_v3::evaluate<ngraph::element::Type_t::i32, ngraph::element::Type_t::i32, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::i32, ngraph::element::Type_t::i64):
bucketize_v3::evaluate<ngraph::element::Type_t::i32, ngraph::element::Type_t::i64, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::i32, ngraph::element::Type_t::i8):
bucketize_v3::evaluate<ngraph::element::Type_t::i32, ngraph::element::Type_t::i8, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::i32, ngraph::element::Type_t::u8):
bucketize_v3::evaluate<ngraph::element::Type_t::i32, ngraph::element::Type_t::u8, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::i64, ngraph::element::Type_t::f32):
bucketize_v3::evaluate<ngraph::element::Type_t::i64, ngraph::element::Type_t::f32, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::i64, ngraph::element::Type_t::f16):
bucketize_v3::evaluate<ngraph::element::Type_t::i64, ngraph::element::Type_t::f16, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::i64, ngraph::element::Type_t::i32):
bucketize_v3::evaluate<ngraph::element::Type_t::i64, ngraph::element::Type_t::i32, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::i64, ngraph::element::Type_t::i64):
bucketize_v3::evaluate<ngraph::element::Type_t::i64, ngraph::element::Type_t::i64, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::i64, ngraph::element::Type_t::i8):
bucketize_v3::evaluate<ngraph::element::Type_t::i64, ngraph::element::Type_t::i8, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::i64, ngraph::element::Type_t::u8):
bucketize_v3::evaluate<ngraph::element::Type_t::i64, ngraph::element::Type_t::u8, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::i8, ngraph::element::Type_t::f32):
bucketize_v3::evaluate<ngraph::element::Type_t::i8, ngraph::element::Type_t::f32, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::i8, ngraph::element::Type_t::f16):
bucketize_v3::evaluate<ngraph::element::Type_t::i8, ngraph::element::Type_t::f16, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::i8, ngraph::element::Type_t::i32):
bucketize_v3::evaluate<ngraph::element::Type_t::i8, ngraph::element::Type_t::i32, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::i8, ngraph::element::Type_t::i64):
bucketize_v3::evaluate<ngraph::element::Type_t::i8, ngraph::element::Type_t::i64, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::i8, ngraph::element::Type_t::i8):
bucketize_v3::evaluate<ngraph::element::Type_t::i8, ngraph::element::Type_t::i8, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::i8, ngraph::element::Type_t::u8):
bucketize_v3::evaluate<ngraph::element::Type_t::i8, ngraph::element::Type_t::u8, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::u8, ngraph::element::Type_t::f32):
bucketize_v3::evaluate<ngraph::element::Type_t::u8, ngraph::element::Type_t::f32, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::u8, ngraph::element::Type_t::f16):
bucketize_v3::evaluate<ngraph::element::Type_t::u8, ngraph::element::Type_t::f16, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::u8, ngraph::element::Type_t::i32):
bucketize_v3::evaluate<ngraph::element::Type_t::u8, ngraph::element::Type_t::i32, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::u8, ngraph::element::Type_t::i64):
bucketize_v3::evaluate<ngraph::element::Type_t::u8, ngraph::element::Type_t::i64, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::u8, ngraph::element::Type_t::i8):
bucketize_v3::evaluate<ngraph::element::Type_t::u8, ngraph::element::Type_t::i8, ET>(op, outputs, inputs);
break;
case bucketize_v3::getElementMask(ngraph::element::Type_t::u8, ngraph::element::Type_t::u8):
bucketize_v3::evaluate<ngraph::element::Type_t::u8, ngraph::element::Type_t::u8, ET>(op, outputs, inputs);
break;
default:
return false;
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v3::Bucketize>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v3::Bucketize>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v3::Bucketize>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v3::Bucketize>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v3::Bucketize>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v3::Bucketize>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v3::Bucketize>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v3::Bucketize>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v3::Bucketize>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v3::Bucketize>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v3::Bucketize>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v3::Bucketize>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v3::Bucketize>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v3::Bucketize>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v3::Bucketize>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v3::Bucketize>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v3::Bucketize>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,67 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/ceiling.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::Ceiling>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::ceiling<T>(inputs[0]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
ngraph::shape_size(inputs[0]->get_shape()));
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::Ceiling>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::Ceiling>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::Ceiling>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::Ceiling>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::Ceiling>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::Ceiling>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::Ceiling>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::Ceiling>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::Ceiling>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::Ceiling>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::Ceiling>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::Ceiling>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::Ceiling>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::Ceiling>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::Ceiling>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::Ceiling>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::Ceiling>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,169 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/convert.hpp"
#include "evaluate_node.hpp"
namespace convert_like_v1 {
template <ngraph::element::Type_t ti, ngraph::element::Type_t to>
inline void evaluate(const std::shared_ptr<ngraph::op::v1::ConvertLike>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
outputs[0]->set_shape(inputs[0]->get_shape());
size_t element_count = ngraph::shape_size(outputs[0]->get_shape());
if (((ti == ngraph::element::u1) || (to == ngraph::element::u1)) ||
((ti == ngraph::element::u4) || (to == ngraph::element::u4)) ||
((ti == ngraph::element::i4) || (to == ngraph::element::i4))) {
ngraph::runtime::reference::detail::lp_convert(inputs[0]->get_data_ptr<ti>(),
outputs[0]->get_data_ptr<to>(),
element_count,
ti,
to);
} else {
ngraph::runtime::reference::convert(inputs[0]->get_data_ptr<ti>(),
outputs[0]->get_data_ptr<to>(),
element_count);
}
}
} // namespace convert_like_v1
template <ngraph::element::Type_t OUT_ET>
bool evaluate(const std::shared_ptr<ngraph::op::v1::ConvertLike>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
switch (inputs[0]->get_element_type()) {
case ngraph::element::Type_t::boolean:
convert_like_v1::evaluate<ngraph::element::Type_t::boolean, OUT_ET>(op, outputs, inputs);
break;
case ngraph::element::Type_t::u1:
convert_like_v1::evaluate<ngraph::element::Type_t::u1, OUT_ET>(op, outputs, inputs);
break;
case ngraph::element::Type_t::u4:
convert_like_v1::evaluate<ngraph::element::Type_t::u4, OUT_ET>(op, outputs, inputs);
break;
case ngraph::element::Type_t::u8:
convert_like_v1::evaluate<ngraph::element::Type_t::u8, OUT_ET>(op, outputs, inputs);
break;
case ngraph::element::Type_t::u16:
convert_like_v1::evaluate<ngraph::element::Type_t::u16, OUT_ET>(op, outputs, inputs);
break;
case ngraph::element::Type_t::u32:
convert_like_v1::evaluate<ngraph::element::Type_t::u32, OUT_ET>(op, outputs, inputs);
break;
case ngraph::element::Type_t::u64:
convert_like_v1::evaluate<ngraph::element::Type_t::u64, OUT_ET>(op, outputs, inputs);
break;
case ngraph::element::Type_t::i4:
convert_like_v1::evaluate<ngraph::element::Type_t::i4, OUT_ET>(op, outputs, inputs);
break;
case ngraph::element::Type_t::i8:
convert_like_v1::evaluate<ngraph::element::Type_t::i8, OUT_ET>(op, outputs, inputs);
break;
case ngraph::element::Type_t::i16:
convert_like_v1::evaluate<ngraph::element::Type_t::i16, OUT_ET>(op, outputs, inputs);
break;
case ngraph::element::Type_t::i32:
convert_like_v1::evaluate<ngraph::element::Type_t::i32, OUT_ET>(op, outputs, inputs);
break;
case ngraph::element::Type_t::i64:
convert_like_v1::evaluate<ngraph::element::Type_t::i64, OUT_ET>(op, outputs, inputs);
break;
case ngraph::element::Type_t::bf16:
convert_like_v1::evaluate<ngraph::element::Type_t::bf16, OUT_ET>(op, outputs, inputs);
break;
case ngraph::element::Type_t::f16:
convert_like_v1::evaluate<ngraph::element::Type_t::f16, OUT_ET>(op, outputs, inputs);
break;
case ngraph::element::Type_t::f32:
convert_like_v1::evaluate<ngraph::element::Type_t::f32, OUT_ET>(op, outputs, inputs);
break;
case ngraph::element::Type_t::f64:
convert_like_v1::evaluate<ngraph::element::Type_t::f64, OUT_ET>(op, outputs, inputs);
break;
default:
return false;
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v1::ConvertLike>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v1::ConvertLike>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v1::ConvertLike>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v1::ConvertLike>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v1::ConvertLike>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v1::ConvertLike>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v1::ConvertLike>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v1::ConvertLike>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v1::ConvertLike>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v1::ConvertLike>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v1::ConvertLike>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v1::ConvertLike>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v1::ConvertLike>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v1::ConvertLike>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v1::ConvertLike>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v1::ConvertLike>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v1::ConvertLike>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,327 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/convert_color_nv12.hpp"
#include "evaluate_node.hpp"
template <ov::element::Type_t ET>
inline bool evaluate(const std::shared_ptr<ngraph::op::v8::NV12toRGB>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
return ngraph::runtime::reference::color_convert_nv12<ET>(
op,
outputs,
inputs,
ov::op::util::ConvertColorNV12Base::ColorConversion::NV12_TO_RGB);
}
template <ov::element::Type_t ET>
inline bool evaluate(const std::shared_ptr<ngraph::op::v8::NV12toBGR>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
return ngraph::runtime::reference::color_convert_nv12<ET>(
op,
outputs,
inputs,
ov::op::util::ConvertColorNV12Base::ColorConversion::NV12_TO_BGR);
}
template <ov::element::Type_t ET>
inline bool evaluate(const std::shared_ptr<ngraph::op::v8::I420toRGB>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
return ngraph::runtime::reference::color_convert_i420<ET>(
op,
outputs,
inputs,
ov::op::util::ConvertColorI420Base::ColorConversion::I420_TO_RGB);
}
template <ov::element::Type_t ET>
inline bool evaluate(const std::shared_ptr<ngraph::op::v8::I420toBGR>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
return ngraph::runtime::reference::color_convert_i420<ET>(
op,
outputs,
inputs,
ov::op::util::ConvertColorI420Base::ColorConversion::I420_TO_BGR);
}
template <>
bool evaluate_node<ngraph::op::v8::NV12toRGB>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v8::NV12toRGB>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v8::NV12toRGB>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v8::NV12toRGB>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v8::NV12toRGB>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v8::NV12toRGB>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v8::NV12toRGB>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v8::NV12toRGB>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v8::NV12toRGB>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v8::NV12toRGB>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v8::NV12toRGB>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v8::NV12toRGB>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v8::NV12toRGB>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v8::NV12toRGB>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v8::NV12toRGB>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v8::NV12toRGB>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v8::NV12toRGB>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}
template <>
bool evaluate_node<ngraph::op::v8::NV12toBGR>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v8::NV12toBGR>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v8::NV12toBGR>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v8::NV12toBGR>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v8::NV12toBGR>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v8::NV12toBGR>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v8::NV12toBGR>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v8::NV12toBGR>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v8::NV12toBGR>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v8::NV12toBGR>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v8::NV12toBGR>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v8::NV12toBGR>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v8::NV12toBGR>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v8::NV12toBGR>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v8::NV12toBGR>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v8::NV12toBGR>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v8::NV12toBGR>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}
template <>
bool evaluate_node<ngraph::op::v8::I420toRGB>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v8::I420toRGB>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v8::I420toRGB>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v8::I420toRGB>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v8::I420toRGB>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v8::I420toRGB>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v8::I420toRGB>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v8::I420toRGB>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v8::I420toRGB>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v8::I420toRGB>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v8::I420toRGB>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v8::I420toRGB>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v8::I420toRGB>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v8::I420toRGB>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v8::I420toRGB>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v8::I420toRGB>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v8::I420toRGB>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}
template <>
bool evaluate_node<ngraph::op::v8::I420toBGR>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v8::I420toBGR>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v8::I420toBGR>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v8::I420toBGR>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v8::I420toBGR>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v8::I420toBGR>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v8::I420toBGR>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v8::I420toBGR>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v8::I420toBGR>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v8::I420toBGR>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v8::I420toBGR>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v8::I420toBGR>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v8::I420toBGR>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v8::I420toBGR>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v8::I420toBGR>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v8::I420toBGR>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v8::I420toBGR>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,109 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/convolution.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v1::Convolution>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
const auto filter_data = inputs[1]->get_data_ptr<ET>();
auto out_data_ptr = outputs[0]->get_data_ptr<ET>();
const auto in_data_ptr = inputs[0]->get_data_ptr<ET>();
const auto& out_shape = outputs[0]->get_shape();
const auto& in_shape = inputs[0]->get_shape();
const auto& filter_shape = inputs[1]->get_shape();
ngraph::runtime::reference::convolution<typename ngraph::element_type_traits<ET>::value_type>(in_data_ptr,
filter_data,
out_data_ptr,
in_shape,
filter_shape,
out_shape,
op->get_strides(),
op->get_dilations(),
op->get_pads_begin(),
op->get_pads_end());
return true;
}
template <>
bool evaluate_node<ngraph::op::v1::Convolution>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v1::Convolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v1::Convolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v1::Convolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v1::Convolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v1::Convolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v1::Convolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v1::Convolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v1::Convolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v1::Convolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v1::Convolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v1::Convolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v1::Convolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v1::Convolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v1::Convolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v1::Convolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v1::Convolution>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,115 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/convolution_backprop_data.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v1::ConvolutionBackpropData>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
const auto filter_data = inputs[1]->get_data_ptr<ET>();
auto out_data_ptr = outputs[0]->get_data_ptr<ET>();
const auto in_data_ptr = inputs[0]->get_data_ptr<ET>();
const auto& out_shape = outputs[0]->get_shape();
const auto& in_shape = inputs[0]->get_shape();
const auto& filter_shape = inputs[1]->get_shape();
ngraph::Strides in_dilation(std::vector<size_t>(in_shape.size() - 2));
std::fill(in_dilation.begin(), in_dilation.end(), 1);
ngraph::runtime::reference::convolution_backprop_in<typename ngraph::element_type_traits<ET>::value_type>(
in_data_ptr,
filter_data,
out_data_ptr,
in_shape,
filter_shape,
out_shape,
in_dilation,
op->get_dilations(),
op->get_pads_begin(),
op->get_pads_end(),
op->get_strides(),
op->get_output_padding());
return true;
}
template <>
bool evaluate_node<ngraph::op::v1::ConvolutionBackpropData>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(
ov::as_type_ptr<ngraph::op::v1::ConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v1::ConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v1::ConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v1::ConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v1::ConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v1::ConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v1::ConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v1::ConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v1::ConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v1::ConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v1::ConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v1::ConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v1::ConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v1::ConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v1::ConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v1::ConvolutionBackpropData>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,101 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/ctc_greedy_decoder.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::CTCGreedyDecoder>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::ctc_greedy_decoder<T>(inputs[0]->get_data_ptr<const T>(),
inputs[1]->get_data_ptr<const T>(),
outputs[0]->get_data_ptr<T>(),
inputs[0]->get_shape(),
inputs[1]->get_shape(),
outputs[0]->get_shape(),
op->get_ctc_merge_repeated());
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::CTCGreedyDecoder>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::CTCGreedyDecoder>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::CTCGreedyDecoder>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::CTCGreedyDecoder>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::CTCGreedyDecoder>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::CTCGreedyDecoder>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::CTCGreedyDecoder>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::CTCGreedyDecoder>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::CTCGreedyDecoder>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::CTCGreedyDecoder>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::CTCGreedyDecoder>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::CTCGreedyDecoder>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::CTCGreedyDecoder>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::CTCGreedyDecoder>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::CTCGreedyDecoder>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::CTCGreedyDecoder>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::CTCGreedyDecoder>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,156 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/ctc_greedy_decoder_seq_len.hpp"
#include "evaluate_node.hpp"
namespace ctc_greedy_decoder_v6 {
template <ngraph::element::Type_t T1, ngraph::element::Type_t T2, ngraph::element::Type_t TOUT>
inline void evaluate(const std::shared_ptr<ngraph::op::v6::CTCGreedyDecoderSeqLen>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using TF = typename ngraph::element_type_traits<T1>::value_type;
using TI = typename ngraph::element_type_traits<T2>::value_type;
using TIND1 = typename ngraph::element_type_traits<TOUT>::value_type;
TI blank_index_val = static_cast<TI>(inputs[0]->get_shape().back() - 1);
const TI* blank_index = &blank_index_val;
if (inputs.size() == 3) {
blank_index = inputs[2]->get_data_ptr<const TI>();
}
if (op->get_sequence_length_type() == ngraph::element::i32) {
ngraph::runtime::reference::ctc_greedy_decoder_seq_len<TF>(inputs[0]->get_data_ptr<const TF>(),
inputs[1]->get_data_ptr<const TI>(),
blank_index,
outputs[0]->get_data_ptr<TIND1>(),
outputs[1]->get_data_ptr<int32_t>(),
inputs[0]->get_shape(),
outputs[0]->get_shape(),
op->get_merge_repeated());
} else if (op->get_sequence_length_type() == ngraph::element::i64) {
ngraph::runtime::reference::ctc_greedy_decoder_seq_len<TF>(inputs[0]->get_data_ptr<const TF>(),
inputs[1]->get_data_ptr<const TI>(),
blank_index,
outputs[0]->get_data_ptr<TIND1>(),
outputs[1]->get_data_ptr<int64_t>(),
inputs[0]->get_shape(),
outputs[0]->get_shape(),
op->get_merge_repeated());
}
}
} // namespace ctc_greedy_decoder_v6
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v6::CTCGreedyDecoderSeqLen>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
const auto& dataType = inputs[0]->get_element_type();
const auto& seqLenType = inputs[1]->get_element_type();
if (dataType == ngraph::element::Type_t::f16 && seqLenType == ngraph::element::Type_t::i32) {
ctc_greedy_decoder_v6::evaluate<ngraph::element::Type_t::f16, ngraph::element::Type_t::i32, ET>(op,
outputs,
inputs);
} else if (dataType == ngraph::element::Type_t::f32 && seqLenType == ngraph::element::Type_t::i32) {
ctc_greedy_decoder_v6::evaluate<ngraph::element::Type_t::f32, ngraph::element::Type_t::i32, ET>(op,
outputs,
inputs);
} else if (dataType == ngraph::element::Type_t::f64 && seqLenType == ngraph::element::Type_t::i32) {
ctc_greedy_decoder_v6::evaluate<ngraph::element::Type_t::f64, ngraph::element::Type_t::i32, ET>(op,
outputs,
inputs);
} else if (dataType == ngraph::element::Type_t::f16 && seqLenType == ngraph::element::Type_t::i64) {
ctc_greedy_decoder_v6::evaluate<ngraph::element::Type_t::f16, ngraph::element::Type_t::i64, ET>(op,
outputs,
inputs);
} else if (dataType == ngraph::element::Type_t::f32 && seqLenType == ngraph::element::Type_t::i64) {
ctc_greedy_decoder_v6::evaluate<ngraph::element::Type_t::f32, ngraph::element::Type_t::i64, ET>(op,
outputs,
inputs);
} else if (dataType == ngraph::element::Type_t::f64 && seqLenType == ngraph::element::Type_t::i64) {
ctc_greedy_decoder_v6::evaluate<ngraph::element::Type_t::f64, ngraph::element::Type_t::i64, ET>(op,
outputs,
inputs);
} else {
return false;
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v6::CTCGreedyDecoderSeqLen>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v6::CTCGreedyDecoderSeqLen>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v6::CTCGreedyDecoderSeqLen>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v6::CTCGreedyDecoderSeqLen>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v6::CTCGreedyDecoderSeqLen>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v6::CTCGreedyDecoderSeqLen>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v6::CTCGreedyDecoderSeqLen>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v6::CTCGreedyDecoderSeqLen>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v6::CTCGreedyDecoderSeqLen>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v6::CTCGreedyDecoderSeqLen>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v6::CTCGreedyDecoderSeqLen>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v6::CTCGreedyDecoderSeqLen>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v6::CTCGreedyDecoderSeqLen>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v6::CTCGreedyDecoderSeqLen>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v6::CTCGreedyDecoderSeqLen>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v6::CTCGreedyDecoderSeqLen>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v6::CTCGreedyDecoderSeqLen>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,115 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
// clang-format off
#include "evaluate_node.hpp"
#include "ngraph/runtime/reference/ctc_loss.hpp"
// clang-format on
namespace ctc_loss_v4 {
template <ngraph::element::Type_t t1,
ngraph::element::Type_t t2,
typename std::enable_if<
!std::is_floating_point<typename ngraph::element_type_traits<t1>::value_type>::value &&
!std::is_same<typename ngraph::element_type_traits<t1>::value_type, ngraph::bfloat16>::value &&
!std::is_same<typename ngraph::element_type_traits<t1>::value_type, ngraph::float16>::value,
bool>::type = true>
inline void evaluate(const std::shared_ptr<ngraph::op::v4::CTCLoss>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
OPENVINO_ASSERT(false,
"The data type for logits is expected to be a floating point type. Got:",
ngraph::element::Type(t1));
}
template <ngraph::element::Type_t t1,
ngraph::element::Type_t t2,
typename std::enable_if<
std::is_floating_point<typename ngraph::element_type_traits<t1>::value_type>::value ||
std::is_same<typename ngraph::element_type_traits<t1>::value_type, ngraph::bfloat16>::value ||
std::is_same<typename ngraph::element_type_traits<t1>::value_type, ngraph::float16>::value,
bool>::type = true>
inline void evaluate(const std::shared_ptr<ngraph::op::v4::CTCLoss>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T1 = typename ngraph::element_type_traits<t1>::value_type;
using T2 = typename ngraph::element_type_traits<t2>::value_type;
ngraph::runtime::reference::CTCLoss<T1, T2>(inputs[0]->get_data_ptr<T1>(),
inputs[0]->get_shape(),
inputs[1]->get_data_ptr<T2>(),
inputs[2]->get_data_ptr<T2>(),
inputs[3]->get_data_ptr<T2>(),
inputs[4]->get_data_ptr<T2>(),
op->get_preprocess_collapse_repeated(),
op->get_ctc_merge_repeated(),
op->get_unique(),
outputs[0]->get_data_ptr<T1>());
}
} // namespace ctc_loss_v4
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v4::CTCLoss>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
switch (inputs[1]->get_element_type()) {
case ngraph::element::Type_t::i32:
ctc_loss_v4::evaluate<ET, ngraph::element::Type_t::i32>(op, outputs, inputs);
break;
case ngraph::element::Type_t::i64:
ctc_loss_v4::evaluate<ET, ngraph::element::Type_t::i64>(op, outputs, inputs);
break;
default:
return false;
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v4::CTCLoss>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v4::CTCLoss>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v4::CTCLoss>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v4::CTCLoss>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v4::CTCLoss>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v4::CTCLoss>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v4::CTCLoss>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v4::CTCLoss>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v4::CTCLoss>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v4::CTCLoss>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v4::CTCLoss>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v4::CTCLoss>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v4::CTCLoss>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v4::CTCLoss>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v4::CTCLoss>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v4::CTCLoss>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v4::CTCLoss>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,88 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
// clang-format off
#include "evaluate_node.hpp"
#include "ngraph/runtime/reference/cum_sum.hpp"
// clang-format on
namespace cum_sum_v0 {
template <ngraph::element::Type_t t1, ngraph::element::Type_t t2>
inline void evaluate(const std::shared_ptr<ngraph::op::v0::CumSum>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T1 = typename ngraph::element_type_traits<t1>::value_type;
using T2 = typename ngraph::element_type_traits<t2>::value_type;
ngraph::runtime::reference::cumsum<T1, T2>(inputs[0]->get_data_ptr<T1>(),
inputs[1]->get_data_ptr<T2>(),
outputs[0]->get_data_ptr<T1>(),
inputs[0]->get_shape(),
op->is_exclusive(),
op->is_reverse());
}
} // namespace cum_sum_v0
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::CumSum>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
switch (inputs[1]->get_element_type()) {
case ngraph::element::Type_t::i64:
cum_sum_v0::evaluate<ET, ngraph::element::Type_t::i64>(op, outputs, inputs);
break;
default:
cum_sum_v0::evaluate<ET, ngraph::element::Type_t::i32>(op, outputs, inputs);
break;
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::CumSum>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::CumSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::CumSum>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::CumSum>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::CumSum>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::CumSum>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::CumSum>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::CumSum>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::CumSum>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::CumSum>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::CumSum>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::CumSum>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::CumSum>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::CumSum>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::CumSum>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::CumSum>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::CumSum>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,249 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/deformable_convolution.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v8::DeformableConvolution>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
const auto in_data_ptr = inputs[0]->get_data_ptr<ET>();
const auto offset_data_ptr = inputs[1]->get_data_ptr<ET>();
const auto filter_data_ptr = inputs[2]->get_data_ptr<ET>();
auto out_data_ptr = outputs[0]->get_data_ptr<ET>();
const auto& out_shape = outputs[0]->get_shape();
const auto& in_shape = inputs[0]->get_shape();
const auto& offset_shape = inputs[1]->get_shape();
const auto& filter_shape = inputs[2]->get_shape();
if (inputs.size() == 3) {
ngraph::runtime::reference::deformable_convolution<typename ngraph::element_type_traits<ET>::value_type>(
in_data_ptr,
offset_data_ptr,
filter_data_ptr,
out_data_ptr,
in_shape,
offset_shape,
filter_shape,
out_shape,
op->get_strides(),
op->get_dilations(),
op->get_pads_begin(),
op->get_pads_end(),
op->get_group(),
op->get_deformable_group(),
op->get_bilinear_interpolation_pad());
} else {
const auto mask_data_ptr = inputs[3]->get_data_ptr<ET>();
const auto& mask_shape = inputs[3]->get_shape();
ngraph::runtime::reference::deformable_convolution<typename ngraph::element_type_traits<ET>::value_type>(
in_data_ptr,
offset_data_ptr,
filter_data_ptr,
mask_data_ptr,
out_data_ptr,
in_shape,
offset_shape,
filter_shape,
mask_shape,
out_shape,
op->get_strides(),
op->get_dilations(),
op->get_pads_begin(),
op->get_pads_end(),
op->get_group(),
op->get_deformable_group(),
op->get_bilinear_interpolation_pad());
}
return true;
}
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v1::DeformableConvolution>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
const auto in_data_ptr = inputs[0]->get_data_ptr<ET>();
const auto offset_data_ptr = inputs[1]->get_data_ptr<ET>();
const auto filter_data_ptr = inputs[2]->get_data_ptr<ET>();
auto out_data_ptr = outputs[0]->get_data_ptr<ET>();
const auto& out_shape = outputs[0]->get_shape();
const auto& in_shape = inputs[0]->get_shape();
const auto& offset_shape = inputs[1]->get_shape();
const auto& filter_shape = inputs[2]->get_shape();
ngraph::runtime::reference::deformable_convolution<typename ngraph::element_type_traits<ET>::value_type>(
in_data_ptr,
offset_data_ptr,
filter_data_ptr,
out_data_ptr,
in_shape,
offset_shape,
filter_shape,
out_shape,
op->get_strides(),
op->get_dilations(),
op->get_pads_begin(),
op->get_pads_end(),
op->get_group(),
op->get_deformable_group());
return true;
}
template <>
bool evaluate_node<ngraph::op::v8::DeformableConvolution>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v8::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v8::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v8::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v8::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v8::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v8::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v8::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v8::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v8::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v8::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v8::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v8::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v8::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v8::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v8::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v8::DeformableConvolution>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}
template <>
bool evaluate_node<ngraph::op::v1::DeformableConvolution>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v1::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v1::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v1::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v1::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v1::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v1::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v1::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v1::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v1::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v1::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v1::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v1::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v1::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v1::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v1::DeformableConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v1::DeformableConvolution>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,133 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/deformable_psroi_pooling.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v1::DeformablePSROIPooling>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
NGRAPH_CHECK(inputs.size() > 1 && inputs[1]->get_shape().size() == 2,
"2D tensor must be provided as second input. ");
outputs[0]->set_shape({inputs[1]->get_shape()[0],
static_cast<size_t>(op->get_output_dim()),
static_cast<size_t>(op->get_group_size()),
static_cast<size_t>(op->get_group_size())});
const bool has_offset_intput = inputs.size() == 3;
if (has_offset_intput) {
ngraph::runtime::reference::deformable_psroi_pooling<T>(inputs[0]->get_data_ptr<T>(),
inputs[0]->get_shape(),
inputs[1]->get_data_ptr<T>(),
inputs[1]->get_shape(),
inputs[2]->get_data_ptr<T>(),
inputs[2]->get_shape(),
outputs[0]->get_data_ptr<T>(),
outputs[0]->get_shape(),
op->get_mode(),
op->get_spatial_scale(),
op->get_spatial_bins_x(),
op->get_spatial_bins_y(),
op->get_trans_std(),
op->get_part_size());
} else {
ngraph::runtime::reference::deformable_psroi_pooling<T>(inputs[0]->get_data_ptr<T>(),
inputs[0]->get_shape(),
inputs[1]->get_data_ptr<T>(),
inputs[1]->get_shape(),
nullptr,
ngraph::Shape(),
outputs[0]->get_data_ptr<T>(),
outputs[0]->get_shape(),
op->get_mode(),
op->get_spatial_scale(),
op->get_spatial_bins_x(),
op->get_spatial_bins_y(),
op->get_trans_std(),
op->get_part_size());
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v1::DeformablePSROIPooling>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v1::DeformablePSROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v1::DeformablePSROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v1::DeformablePSROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v1::DeformablePSROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v1::DeformablePSROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v1::DeformablePSROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v1::DeformablePSROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v1::DeformablePSROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v1::DeformablePSROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v1::DeformablePSROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v1::DeformablePSROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v1::DeformablePSROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v1::DeformablePSROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v1::DeformablePSROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v1::DeformablePSROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v1::DeformablePSROIPooling>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,225 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/detection_output.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::DetectionOutput>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::referenceDetectionOutput<T> refDetOut(op->get_attrs(),
op->get_input_shape(0),
op->get_input_shape(1),
op->get_input_shape(2),
op->get_output_shape(0));
if (op->get_input_size() == 3) {
refDetOut.run(inputs[0]->get_data_ptr<const T>(),
inputs[1]->get_data_ptr<const T>(),
inputs[2]->get_data_ptr<const T>(),
nullptr,
nullptr,
outputs[0]->get_data_ptr<T>());
} else if (op->get_input_size() == 5) {
refDetOut.run(inputs[0]->get_data_ptr<const T>(),
inputs[1]->get_data_ptr<const T>(),
inputs[2]->get_data_ptr<const T>(),
inputs[3]->get_data_ptr<const T>(),
inputs[4]->get_data_ptr<const T>(),
outputs[0]->get_data_ptr<T>());
} else {
throw ngraph::ngraph_error("DetectionOutput layer supports only 3 or 5 inputs");
}
return true;
}
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v8::DetectionOutput>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::referenceDetectionOutput<T> refDetOut(op->get_attrs(),
op->get_input_shape(0),
op->get_input_shape(1),
op->get_input_shape(2),
op->get_output_shape(0));
if (op->get_input_size() == 3) {
refDetOut.run(inputs[0]->get_data_ptr<const T>(),
inputs[1]->get_data_ptr<const T>(),
inputs[2]->get_data_ptr<const T>(),
nullptr,
nullptr,
outputs[0]->get_data_ptr<T>());
} else if (op->get_input_size() == 5) {
refDetOut.run(inputs[0]->get_data_ptr<const T>(),
inputs[1]->get_data_ptr<const T>(),
inputs[2]->get_data_ptr<const T>(),
inputs[3]->get_data_ptr<const T>(),
inputs[4]->get_data_ptr<const T>(),
outputs[0]->get_data_ptr<T>());
} else {
throw ngraph::ngraph_error("DetectionOutput layer supports only 3 or 5 inputs");
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::DetectionOutput>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::DetectionOutput>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}
template <>
bool evaluate_node<ngraph::op::v8::DetectionOutput>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v8::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v8::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v8::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v8::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v8::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v8::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v8::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v8::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v8::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v8::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v8::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v8::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v8::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v8::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v8::DetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v8::DetectionOutput>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,65 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/einsum.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v7::Einsum>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
const auto equation = op->get_equation();
ngraph::runtime::reference::einsum(outputs, inputs, equation);
return true;
}
template <>
bool evaluate_node<ngraph::op::v7::Einsum>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v7::Einsum>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v7::Einsum>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v7::Einsum>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v7::Einsum>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v7::Einsum>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v7::Einsum>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v7::Einsum>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v7::Einsum>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v7::Einsum>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v7::Einsum>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v7::Einsum>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v7::Einsum>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v7::Einsum>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v7::Einsum>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v7::Einsum>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v7::Einsum>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,66 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/elu.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::Elu>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::elu<T>(inputs[0]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
ngraph::shape_size(inputs[0]->get_shape()),
op->get_alpha());
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::Elu>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::Elu>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::Elu>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::Elu>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::Elu>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::Elu>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::Elu>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::Elu>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::Elu>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::Elu>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::Elu>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::Elu>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::Elu>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::Elu>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::Elu>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::Elu>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::Elu>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,122 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/embedding_bag_offsets_sum.hpp"
#include "evaluate_node.hpp"
namespace embedding_bag_offsets_sum_v3 {
template <ngraph::element::Type_t t1, ngraph::element::Type_t t2>
inline void evaluate(const std::shared_ptr<ngraph::op::v3::EmbeddingBagOffsetsSum>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T1 = typename ngraph::element_type_traits<t1>::value_type;
using T2 = typename ngraph::element_type_traits<t2>::value_type;
ngraph::runtime::reference::embeddingBagOffsetsSum<T1, T2>(
inputs[0]->get_data_ptr<T1>(),
inputs[1]->get_data_ptr<T2>(),
inputs[2]->get_data_ptr<T2>(),
inputs.size() > 3 ? inputs[3]->get_data_ptr<T2>() : nullptr,
inputs.size() > 4 ? inputs[4]->get_data_ptr<T1>() : nullptr,
outputs[0]->get_data_ptr<T1>(),
ngraph::shape_size(inputs[1]->get_shape()),
outputs[0]->get_shape());
}
} // namespace embedding_bag_offsets_sum_v3
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v3::EmbeddingBagOffsetsSum>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
switch (inputs[1]->get_element_type()) {
case ngraph::element::Type_t::i32:
embedding_bag_offsets_sum_v3::evaluate<ET, ngraph::element::Type_t::i32>(op, outputs, inputs);
break;
case ngraph::element::Type_t::i64:
embedding_bag_offsets_sum_v3::evaluate<ET, ngraph::element::Type_t::i64>(op, outputs, inputs);
break;
default:
return false;
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v3::EmbeddingBagOffsetsSum>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagOffsetsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagOffsetsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagOffsetsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagOffsetsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagOffsetsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagOffsetsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagOffsetsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagOffsetsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagOffsetsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagOffsetsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagOffsetsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagOffsetsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagOffsetsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagOffsetsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagOffsetsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagOffsetsSum>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,122 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
// clang-format off
#include "evaluate_node.hpp"
#include "ngraph/runtime/reference/embedding_bag_packed_sum.hpp"
// clang-format on
namespace embedding_bag_packed_sum_v3 {
template <ngraph::element::Type_t t1, ngraph::element::Type_t t2>
inline void evaluate(const std::shared_ptr<ngraph::op::v3::EmbeddingBagPackedSum>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T1 = typename ngraph::element_type_traits<t1>::value_type;
using T2 = typename ngraph::element_type_traits<t2>::value_type;
ngraph::runtime::reference::embeddingBagPackedSum<T1, T2>(
inputs[0]->get_data_ptr<T1>(),
inputs[1]->get_data_ptr<T2>(),
inputs.size() > 2 ? inputs[2]->get_data_ptr<T1>() : nullptr,
outputs[0]->get_data_ptr<T1>(),
inputs[1]->get_shape(),
outputs[0]->get_shape());
}
} // namespace embedding_bag_packed_sum_v3
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v3::EmbeddingBagPackedSum>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
switch (inputs[1]->get_element_type()) {
case ngraph::element::Type_t::i32:
embedding_bag_packed_sum_v3::evaluate<ET, ngraph::element::Type_t::i32>(op, outputs, inputs);
break;
case ngraph::element::Type_t::i64:
embedding_bag_packed_sum_v3::evaluate<ET, ngraph::element::Type_t::i64>(op, outputs, inputs);
break;
default:
return false;
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v3::EmbeddingBagPackedSum>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagPackedSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagPackedSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagPackedSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagPackedSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagPackedSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagPackedSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagPackedSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagPackedSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagPackedSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagPackedSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagPackedSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagPackedSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagPackedSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagPackedSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagPackedSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v3::EmbeddingBagPackedSum>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,123 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/embedding_segments_sum.hpp"
#include "evaluate_node.hpp"
namespace embedding_offsets_sum_v3 {
template <ngraph::element::Type_t t1, ngraph::element::Type_t t2>
inline void evaluate(const std::shared_ptr<ngraph::op::v3::EmbeddingSegmentsSum>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T1 = typename ngraph::element_type_traits<t1>::value_type;
using T2 = typename ngraph::element_type_traits<t2>::value_type;
ngraph::runtime::reference::embeddingSegmentsSum<T1, T2>(
inputs[0]->get_data_ptr<T1>(),
inputs[1]->get_data_ptr<T2>(),
inputs[2]->get_data_ptr<T2>(),
inputs.size() > 4 ? inputs[4]->get_data_ptr<T2>() : nullptr,
inputs.size() > 5 ? inputs[5]->get_data_ptr<T1>() : nullptr,
outputs[0]->get_data_ptr<T1>(),
inputs[0]->get_shape(),
inputs[1]->get_shape(),
outputs[0]->get_shape());
}
} // namespace embedding_offsets_sum_v3
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v3::EmbeddingSegmentsSum>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
switch (inputs[1]->get_element_type()) {
case ngraph::element::Type_t::i32:
embedding_offsets_sum_v3::evaluate<ET, ngraph::element::Type_t::i32>(op, outputs, inputs);
break;
case ngraph::element::Type_t::i64:
embedding_offsets_sum_v3::evaluate<ET, ngraph::element::Type_t::i64>(op, outputs, inputs);
break;
default:
return false;
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v3::EmbeddingSegmentsSum>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v3::EmbeddingSegmentsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v3::EmbeddingSegmentsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v3::EmbeddingSegmentsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v3::EmbeddingSegmentsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v3::EmbeddingSegmentsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v3::EmbeddingSegmentsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v3::EmbeddingSegmentsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v3::EmbeddingSegmentsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v3::EmbeddingSegmentsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v3::EmbeddingSegmentsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v3::EmbeddingSegmentsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v3::EmbeddingSegmentsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v3::EmbeddingSegmentsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v3::EmbeddingSegmentsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v3::EmbeddingSegmentsSum>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v3::EmbeddingSegmentsSum>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,77 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/equal.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v1::Equal>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
const auto in0_data_ptr = inputs[0]->get_data_ptr<ET>();
const auto in1_data_ptr = inputs[1]->get_data_ptr<ET>();
const auto out_data_ptr = outputs[0]->get_data_ptr<ngraph::element::Type_t::boolean>();
const auto in0_shape = inputs[0]->get_shape();
const auto in1_shape = inputs[1]->get_shape();
const auto broadcast_spec = op->get_autob();
ngraph::runtime::reference::equal<
typename ngraph::element_type_traits<ET>::value_type,
typename ngraph::element_type_traits<ngraph::element::Type_t::boolean>::value_type>(in0_data_ptr,
in1_data_ptr,
out_data_ptr,
in0_shape,
in1_shape,
broadcast_spec);
return true;
}
template <>
bool evaluate_node<ngraph::op::v1::Equal>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v1::Equal>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v1::Equal>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v1::Equal>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v1::Equal>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v1::Equal>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v1::Equal>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v1::Equal>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v1::Equal>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v1::Equal>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v1::Equal>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v1::Equal>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v1::Equal>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v1::Equal>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v1::Equal>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v1::Equal>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v1::Equal>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,60 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#pragma once
#include "ngraph/ops.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(std::shared_ptr<ngraph::Node> op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
return false;
}
template <typename T>
bool evaluate_node(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<T>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<T>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<T>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<T>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<T>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<T>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<T>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<T>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<T>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<T>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<T>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<T>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<T>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<T>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<T>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<T>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,65 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/exp.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::Exp>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::exp<T>(inputs[0]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
ngraph::shape_size(inputs[0]->get_shape()));
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::Exp>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::Exp>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::Exp>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::Exp>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::Exp>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::Exp>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::Exp>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::Exp>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::Exp>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::Exp>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::Exp>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::Exp>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::Exp>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::Exp>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::Exp>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::Exp>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::Exp>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,155 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/experimental_detectron_detection_output.hpp"
#include "evaluate_node.hpp"
#include "evaluates_map.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v6::ExperimentalDetectronDetectionOutput>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
const auto attrs = op->get_attrs();
size_t rois_num = attrs.max_detections_per_image;
const ngraph::Shape output_boxes_shape = ngraph::Shape{rois_num, 4};
const ngraph::Shape output_classes_shape = ngraph::Shape{rois_num};
const ngraph::Shape output_scores_shape = ngraph::Shape{rois_num};
const auto output_type = op->get_input_element_type(0);
const auto boxes_data = get_floats(inputs[0], inputs[0]->get_shape());
const auto input_deltas_data = get_floats(inputs[1], inputs[1]->get_shape());
const auto input_scores_data = get_floats(inputs[2], inputs[2]->get_shape());
const auto input_im_info_data = get_floats(inputs[3], inputs[3]->get_shape());
std::vector<float> output_boxes(ngraph::shape_size(output_boxes_shape));
std::vector<int32_t> output_classes(ngraph::shape_size(output_classes_shape));
std::vector<float> output_scores(ngraph::shape_size(output_scores_shape));
outputs[0]->set_element_type(output_type);
outputs[0]->set_shape(output_boxes_shape);
outputs[1]->set_element_type(ngraph::element::Type_t::i32);
outputs[1]->set_shape(output_classes_shape);
outputs[2]->set_element_type(output_type);
outputs[2]->set_shape(output_scores_shape);
ngraph::runtime::reference::experimental_detectron_detection_output(boxes_data.data(),
input_deltas_data.data(),
input_scores_data.data(),
input_im_info_data.data(),
attrs,
output_boxes.data(),
output_scores.data(),
output_classes.data());
ngraph::runtime::reference::experimental_detectron_detection_output_postprocessing(outputs[0]->get_data_ptr(),
outputs[1]->get_data_ptr(),
outputs[2]->get_data_ptr(),
output_type,
output_boxes,
output_classes,
output_scores,
output_boxes_shape,
output_classes_shape,
output_scores_shape);
return true;
}
template <>
bool evaluate_node<ngraph::op::v6::ExperimentalDetectronDetectionOutput>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronDetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronDetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronDetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronDetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronDetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronDetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronDetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronDetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronDetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronDetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronDetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronDetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronDetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronDetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronDetectionOutput>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronDetectionOutput>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,184 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/experimental_detectron_prior_grid_generator.hpp"
#include "evaluate_node.hpp"
namespace experimental_prior_grid {
struct InfoForEDPriorGrid {
ngraph::Shape output_shape;
int64_t grid_h;
int64_t grid_w;
float stride_h;
float stride_w;
};
constexpr size_t priors_port = 0;
constexpr size_t feature_map_port = 1;
ngraph::PartialShape infer_output_shape(const std::vector<std::shared_ptr<ngraph::HostTensor>>& inputs, bool flatten) {
ngraph::PartialShape out_shape = {ngraph::Dimension::dynamic(),
ngraph::Dimension::dynamic(),
ngraph::Dimension::dynamic(),
4};
if (flatten) {
out_shape = ngraph::PartialShape{ngraph::Dimension::dynamic(), 4};
}
const auto priors_shape = inputs[priors_port]->get_partial_shape();
const auto feature_map_shape = inputs[feature_map_port]->get_partial_shape();
if (priors_shape.rank().is_dynamic() || feature_map_shape.rank().is_dynamic()) {
return out_shape;
}
auto num_priors = priors_shape[0];
auto featmap_height = feature_map_shape[2];
auto featmap_width = feature_map_shape[3];
if (flatten) {
out_shape = ngraph::PartialShape{featmap_height * featmap_width * num_priors, 4};
} else {
out_shape = ngraph::PartialShape{featmap_height, featmap_width, num_priors, 4};
}
return out_shape;
}
InfoForEDPriorGrid get_info_for_ed_prior_grid_eval(
const std::shared_ptr<ngraph::op::v6::ExperimentalDetectronPriorGridGenerator>& prior_grid,
const std::vector<std::shared_ptr<ngraph::HostTensor>>& inputs) {
InfoForEDPriorGrid result;
auto attrs = prior_grid->get_attrs();
result.grid_h = attrs.h;
result.grid_w = attrs.w;
result.stride_h = attrs.stride_y;
result.stride_w = attrs.stride_x;
auto output_rois_shape = infer_output_shape(inputs, attrs.flatten);
result.output_shape = output_rois_shape.to_shape();
return result;
}
} // namespace experimental_prior_grid
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v6::ExperimentalDetectronPriorGridGenerator>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto info = experimental_prior_grid::get_info_for_ed_prior_grid_eval(op, inputs);
using T = typename ngraph::element_type_traits<ET>::value_type;
outputs[0]->set_shape(info.output_shape);
ngraph::runtime::reference::experimental_detectron_prior_grid_generator<T>(inputs[0]->get_data_ptr<const T>(),
inputs[0]->get_shape(),
inputs[1]->get_shape(),
inputs[2]->get_shape(),
outputs[0]->get_data_ptr<T>(),
info.grid_h,
info.grid_w,
info.stride_h,
info.stride_w);
return true;
}
template <>
bool evaluate_node<ngraph::op::v6::ExperimentalDetectronPriorGridGenerator>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronPriorGridGenerator>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronPriorGridGenerator>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronPriorGridGenerator>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronPriorGridGenerator>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronPriorGridGenerator>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronPriorGridGenerator>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronPriorGridGenerator>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronPriorGridGenerator>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronPriorGridGenerator>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronPriorGridGenerator>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronPriorGridGenerator>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronPriorGridGenerator>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronPriorGridGenerator>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronPriorGridGenerator>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronPriorGridGenerator>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronPriorGridGenerator>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,164 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/experimental_detectron_proposal_single_image.hpp"
#include "evaluate_node.hpp"
#include "evaluates_map.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v6::ExperimentalDetectronGenerateProposalsSingleImage>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
const auto attrs = op->get_attrs();
size_t post_nms_count = 0;
if (attrs.post_nms_count < 0) {
throw ngraph::ngraph_error("The attribute post_nms_count of the operation "
"ExperimentalDetectronGenerateProposalsSingleImage must be a "
"nonnegative integer.");
} else {
post_nms_count = static_cast<size_t>(attrs.post_nms_count);
}
const ngraph::Shape output_rois_shape = ngraph::Shape{post_nms_count, 4};
const ngraph::Shape output_scores_shape = ngraph::Shape{post_nms_count};
const auto output_type = op->get_input_element_type(0);
const auto im_info_shape = inputs[0]->get_shape();
const auto anchors_shape = inputs[1]->get_shape();
const auto deltas_shape = inputs[2]->get_shape();
const auto scores_shape = inputs[3]->get_shape();
const auto im_info_data = get_floats(inputs[0], im_info_shape);
const auto anchors_data = get_floats(inputs[1], anchors_shape);
const auto deltas_data = get_floats(inputs[2], deltas_shape);
const auto scores_data = get_floats(inputs[3], scores_shape);
std::vector<float> output_rois(ngraph::shape_size(output_rois_shape));
std::vector<float> output_scores(ngraph::shape_size(output_scores_shape));
outputs[0]->set_element_type(output_type);
outputs[0]->set_shape(output_rois_shape);
outputs[1]->set_element_type(output_type);
outputs[1]->set_shape(output_scores_shape);
ngraph::runtime::reference::experimental_detectron_proposals_single_image(im_info_data.data(),
anchors_data.data(),
deltas_data.data(),
scores_data.data(),
attrs,
im_info_shape,
anchors_shape,
deltas_shape,
scores_shape,
output_rois.data(),
output_scores.data());
ngraph::runtime::reference::experimental_detectron_proposals_single_image_postprocessing(outputs[0]->get_data_ptr(),
outputs[1]->get_data_ptr(),
output_type,
output_rois,
output_scores,
output_rois_shape,
output_scores_shape);
return true;
}
template <>
bool evaluate_node<ngraph::op::v6::ExperimentalDetectronGenerateProposalsSingleImage>(
std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronGenerateProposalsSingleImage>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronGenerateProposalsSingleImage>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronGenerateProposalsSingleImage>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronGenerateProposalsSingleImage>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronGenerateProposalsSingleImage>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronGenerateProposalsSingleImage>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronGenerateProposalsSingleImage>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronGenerateProposalsSingleImage>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronGenerateProposalsSingleImage>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronGenerateProposalsSingleImage>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronGenerateProposalsSingleImage>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronGenerateProposalsSingleImage>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronGenerateProposalsSingleImage>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronGenerateProposalsSingleImage>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronGenerateProposalsSingleImage>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronGenerateProposalsSingleImage>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,178 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
// clang-format off
#include "evaluates_map.hpp"
#include "evaluate_node.hpp"
#include "ngraph/runtime/reference/experimental_detectron_roi_feature_extractor.hpp"
// clang-format on
namespace experimental_roi_feature {
struct InfoForEDROIFeature {
ngraph::Shape output_rois_features_shape;
ngraph::Shape output_rois_shape;
};
InfoForEDROIFeature get_info_for_ed_roi_feature(
const std::vector<ngraph::Shape> input_shapes,
const ngraph::op::v6::ExperimentalDetectronROIFeatureExtractor::Attributes& attrs) {
InfoForEDROIFeature result;
size_t output_size = static_cast<size_t>(attrs.output_size);
auto out_shape = ngraph::Shape{0, 0, output_size, output_size};
auto out_rois_shape = ngraph::Shape{0, 4};
auto rois_shape = input_shapes[0];
out_shape[0] = rois_shape[0];
out_rois_shape[0] = rois_shape[0];
out_shape[1] = input_shapes[1][1];
result.output_rois_features_shape = out_shape;
result.output_rois_shape = out_rois_shape;
return result;
}
} // namespace experimental_roi_feature
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v6::ExperimentalDetectronROIFeatureExtractor>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
const auto attrs = op->get_attrs();
std::vector<std::vector<float>> input_data;
std::vector<ngraph::Shape> input_shapes;
for (const auto& input : inputs) {
const auto current_shape = input->get_shape();
input_data.push_back(get_floats(input, current_shape));
input_shapes.push_back(current_shape);
}
const auto info = experimental_roi_feature::get_info_for_ed_roi_feature(input_shapes, attrs);
const auto& output_rois_features_shape = info.output_rois_features_shape;
const auto& output_rois_shape = info.output_rois_shape;
const auto output_type = op->get_input_element_type(0);
outputs[0]->set_element_type(output_type);
outputs[0]->set_shape(output_rois_features_shape);
outputs[1]->set_element_type(output_type);
outputs[1]->set_shape(output_rois_shape);
std::vector<float> output_rois_features(ngraph::shape_size(output_rois_features_shape));
std::vector<float> output_rois(ngraph::shape_size(output_rois_shape));
ngraph::runtime::reference::experimental_detectron_roi_feature_extractor(input_data,
input_shapes,
attrs,
output_rois_features.data(),
output_rois.data());
ngraph::runtime::reference::experimental_detectron_roi_feature_extractor_postprocessing(outputs[0]->get_data_ptr(),
outputs[1]->get_data_ptr(),
output_type,
output_rois_features,
output_rois,
output_rois_features_shape,
output_rois_shape);
return true;
}
template <>
bool evaluate_node<ngraph::op::v6::ExperimentalDetectronROIFeatureExtractor>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronROIFeatureExtractor>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronROIFeatureExtractor>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronROIFeatureExtractor>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronROIFeatureExtractor>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronROIFeatureExtractor>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronROIFeatureExtractor>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronROIFeatureExtractor>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronROIFeatureExtractor>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronROIFeatureExtractor>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronROIFeatureExtractor>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronROIFeatureExtractor>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronROIFeatureExtractor>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronROIFeatureExtractor>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronROIFeatureExtractor>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronROIFeatureExtractor>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronROIFeatureExtractor>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,118 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/experimental_detectron_topk_rois.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v6::ExperimentalDetectronTopKROIs>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
size_t max_rois = op->get_max_rois();
outputs[0]->set_shape(ngraph::Shape{max_rois, 4});
ngraph::runtime::reference::experimental_detectron_topk_rois<T>(inputs[0]->get_data_ptr<const T>(),
inputs[1]->get_data_ptr<const T>(),
inputs[0]->get_shape(),
inputs[1]->get_shape(),
max_rois,
outputs[0]->get_data_ptr<T>());
return true;
}
template <>
bool evaluate_node<ngraph::op::v6::ExperimentalDetectronTopKROIs>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronTopKROIs>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronTopKROIs>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronTopKROIs>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronTopKROIs>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronTopKROIs>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronTopKROIs>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronTopKROIs>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronTopKROIs>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronTopKROIs>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronTopKROIs>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronTopKROIs>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronTopKROIs>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronTopKROIs>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronTopKROIs>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronTopKROIs>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(
ov::as_type_ptr<ngraph::op::v6::ExperimentalDetectronTopKROIs>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,99 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/extract_image_patches.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v3::ExtractImagePatches>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::extract_image_patches<T>(op,
inputs[0]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
inputs[0]->get_shape(),
outputs[0]->get_shape());
return true;
}
template <>
bool evaluate_node<ngraph::op::v3::ExtractImagePatches>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v3::ExtractImagePatches>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v3::ExtractImagePatches>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v3::ExtractImagePatches>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v3::ExtractImagePatches>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v3::ExtractImagePatches>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v3::ExtractImagePatches>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v3::ExtractImagePatches>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v3::ExtractImagePatches>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v3::ExtractImagePatches>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v3::ExtractImagePatches>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v3::ExtractImagePatches>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v3::ExtractImagePatches>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v3::ExtractImagePatches>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v3::ExtractImagePatches>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v3::ExtractImagePatches>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v3::ExtractImagePatches>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,186 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/fft.hpp"
#include "evaluate_node.hpp"
#include "evaluates_map.hpp"
namespace fft_v7 {
struct InfoForFFT7 {
std::vector<float> input_data;
std::vector<int64_t> axes_data;
ngraph::Shape input_data_shape;
ngraph::Shape axes_data_shape;
ngraph::Shape output_shape;
};
InfoForFFT7 get_info_for_fft7_eval(const std::vector<std::shared_ptr<ngraph::HostTensor>>& inputs) {
InfoForFFT7 result;
result.input_data_shape = inputs[0]->get_shape();
result.axes_data_shape = inputs[1]->get_shape();
result.input_data = get_floats(inputs[0], result.input_data_shape);
result.axes_data = get_integers(inputs[1], result.axes_data_shape);
auto output_shape = result.input_data_shape;
int64_t input_rank = static_cast<int64_t>(result.input_data_shape.size());
int64_t complex_data_rank = input_rank - 1;
auto canonicalized_axes = ngraph::runtime::reference::canonicalize_axes(result.axes_data.data(),
result.axes_data_shape,
complex_data_rank);
size_t num_of_axes = result.axes_data.size();
auto signal_size = get_signal_size(inputs, num_of_axes);
for (size_t i = 0; i < num_of_axes; ++i) {
int64_t current_axis = canonicalized_axes[i];
int64_t current_signal_size = signal_size[i];
if (current_signal_size != -1) {
output_shape[current_axis] = current_signal_size;
}
}
result.output_shape = output_shape;
return result;
}
} // namespace fft_v7
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v7::DFT>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto info = fft_v7::get_info_for_fft7_eval(inputs);
outputs[0]->set_shape(info.output_shape);
std::vector<float> fft_result(ngraph::shape_size(info.output_shape), 0.0f);
ngraph::runtime::reference::fft(info.input_data.data(),
info.input_data_shape,
info.axes_data.data(),
info.axes_data_shape,
fft_result.data(),
info.output_shape,
ngraph::runtime::reference::FFTKind::Forward);
const auto output_type = op->get_input_element_type(0);
ngraph::runtime::reference::fft_postprocessing(outputs, output_type, fft_result);
return true;
}
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v7::IDFT>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto info = fft_v7::get_info_for_fft7_eval(inputs);
outputs[0]->set_shape(info.output_shape);
std::vector<float> fft_result(ngraph::shape_size(info.output_shape), 0.0f);
ngraph::runtime::reference::fft(info.input_data.data(),
info.input_data_shape,
info.axes_data.data(),
info.axes_data_shape,
fft_result.data(),
info.output_shape,
ngraph::runtime::reference::FFTKind::Inverse);
const auto output_type = op->get_input_element_type(0);
ngraph::runtime::reference::fft_postprocessing(outputs, output_type, fft_result);
return true;
}
template <>
bool evaluate_node<ngraph::op::v7::DFT>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v7::DFT>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v7::DFT>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v7::DFT>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v7::DFT>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v7::DFT>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v7::DFT>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v7::DFT>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v7::DFT>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v7::DFT>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v7::DFT>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v7::DFT>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v7::DFT>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v7::DFT>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v7::DFT>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v7::DFT>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v7::DFT>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}
template <>
bool evaluate_node<ngraph::op::v7::IDFT>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v7::IDFT>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v7::IDFT>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v7::IDFT>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v7::IDFT>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v7::IDFT>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v7::IDFT>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v7::IDFT>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v7::IDFT>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v7::IDFT>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v7::IDFT>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v7::IDFT>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v7::IDFT>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v7::IDFT>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v7::IDFT>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v7::IDFT>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v7::IDFT>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,85 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/gather.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v8::Gather>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
if (op->get_input_element_type(1) == ngraph::element::i64) {
ngraph::runtime::reference::gather<T, int64_t>(inputs[0]->get_data_ptr<T>(),
inputs[1]->get_data_ptr<int64_t>(),
outputs[0]->get_data_ptr<T>(),
op->get_input_shape(0),
op->get_input_shape(1),
op->get_output_shape(0),
op->get_axis(),
op->get_batch_dims());
} else if (op->get_input_element_type(1) == ngraph::element::i32) {
ngraph::runtime::reference::gather<T, int32_t>(inputs[0]->get_data_ptr<T>(),
inputs[1]->get_data_ptr<int32_t>(),
outputs[0]->get_data_ptr<T>(),
op->get_input_shape(0),
op->get_input_shape(1),
op->get_output_shape(0),
op->get_axis(),
op->get_batch_dims());
} else {
throw ngraph::ngraph_error("Unexpected indices type for Gather operation");
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v8::Gather>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v8::Gather>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v8::Gather>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v8::Gather>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v8::Gather>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v8::Gather>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v8::Gather>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v8::Gather>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v8::Gather>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v8::Gather>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v8::Gather>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v8::Gather>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v8::Gather>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v8::Gather>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v8::Gather>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v8::Gather>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v8::Gather>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,119 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/gather_elements.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v6::GatherElements>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::Shape params_shape = inputs[0]->get_shape();
ngraph::Shape indices_shape = inputs[1]->get_shape();
outputs[0]->set_shape(indices_shape);
if (inputs[1]->get_element_type() == ngraph::element::i64) {
ngraph::runtime::reference::gather_elements<T, int64_t>(inputs[0]->get_data_ptr<ET>(),
inputs[1]->get_data_ptr<int64_t>(),
outputs[0]->get_data_ptr<ET>(),
inputs[0]->get_shape(),
inputs[1]->get_shape(),
outputs[0]->get_shape(),
op->get_axis());
} else if (inputs[1]->get_element_type() == ngraph::element::i32) {
ngraph::runtime::reference::gather_elements<T, int32_t>(inputs[0]->get_data_ptr<ET>(),
inputs[1]->get_data_ptr<int32_t>(),
outputs[0]->get_data_ptr<ET>(),
inputs[0]->get_shape(),
inputs[1]->get_shape(),
outputs[0]->get_shape(),
op->get_axis());
} else {
throw ngraph::ngraph_error("Unexpected indices type");
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v6::GatherElements>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v6::GatherElements>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v6::GatherElements>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v6::GatherElements>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v6::GatherElements>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v6::GatherElements>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v6::GatherElements>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v6::GatherElements>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v6::GatherElements>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v6::GatherElements>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v6::GatherElements>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v6::GatherElements>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v6::GatherElements>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v6::GatherElements>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v6::GatherElements>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v6::GatherElements>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v6::GatherElements>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,163 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/gather_nd.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v5::GatherND>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
if (op->get_input_element_type(1) == ngraph::element::i64) {
ngraph::runtime::reference::gather_nd<T, int64_t>(inputs[0]->get_data_ptr<T>(),
inputs[1]->get_data_ptr<int64_t>(),
outputs[0]->get_data_ptr<T>(),
inputs[0]->get_shape(),
inputs[1]->get_shape(),
outputs[0]->get_shape(),
static_cast<int>(op->get_batch_dims()));
} else if (op->get_input_element_type(1) == ngraph::element::i32) {
ngraph::runtime::reference::gather_nd<T, int32_t>(inputs[0]->get_data_ptr<T>(),
inputs[1]->get_data_ptr<int32_t>(),
outputs[0]->get_data_ptr<T>(),
inputs[0]->get_shape(),
inputs[1]->get_shape(),
outputs[0]->get_shape(),
static_cast<int>(op->get_batch_dims()));
} else {
throw ngraph::ngraph_error("Unexpected indices type for GatherND operation");
}
return true;
}
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v8::GatherND>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
if (op->get_input_element_type(1) == ngraph::element::i64) {
ngraph::runtime::reference::gather_nd<T, int64_t>(inputs[0]->get_data_ptr<T>(),
inputs[1]->get_data_ptr<int64_t>(),
outputs[0]->get_data_ptr<T>(),
inputs[0]->get_shape(),
inputs[1]->get_shape(),
outputs[0]->get_shape(),
static_cast<int>(op->get_batch_dims()));
} else if (op->get_input_element_type(1) == ngraph::element::i32) {
ngraph::runtime::reference::gather_nd<T, int32_t>(inputs[0]->get_data_ptr<T>(),
inputs[1]->get_data_ptr<int32_t>(),
outputs[0]->get_data_ptr<T>(),
inputs[0]->get_shape(),
inputs[1]->get_shape(),
outputs[0]->get_shape(),
static_cast<int>(op->get_batch_dims()));
} else {
throw ngraph::ngraph_error("Unexpected indices type for GatherND operation");
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v5::GatherND>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v5::GatherND>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v5::GatherND>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v5::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v5::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v5::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v5::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v5::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v5::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v5::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v5::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v5::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v5::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v5::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v5::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v5::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v5::GatherND>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}
template <>
bool evaluate_node<ngraph::op::v8::GatherND>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v8::GatherND>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v8::GatherND>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v8::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v8::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v8::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v8::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v8::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v8::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v8::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v8::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v8::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v8::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v8::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v8::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v8::GatherND>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v8::GatherND>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,103 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/gather_tree.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v1::GatherTree>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
ngraph::runtime::reference::gather_tree(inputs[0]->get_data_ptr<const char>(),
inputs[1]->get_data_ptr<const char>(),
inputs[2]->get_data_ptr<const char>(),
inputs[3]->get_data_ptr<const char>(),
outputs[0]->get_data_ptr<char>(),
op->get_input_shape(0),
op->get_input_shape(1),
op->get_input_shape(2),
op->get_input_shape(3),
inputs[1]->get_element_type());
return true;
}
template <>
bool evaluate_node<ngraph::op::v1::GatherTree>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v1::GatherTree>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v1::GatherTree>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v1::GatherTree>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v1::GatherTree>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v1::GatherTree>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v1::GatherTree>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v1::GatherTree>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v1::GatherTree>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v1::GatherTree>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v1::GatherTree>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v1::GatherTree>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v1::GatherTree>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v1::GatherTree>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v1::GatherTree>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v1::GatherTree>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v1::GatherTree>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,125 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/gelu.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::Gelu>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::gelu<T>(inputs[0]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
ngraph::op::GeluApproximationMode::ERF,
ngraph::shape_size(inputs[0]->get_shape()));
return true;
}
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v7::Gelu>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::gelu<T>(inputs[0]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
op->get_approximation_mode(),
ngraph::shape_size(inputs[0]->get_shape()));
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::Gelu>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::Gelu>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}
template <>
bool evaluate_node<ngraph::op::v7::Gelu>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v7::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v7::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v7::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v7::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v7::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v7::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v7::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v7::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v7::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v7::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v7::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v7::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v7::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v7::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v7::Gelu>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v7::Gelu>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,157 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/generate_proposal.hpp"
#include "evaluate_node.hpp"
#include "evaluates_map.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v9::GenerateProposals>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
const auto& attrs = op->get_attrs();
if (attrs.post_nms_count < 0) {
throw ngraph::ngraph_error("The attribute post_nms_count of the operation "
"GenerateProposals must be a "
"nonnegative integer.");
}
const auto& output_type = op->get_input_element_type(0);
const auto& im_info_shape = inputs[0]->get_shape();
const auto& anchors_shape = inputs[1]->get_shape();
const auto& deltas_shape = inputs[2]->get_shape();
const auto& scores_shape = inputs[3]->get_shape();
const auto im_info_data = get_floats(inputs[0], im_info_shape);
const auto anchors_data = get_floats(inputs[1], anchors_shape);
const auto deltas_data = get_floats(inputs[2], deltas_shape);
const auto scores_data = get_floats(inputs[3], scores_shape);
std::vector<float> output_rois;
std::vector<float> output_scores;
std::vector<int64_t> output_num;
ngraph::runtime::reference::generate_proposals(im_info_data,
anchors_data,
deltas_data,
scores_data,
attrs,
im_info_shape,
anchors_shape,
deltas_shape,
scores_shape,
output_rois,
output_scores,
output_num);
size_t num_selected = static_cast<size_t>(std::accumulate(output_num.begin(), output_num.end(), 0));
ngraph::Shape output_rois_shape = ngraph::Shape{num_selected, 4};
ngraph::Shape output_scores_shape = ngraph::Shape{num_selected};
outputs[0]->set_element_type(output_type);
outputs[0]->set_shape(output_rois_shape);
outputs[1]->set_element_type(output_type);
outputs[1]->set_shape(output_scores_shape);
const auto& roi_num_type = op->get_output_element_type(2);
ngraph::Shape output_roi_num_shape = ngraph::Shape{im_info_shape[0]};
outputs[2]->set_element_type(roi_num_type);
outputs[2]->set_shape(output_roi_num_shape);
ngraph::runtime::reference::generate_proposals_postprocessing(outputs[0]->get_data_ptr(),
outputs[1]->get_data_ptr(),
outputs[2]->get_data_ptr(),
output_type,
roi_num_type,
output_rois,
output_scores,
output_num,
output_rois_shape,
output_scores_shape);
return true;
}
template <>
bool evaluate_node<ngraph::op::v9::GenerateProposals>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v9::GenerateProposals>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v9::GenerateProposals>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v9::GenerateProposals>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v9::GenerateProposals>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v9::GenerateProposals>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v9::GenerateProposals>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v9::GenerateProposals>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v9::GenerateProposals>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v9::GenerateProposals>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v9::GenerateProposals>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v9::GenerateProposals>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v9::GenerateProposals>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v9::GenerateProposals>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v9::GenerateProposals>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v9::GenerateProposals>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v9::GenerateProposals>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,77 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/greater.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v1::Greater>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
const auto in0_data_ptr = inputs[0]->get_data_ptr<ET>();
const auto in1_data_ptr = inputs[1]->get_data_ptr<ET>();
const auto out_data_ptr = outputs[0]->get_data_ptr<ngraph::element::Type_t::boolean>();
const auto in0_shape = inputs[0]->get_shape();
const auto in1_shape = inputs[1]->get_shape();
const auto broadcast_spec = op->get_autob();
ngraph::runtime::reference::greater<
typename ngraph::element_type_traits<ET>::value_type,
typename ngraph::element_type_traits<ngraph::element::Type_t::boolean>::value_type>(in0_data_ptr,
in1_data_ptr,
out_data_ptr,
in0_shape,
in1_shape,
broadcast_spec);
return true;
}
template <>
bool evaluate_node<ngraph::op::v1::Greater>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v1::Greater>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v1::Greater>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v1::Greater>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v1::Greater>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v1::Greater>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v1::Greater>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v1::Greater>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v1::Greater>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v1::Greater>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v1::Greater>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v1::Greater>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v1::Greater>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v1::Greater>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v1::Greater>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v1::Greater>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v1::Greater>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,109 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/grid_sample.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t DATA_ET>
bool evaluate(const std::shared_ptr<ngraph::op::v9::GridSample>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
const auto& attributes = op->get_attributes();
ngraph::element::Type grid_et = op->get_input_element_type(1);
switch (grid_et) {
case ngraph::element::Type_t::f32:
ngraph::runtime::reference::grid_sample(outputs[0]->get_data_ptr<DATA_ET>(),
inputs[0]->get_data_ptr<DATA_ET>(),
inputs[1]->get_data_ptr<ngraph::element::Type_t::f32>(),
inputs[0]->get_shape(),
inputs[1]->get_shape(),
attributes.align_corners,
attributes.mode,
attributes.padding_mode);
break;
default:
return false;
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v9::GridSample>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v9::GridSample>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v9::GridSample>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v9::GridSample>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v9::GridSample>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v9::GridSample>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v9::GridSample>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v9::GridSample>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v9::GridSample>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v9::GridSample>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v9::GridSample>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v9::GridSample>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v9::GridSample>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v9::GridSample>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v9::GridSample>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v9::GridSample>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v9::GridSample>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,66 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/grn.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::GRN>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::grn<T>(inputs[0]->get_data_ptr<ET>(),
outputs[0]->get_data_ptr<ET>(),
op->get_bias(),
inputs[0]->get_shape());
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::GRN>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::GRN>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::GRN>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::GRN>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::GRN>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::GRN>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::GRN>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::GRN>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::GRN>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::GRN>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::GRN>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::GRN>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::GRN>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::GRN>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::GRN>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::GRN>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::GRN>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,110 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/group_convolution.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v1::GroupConvolution>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
const auto filter_data = inputs[1]->get_data_ptr<ET>();
auto out_data_ptr = outputs[0]->get_data_ptr<ET>();
const auto in_data_ptr = inputs[0]->get_data_ptr<ET>();
const auto& out_shape = outputs[0]->get_shape();
const auto& in_shape = inputs[0]->get_shape();
const auto& filter_shape = inputs[1]->get_shape();
ngraph::runtime::reference::group_convolution<typename ngraph::element_type_traits<ET>::value_type>(
in_data_ptr,
filter_data,
out_data_ptr,
in_shape,
filter_shape,
out_shape,
op->get_strides(),
op->get_dilations(),
op->get_pads_begin(),
op->get_pads_end());
return true;
}
template <>
bool evaluate_node<ngraph::op::v1::GroupConvolution>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v1::GroupConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v1::GroupConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v1::GroupConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v1::GroupConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v1::GroupConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v1::GroupConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v1::GroupConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v1::GroupConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v1::GroupConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v1::GroupConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v1::GroupConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v1::GroupConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v1::GroupConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v1::GroupConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v1::GroupConvolution>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v1::GroupConvolution>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,127 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/group_convolution_backprop_data.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v1::GroupConvolutionBackpropData>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
const auto in_data_ptr = inputs[0]->get_data_ptr<ET>();
const auto filter_data_ptr = inputs[1]->get_data_ptr<ET>();
const auto out_data_ptr = outputs[0]->get_data_ptr<ET>();
const auto in_shape = inputs[0]->get_shape();
const auto filter_shape = inputs[1]->get_shape();
const auto out_shape = outputs[0]->get_shape();
ngraph::runtime::reference::group_convolution_backprop_data<typename ngraph::element_type_traits<ET>::value_type>(
in_data_ptr,
filter_data_ptr,
out_data_ptr,
in_shape,
filter_shape,
out_shape,
op->get_strides(),
op->get_dilations(),
op->get_pads_begin(),
op->get_pads_end(),
op->get_output_padding());
return true;
}
template <>
bool evaluate_node<ngraph::op::v1::GroupConvolutionBackpropData>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(
ov::as_type_ptr<ngraph::op::v1::GroupConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(
ov::as_type_ptr<ngraph::op::v1::GroupConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(
ov::as_type_ptr<ngraph::op::v1::GroupConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(
ov::as_type_ptr<ngraph::op::v1::GroupConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(
ov::as_type_ptr<ngraph::op::v1::GroupConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(
ov::as_type_ptr<ngraph::op::v1::GroupConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(
ov::as_type_ptr<ngraph::op::v1::GroupConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(
ov::as_type_ptr<ngraph::op::v1::GroupConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(
ov::as_type_ptr<ngraph::op::v1::GroupConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(
ov::as_type_ptr<ngraph::op::v1::GroupConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(
ov::as_type_ptr<ngraph::op::v1::GroupConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(
ov::as_type_ptr<ngraph::op::v1::GroupConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(
ov::as_type_ptr<ngraph::op::v1::GroupConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(
ov::as_type_ptr<ngraph::op::v1::GroupConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(
ov::as_type_ptr<ngraph::op::v1::GroupConvolutionBackpropData>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(
ov::as_type_ptr<ngraph::op::v1::GroupConvolutionBackpropData>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,183 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/gru_cell.hpp"
#include "evaluate_node.hpp"
#include "ov_ops/augru_cell.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v3::GRUCell>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::gru_cell<T>(inputs[0]->get_data_ptr<ET>(),
inputs[0]->get_shape(),
inputs[1]->get_data_ptr<ET>(),
inputs[1]->get_shape(),
inputs[2]->get_data_ptr<ET>(),
inputs[2]->get_shape(),
inputs[3]->get_data_ptr<ET>(),
inputs[3]->get_shape(),
inputs[4]->get_data_ptr<ET>(),
inputs[4]->get_shape(),
outputs[0]->get_data_ptr<ET>(),
op->get_activations()[0],
op->get_activations()[1],
op->get_clip(),
op->get_linear_before_reset());
return true;
}
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ov::op::internal::AUGRUCell>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::gru_cell<T>(inputs[0]->get_data_ptr<ET>(),
inputs[0]->get_shape(),
inputs[1]->get_data_ptr<ET>(),
inputs[1]->get_shape(),
inputs[2]->get_data_ptr<ET>(),
inputs[2]->get_shape(),
inputs[3]->get_data_ptr<ET>(),
inputs[3]->get_shape(),
inputs[4]->get_data_ptr<ET>(),
inputs[4]->get_shape(),
outputs[0]->get_data_ptr<ET>(),
op->get_activations()[0],
op->get_activations()[1],
op->get_clip(),
op->get_linear_before_reset(),
inputs[5]->get_data_ptr<ET>());
return true;
}
template <>
bool evaluate_node<ngraph::op::v3::GRUCell>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v3::GRUCell>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v3::GRUCell>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v3::GRUCell>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v3::GRUCell>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v3::GRUCell>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v3::GRUCell>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v3::GRUCell>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v3::GRUCell>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v3::GRUCell>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v3::GRUCell>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v3::GRUCell>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v3::GRUCell>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v3::GRUCell>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v3::GRUCell>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v3::GRUCell>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v3::GRUCell>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}
template <>
bool evaluate_node<ov::op::internal::AUGRUCell>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ov::op::internal::AUGRUCell>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ov::op::internal::AUGRUCell>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ov::op::internal::AUGRUCell>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ov::op::internal::AUGRUCell>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ov::op::internal::AUGRUCell>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ov::op::internal::AUGRUCell>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ov::op::internal::AUGRUCell>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ov::op::internal::AUGRUCell>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ov::op::internal::AUGRUCell>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ov::op::internal::AUGRUCell>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ov::op::internal::AUGRUCell>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ov::op::internal::AUGRUCell>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ov::op::internal::AUGRUCell>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ov::op::internal::AUGRUCell>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ov::op::internal::AUGRUCell>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ov::op::internal::AUGRUCell>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,100 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
// clang-format off
#include "evaluate_node.hpp"
#include "ngraph/runtime/reference/hard_sigmoid.hpp"
// clang-format on
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::HardSigmoid>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::hard_sigmoid<T>(inputs[0]->get_data_ptr<T>(),
inputs[1]->get_data_ptr<const T>()[0],
inputs[2]->get_data_ptr<const T>()[0],
outputs[0]->get_data_ptr<T>(),
ngraph::shape_size(outputs[0]->get_shape()));
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::HardSigmoid>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::HardSigmoid>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::HardSigmoid>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::HardSigmoid>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::HardSigmoid>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::HardSigmoid>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::HardSigmoid>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::HardSigmoid>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::HardSigmoid>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::HardSigmoid>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::HardSigmoid>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::HardSigmoid>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::HardSigmoid>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::HardSigmoid>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::HardSigmoid>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::HardSigmoid>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::HardSigmoid>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,218 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/if.hpp"
#include "evaluate_node.hpp"
#include "evaluates_map.hpp"
namespace if_op {
bool call(const ngraph::HostTensorVector& func_outputs,
const ngraph::HostTensorVector& func_inputs,
const std::shared_ptr<ngraph::Function>& function) {
// map function params -> ngraph::HostTensor
std::unordered_map<ngraph::descriptor::Tensor*, std::shared_ptr<ngraph::HostTensor>> tensor_map;
size_t input_count = 0;
for (const auto& param : function->get_parameters()) {
for (size_t i = 0; i < param->get_output_size(); ++i) {
ngraph::descriptor::Tensor* tensor = &param->output(i).get_tensor();
tensor_map.insert({tensor, func_inputs[input_count++]});
}
}
std::unordered_map<std::shared_ptr<ngraph::Node>, size_t> results_map;
// map function outputs -> ngraph::HostTensor
for (size_t output_count = 0; output_count < function->get_results().size(); ++output_count) {
auto output = function->get_results()[output_count];
results_map[output] = output_count;
}
// for each ordered op in the graph
for (const auto& op : function->get_ordered_ops()) {
if (ngraph::op::is_parameter(op)) {
continue;
}
// get op inputs from map
std::vector<std::shared_ptr<ngraph::HostTensor>> op_inputs;
for (auto input : op->inputs()) {
ngraph::descriptor::Tensor* tensor = &input.get_tensor();
op_inputs.push_back(tensor_map.at(tensor));
}
// get op outputs from map or create
std::vector<std::shared_ptr<ngraph::HostTensor>> op_outputs;
for (size_t i = 0; i < op->get_output_size(); ++i) {
ngraph::descriptor::Tensor* tensor = &op->output(i).get_tensor();
std::shared_ptr<ngraph::HostTensor> host_tensor;
auto it = tensor_map.find(tensor);
if (ngraph::op::is_output(op)) {
host_tensor = func_outputs[results_map[op]];
} else if (it == tensor_map.end()) {
host_tensor = std::make_shared<ngraph::HostTensor>(op->output(i));
tensor_map.insert({tensor, host_tensor});
} else {
host_tensor = it->second;
}
op_outputs.push_back(host_tensor);
}
op->validate_and_infer_types();
OPENVINO_SUPPRESS_DEPRECATED_START
if (!op->evaluate(op_outputs, op_inputs)) {
const auto& evaluates_map = ngraph::runtime::interpreter::get_evaluators_map();
auto it = evaluates_map.find(op->get_type_info());
if (!it->second(op, op_outputs, op_inputs)) {
return false;
}
}
OPENVINO_SUPPRESS_DEPRECATED_END
}
return true;
}
void function(const std::shared_ptr<ngraph::Function>& function,
const ngraph::HostTensorVector& inputs,
ngraph::HostTensorVector& outputs) {
const auto& parameters = function->get_parameters();
const auto& parametersNumber = parameters.size();
const auto& inputsNumber = inputs.size();
NGRAPH_CHECK(parametersNumber == inputsNumber,
"Got function (",
function->get_friendly_name(),
") with ",
parametersNumber,
" parameters, but ",
inputsNumber,
" input blobs");
for (const auto& parameter : parameters) {
const auto& parameterIndex = function->get_parameter_index(parameter);
const auto& parameterShape = parameter->get_shape();
const auto& parameterType = parameter->get_element_type();
const auto& parameterSize = ngraph::shape_size(parameterShape) * parameterType.size();
const auto& input = inputs[parameterIndex];
const auto& inputSize = input->get_size_in_bytes();
NGRAPH_CHECK(parameterSize == inputSize,
"Got parameter (",
parameter->get_friendly_name(),
") of size ",
parameterSize,
" bytes, but corresponding input with index ",
parameterIndex,
" has ",
inputSize,
" bytes");
}
const auto& results = function->get_results();
outputs.reserve(results.size());
for (size_t i = 0; i < results.size(); ++i) {
outputs.push_back(std::make_shared<ngraph::HostTensor>());
}
call(outputs, inputs, function);
}
void if_reference(const std::vector<std::shared_ptr<ngraph::Function>>& bodies,
const std::vector<ngraph::op::util::MultiSubgraphOutputDescriptionVector>& out_descs,
const std::vector<ngraph::op::util::MultiSubgraphInputDescriptionVector>& input_descs,
const ngraph::HostTensorVector& out,
const ngraph::HostTensorVector& args) {
NGRAPH_CHECK(args.size() > 0, "If operation must have input condition value");
auto condition_value = args[0]->get_data_ptr<bool>()[0];
auto branch_index = (condition_value) ? ngraph::op::v8::If::THEN_BODY_INDEX : ngraph::op::v8::If::ELSE_BODY_INDEX;
ngraph::HostTensorVector inputs_to_body;
ngraph::HostTensorVector outs_from_body;
inputs_to_body.resize(input_descs[branch_index].size());
auto inputs_size = args.size();
auto output_size = out.size();
for (const auto& input_desc : input_descs[branch_index]) {
NGRAPH_CHECK(inputs_size > input_desc->m_input_index,
"Incorrect associating! If has not input with id ",
input_desc->m_input_index);
inputs_to_body[input_desc->m_body_parameter_index] = args[input_desc->m_input_index];
}
function(bodies[branch_index], inputs_to_body, outs_from_body);
for (const auto& out_descr : out_descs[branch_index]) {
NGRAPH_CHECK(output_size > out_descr->m_output_index,
"Incorrect associating! If has not output with id ",
out_descr->m_output_index);
auto res = outs_from_body[out_descr->m_body_value_index];
out[out_descr->m_output_index]->set_shape(res->get_shape());
out[out_descr->m_output_index]->write(res->get_data_ptr(), res->get_size_in_bytes());
}
}
} // namespace if_op
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v8::If>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
std::vector<std::shared_ptr<ngraph::Function>> bodies;
for (size_t i = 0; i < op->get_internal_subgraphs_size(); i++) {
bodies.emplace_back(op->get_function(static_cast<int>(i)));
}
std::vector<ov::op::util::MultiSubGraphOp::MultiSubgraphInputDescriptionVector> in_descs;
for (size_t i = 0; i < op->get_input_descriptions_size(); i++) {
in_descs.emplace_back(op->get_input_descriptions(static_cast<int>(i)));
}
std::vector<ov::op::util::MultiSubGraphOp::MultiSubgraphOutputDescriptionVector> out_descs;
for (size_t i = 0; i < op->get_output_descriptions_size(); i++) {
out_descs.emplace_back(op->get_output_descriptions(static_cast<int>(i)));
}
try {
ngraph::runtime::reference::if_reference(bodies, out_descs, in_descs, outputs, inputs);
} catch (...) {
if_op::if_reference(bodies, out_descs, in_descs, outputs, inputs);
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v8::If>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v8::If>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v8::If>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v8::If>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v8::If>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v8::If>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v8::If>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v8::If>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v8::If>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v8::If>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v8::If>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v8::If>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v8::If>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v8::If>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v8::If>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v8::If>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v8::If>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,397 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/interpolate.hpp"
#include "evaluate_node.hpp"
#include "interpolate_shape_inference.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::Interpolate>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
ngraph::element::Type input_et = op->get_input_element_type(0);
switch (input_et) {
case ngraph::element::Type_t::f64:
ngraph::runtime::reference::interpolate<double>(inputs[0]->get_data_ptr<double>(),
op->get_input_partial_shape(0),
outputs[0]->get_data_ptr<double>(),
op->get_output_shape(0),
op->get_attrs());
break;
case ngraph::element::Type_t::f32:
ngraph::runtime::reference::interpolate<float>(inputs[0]->get_data_ptr<float>(),
op->get_input_partial_shape(0),
outputs[0]->get_data_ptr<float>(),
op->get_output_shape(0),
op->get_attrs());
break;
case ngraph::element::Type_t::f16:
ngraph::runtime::reference::interpolate<ngraph::float16>(inputs[0]->get_data_ptr<ngraph::float16>(),
op->get_input_partial_shape(0),
outputs[0]->get_data_ptr<ngraph::float16>(),
op->get_output_shape(0),
op->get_attrs());
break;
case ngraph::element::Type_t::bf16:
ngraph::runtime::reference::interpolate<ngraph::bfloat16>(inputs[0]->get_data_ptr<ngraph::bfloat16>(),
op->get_input_partial_shape(0),
outputs[0]->get_data_ptr<ngraph::bfloat16>(),
op->get_output_shape(0),
op->get_attrs());
break;
default:;
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::Interpolate>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::Interpolate>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}
namespace eval {
namespace interpolate {
// The helpers below are similar to the internal utils used in evaluate method of v4::Intepolate core op
// Those functions can be unified and moved to a common place
std::vector<int64_t> get_axes_vector(const ngraph::HostTensorVector& args,
size_t default_size,
size_t axes_port,
size_t max_num_of_ports) {
size_t num_of_inputs = args.size();
std::vector<int64_t> axes;
if (num_of_inputs == max_num_of_ports) {
auto axes_arg = args[axes_port];
size_t num_of_axes = args[axes_port]->get_shape()[0];
axes.reserve(num_of_axes);
if (axes_arg->get_element_type() == ov::element::i64) {
int64_t* axes_ptr = axes_arg->get_data_ptr<int64_t>();
axes.insert(axes.end(), axes_ptr, axes_ptr + num_of_axes);
} else if (axes_arg->get_element_type() == ov::element::i32) {
int32_t* axes_ptr = axes_arg->get_data_ptr<int32_t>();
for (size_t i = 0; i < num_of_axes; ++i)
axes.push_back(axes_ptr[i]);
} else {
OPENVINO_ASSERT(false, "Failed to process ", axes_arg->get_element_type());
}
} else {
for (size_t i = 0; i < default_size; ++i) {
axes.push_back(i);
}
}
return axes;
}
std::vector<int64_t> get_target_shape_vector(const ngraph::HostTensorVector& args,
size_t num_of_axes,
size_t target_shape_port = 1) {
std::vector<int64_t> target_shape;
target_shape.reserve(num_of_axes);
auto target_shape_arg = args[target_shape_port];
if (target_shape_arg->get_element_type() == ov::element::i64) {
int64_t* target_shape_ptr = target_shape_arg->get_data_ptr<int64_t>();
target_shape.insert(target_shape.end(), target_shape_ptr, target_shape_ptr + num_of_axes);
} else if (target_shape_arg->get_element_type() == ov::element::i32) {
int32_t* target_shape_ptr = target_shape_arg->get_data_ptr<int32_t>();
for (size_t i = 0; i < num_of_axes; ++i)
target_shape.push_back(target_shape_ptr[i]);
} else {
OPENVINO_ASSERT(false, "Failed to process ", target_shape_arg->get_element_type());
}
return target_shape;
}
std::vector<float> get_scales_vector(const ngraph::HostTensorVector& args,
const ov::Shape& input_shape,
const ov::op::util::InterpolateBase::InterpolateAttrs& attrs,
std::vector<int64_t> axes,
size_t scales_port) {
std::vector<float> scales;
size_t num_of_axes = axes.size();
if (attrs.shape_calculation_mode == ov::op::util::InterpolateBase::ShapeCalcMode::SCALES) {
float* scales_ptr = args[scales_port]->get_data_ptr<float>();
scales.insert(scales.end(), scales_ptr, scales_ptr + num_of_axes);
} else {
auto target_shape = get_target_shape_vector(args, num_of_axes);
for (size_t i = 0; i < num_of_axes; ++i) {
size_t axis = axes[i];
float scale = static_cast<float>(target_shape[i]) / static_cast<float>(input_shape[axis]);
scales.push_back(scale);
}
}
return scales;
}
static void pad_input_data(const uint8_t* data_ptr,
uint8_t* padded_data_ptr,
size_t type_size,
const ov::Shape& input_shape,
const ov::Shape& padded_input_shape,
const std::vector<size_t>& pads_begin) {
NGRAPH_SUPPRESS_DEPRECATED_START
ngraph::CoordinateTransform input_transform(input_shape);
ngraph::CoordinateTransform padded_transform(padded_input_shape);
for (const ngraph::Coordinate& input_coord : input_transform) {
auto padded_coord = input_coord;
size_t i = 0;
for (size_t pad : pads_begin) {
padded_coord[i] += pad;
++i;
}
uint8_t* dst_ptr = padded_data_ptr + type_size * padded_transform.index(padded_coord);
const uint8_t* src_ptr = data_ptr + type_size * input_transform.index(input_coord);
memcpy(dst_ptr, src_ptr, type_size);
}
NGRAPH_SUPPRESS_DEPRECATED_END
}
namespace v11 {
bool evaluate_interpolate(const std::shared_ptr<ngraph::op::v11::Interpolate>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using namespace ov::op;
constexpr size_t data_port = 0;
constexpr size_t scales_sizes_port = 1;
constexpr size_t axes_port = 2;
constexpr size_t max_num_of_ports = 3;
ngraph::element::Type input_et = inputs[0]->get_element_type();
size_t type_size = input_et.size();
ov::PartialShape input_shape{inputs[data_port]->get_shape()};
auto m_attrs = op->get_attrs();
util::correct_pads_attr(op.get(),
m_attrs.pads_begin,
m_attrs.pads_end,
std::vector<ngraph::PartialShape>{input_shape});
ov::Shape padded_input_shape;
for (size_t i = 0; i < input_shape.size(); ++i) {
padded_input_shape.emplace_back(m_attrs.pads_begin[i] + m_attrs.pads_end[i] + input_shape[i].get_length());
}
auto axes = get_axes_vector(inputs, inputs[1]->get_shape()[0], axes_port, max_num_of_ports);
auto scales = get_scales_vector(inputs, padded_input_shape, m_attrs, axes, scales_sizes_port);
ov::PartialShape output_shape{padded_input_shape};
if (m_attrs.shape_calculation_mode == util::InterpolateBase::ShapeCalcMode::SCALES) {
util::infer_using_scales(output_shape, axes, scales);
} else {
auto sizes = get_target_shape_vector(inputs, axes.size(), scales_sizes_port);
for (size_t i = 0; i < sizes.size(); ++i) {
output_shape[axes[i]] = ngraph::Dimension(sizes[i]);
}
}
ov::Shape out_shape = output_shape.to_shape();
outputs[0]->set_shape(out_shape);
outputs[0]->set_element_type(input_et);
size_t bytes_in_padded_input = shape_size(padded_input_shape) * type_size;
std::vector<uint8_t> padded_input_data(bytes_in_padded_input, 0);
const uint8_t* data_ptr = inputs[0]->get_data_ptr<uint8_t>();
uint8_t* padded_data_ptr = padded_input_data.data();
pad_input_data(data_ptr,
padded_data_ptr,
type_size,
input_shape.to_shape(),
padded_input_shape,
m_attrs.pads_begin);
switch (input_et) {
case ngraph::element::Type_t::f32:
ngraph::runtime::reference::interpolate<float>(reinterpret_cast<float*>(padded_data_ptr),
padded_input_shape,
scales,
axes,
outputs[0]->get_data_ptr<float>(),
out_shape,
m_attrs);
break;
case ngraph::element::Type_t::u8:
ngraph::runtime::reference::interpolate<uint8_t>(reinterpret_cast<uint8_t*>(padded_data_ptr),
padded_input_shape,
scales,
axes,
outputs[0]->get_data_ptr<uint8_t>(),
out_shape,
m_attrs);
break;
default:;
}
return true;
}
} // namespace v11
} // namespace interpolate
} // namespace eval
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v11::Interpolate>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
return eval::interpolate::v11::evaluate_interpolate(op, outputs, inputs);
}
template <>
bool evaluate_node<ngraph::op::v11::Interpolate>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v11::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v11::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v11::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v11::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v11::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v11::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v11::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v11::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v11::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v11::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v11::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v11::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v11::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v11::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v11::Interpolate>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v11::Interpolate>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,136 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/irdft.hpp"
#include "evaluate_node.hpp"
#include "evaluates_map.hpp"
#include "ngraph/runtime/reference/fft.hpp"
namespace irfft_v9 {
struct InfoForIRFFT9 {
std::vector<float> input_data;
std::vector<int64_t> axes_data;
ngraph::Shape input_data_shape;
ngraph::Shape axes_data_shape;
ngraph::Shape fft_output_shape;
ngraph::Shape output_shape;
int64_t last_signal_size;
};
InfoForIRFFT9 get_info_for_irfft9_eval(const std::vector<std::shared_ptr<ngraph::HostTensor>>& inputs) {
InfoForIRFFT9 result;
result.input_data_shape = inputs[0]->get_shape();
result.axes_data_shape = inputs[1]->get_shape();
result.input_data = get_floats(inputs[0], result.input_data_shape);
result.axes_data = get_integers(inputs[1], result.axes_data_shape);
auto fft_output_shape = result.input_data_shape;
auto output_shape = result.input_data_shape;
int64_t input_rank = static_cast<int64_t>(result.input_data_shape.size());
int64_t complex_data_rank = input_rank - 1;
auto canonicalized_axes = ngraph::runtime::reference::canonicalize_axes(result.axes_data.data(),
result.axes_data_shape,
complex_data_rank);
size_t num_of_axes = result.axes_data.size();
auto signal_size = get_signal_size(inputs, num_of_axes);
const auto last_axis = canonicalized_axes.back();
for (size_t i = 0; i < num_of_axes; ++i) {
int64_t current_axis = canonicalized_axes[i];
int64_t current_signal_size = signal_size[i];
if (current_signal_size != -1) {
fft_output_shape[current_axis] = static_cast<size_t>(current_signal_size);
output_shape[current_axis] = static_cast<size_t>(current_signal_size);
}
}
result.last_signal_size = signal_size.back();
if (signal_size.back() == -1) {
output_shape[last_axis] = 2 * (result.input_data_shape[last_axis] - 1);
fft_output_shape[last_axis] = 2 * (result.input_data_shape[last_axis] - 1);
result.last_signal_size = 2 * (result.input_data_shape[last_axis] - 1);
}
output_shape.pop_back();
result.fft_output_shape = fft_output_shape;
result.output_shape = output_shape;
result.axes_data = canonicalized_axes;
return result;
}
} // namespace irfft_v9
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v9::IRDFT>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto info = irfft_v9::get_info_for_irfft9_eval(inputs);
outputs[0]->set_shape(info.output_shape);
std::vector<float> irfft_result(ngraph::shape_size(info.output_shape), 0.0f);
ngraph::runtime::reference::irdft(info.input_data,
info.input_data_shape,
info.axes_data,
irfft_result.data(),
info.fft_output_shape,
info.output_shape,
info.last_signal_size);
const auto output_type = op->get_input_element_type(0);
ngraph::runtime::reference::fft_postprocessing(outputs, output_type, irfft_result);
return true;
}
template <>
bool evaluate_node<ngraph::op::v9::IRDFT>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v9::IRDFT>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v9::IRDFT>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v9::IRDFT>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v9::IRDFT>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v9::IRDFT>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v9::IRDFT>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v9::IRDFT>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v9::IRDFT>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v9::IRDFT>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v9::IRDFT>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v9::IRDFT>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v9::IRDFT>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v9::IRDFT>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v9::IRDFT>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v9::IRDFT>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v9::IRDFT>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,111 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
// clang-format off
#include "evaluate_node.hpp"
#include "ngraph/runtime/reference/is_finite.hpp"
// clang-format on
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v10::IsFinite>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
ngraph::element::Type input_et = op->get_input_element_type(0);
switch (input_et) {
case ngraph::element::Type_t::f64:
ngraph::runtime::reference::is_finite<double>(inputs[0]->get_data_ptr<double>(),
outputs[0]->get_data_ptr<ngraph::element::Type_t::boolean>(),
ngraph::shape_size(inputs[0]->get_shape()));
break;
case ngraph::element::Type_t::f32:
ngraph::runtime::reference::is_finite<float>(inputs[0]->get_data_ptr<float>(),
outputs[0]->get_data_ptr<ngraph::element::Type_t::boolean>(),
ngraph::shape_size(inputs[0]->get_shape()));
break;
case ngraph::element::Type_t::f16:
ngraph::runtime::reference::is_finite<ngraph::float16>(
inputs[0]->get_data_ptr<ngraph::float16>(),
outputs[0]->get_data_ptr<ngraph::element::Type_t::boolean>(),
ngraph::shape_size(inputs[0]->get_shape()));
break;
case ngraph::element::Type_t::bf16:
ngraph::runtime::reference::is_finite<ngraph::bfloat16>(
inputs[0]->get_data_ptr<ngraph::bfloat16>(),
outputs[0]->get_data_ptr<ngraph::element::Type_t::boolean>(),
ngraph::shape_size(inputs[0]->get_shape()));
break;
default:
return false;
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v10::IsFinite>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v10::IsFinite>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v10::IsFinite>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v10::IsFinite>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v10::IsFinite>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v10::IsFinite>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v10::IsFinite>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v10::IsFinite>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v10::IsFinite>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v10::IsFinite>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v10::IsFinite>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v10::IsFinite>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v10::IsFinite>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v10::IsFinite>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v10::IsFinite>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v10::IsFinite>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v10::IsFinite>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,93 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
// clang-format off
#include "evaluate_node.hpp"
#include "ngraph/runtime/reference/is_inf.hpp"
// clang-format on
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v10::IsInf>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
ngraph::element::Type input_et = op->get_input_element_type(0);
switch (input_et) {
case ngraph::element::Type_t::f64:
ngraph::runtime::reference::is_inf(inputs[0]->get_data_ptr<double>(),
outputs[0]->get_data_ptr<ngraph::element::Type_t::boolean>(),
ngraph::shape_size(inputs[0]->get_shape()),
op->get_attributes());
break;
case ngraph::element::Type_t::f32:
ngraph::runtime::reference::is_inf(inputs[0]->get_data_ptr<float>(),
outputs[0]->get_data_ptr<ngraph::element::Type_t::boolean>(),
ngraph::shape_size(inputs[0]->get_shape()),
op->get_attributes());
break;
case ngraph::element::Type_t::f16:
ngraph::runtime::reference::is_inf(inputs[0]->get_data_ptr<ngraph::float16>(),
outputs[0]->get_data_ptr<ngraph::element::Type_t::boolean>(),
ngraph::shape_size(inputs[0]->get_shape()),
op->get_attributes());
break;
case ngraph::element::Type_t::bf16:
ngraph::runtime::reference::is_inf(inputs[0]->get_data_ptr<ngraph::bfloat16>(),
outputs[0]->get_data_ptr<ngraph::element::Type_t::boolean>(),
ngraph::shape_size(inputs[0]->get_shape()),
op->get_attributes());
break;
default:
return false;
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v10::IsInf>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v10::IsInf>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v10::IsInf>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v10::IsInf>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v10::IsInf>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v10::IsInf>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v10::IsInf>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v10::IsInf>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v10::IsInf>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v10::IsInf>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v10::IsInf>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v10::IsInf>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v10::IsInf>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v10::IsInf>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v10::IsInf>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v10::IsInf>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v10::IsInf>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,89 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
// clang-format off
#include "evaluate_node.hpp"
#include "ngraph/runtime/reference/is_nan.hpp"
// clang-format on
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v10::IsNaN>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
ngraph::element::Type input_et = op->get_input_element_type(0);
switch (input_et) {
case ngraph::element::Type_t::f64:
ngraph::runtime::reference::is_nan(inputs[0]->get_data_ptr<double>(),
outputs[0]->get_data_ptr<ngraph::element::Type_t::boolean>(),
ngraph::shape_size(inputs[0]->get_shape()));
break;
case ngraph::element::Type_t::f32:
ngraph::runtime::reference::is_nan(inputs[0]->get_data_ptr<float>(),
outputs[0]->get_data_ptr<ngraph::element::Type_t::boolean>(),
ngraph::shape_size(inputs[0]->get_shape()));
break;
case ngraph::element::Type_t::f16:
ngraph::runtime::reference::is_nan(inputs[0]->get_data_ptr<ngraph::float16>(),
outputs[0]->get_data_ptr<ngraph::element::Type_t::boolean>(),
ngraph::shape_size(inputs[0]->get_shape()));
break;
case ngraph::element::Type_t::bf16:
ngraph::runtime::reference::is_nan(inputs[0]->get_data_ptr<ngraph::bfloat16>(),
outputs[0]->get_data_ptr<ngraph::element::Type_t::boolean>(),
ngraph::shape_size(inputs[0]->get_shape()));
break;
default:
return false;
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v10::IsNaN>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v10::IsNaN>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v10::IsNaN>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v10::IsNaN>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v10::IsNaN>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v10::IsNaN>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v10::IsNaN>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v10::IsNaN>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v10::IsNaN>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v10::IsNaN>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v10::IsNaN>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v10::IsNaN>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v10::IsNaN>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v10::IsNaN>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v10::IsNaN>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v10::IsNaN>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v10::IsNaN>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,65 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/log.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::Log>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::log<T>(inputs[0]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
ngraph::shape_size(inputs[0]->get_shape()));
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::Log>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::Log>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::Log>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::Log>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::Log>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::Log>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::Log>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::Log>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::Log>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::Log>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::Log>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::Log>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::Log>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::Log>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::Log>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::Log>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::Log>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,102 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/log_softmax.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v5::LogSoftmax>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
int64_t i_axis = op->get_axis();
if (i_axis < 0) {
i_axis += inputs[0]->get_partial_shape().rank().get_length();
}
ngraph::runtime::reference::log_softmax<T>(inputs[0]->get_data_ptr<const T>(),
outputs[0]->get_data_ptr<T>(),
op->get_output_shape(0),
ngraph::AxisSet{(size_t)i_axis});
return true;
}
template <>
bool evaluate_node<ngraph::op::v5::LogSoftmax>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v5::LogSoftmax>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v5::LogSoftmax>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v5::LogSoftmax>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v5::LogSoftmax>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v5::LogSoftmax>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v5::LogSoftmax>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v5::LogSoftmax>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v5::LogSoftmax>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v5::LogSoftmax>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v5::LogSoftmax>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v5::LogSoftmax>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v5::LogSoftmax>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v5::LogSoftmax>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v5::LogSoftmax>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v5::LogSoftmax>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v5::LogSoftmax>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,70 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/lrn.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::LRN>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::lrn<T>(inputs[0]->get_data_ptr<ET>(),
op->get_reduction_axes(),
outputs[0]->get_data_ptr<ET>(),
inputs[0]->get_shape(),
op->get_alpha(),
op->get_beta(),
op->get_bias(),
op->get_nsize());
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::LRN>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::LRN>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::LRN>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::LRN>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::LRN>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::LRN>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::LRN>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::LRN>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::LRN>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::LRN>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::LRN>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::LRN>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::LRN>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::LRN>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::LRN>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::LRN>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::LRN>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,166 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
// clang-format off
#include "evaluate_node.hpp"
#include "ngraph/runtime/reference/lstm_cell.hpp"
// clang-format on
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v4::LSTMCell>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::lstm_cell<T>(inputs[0]->get_data_ptr<ET>(),
inputs[0]->get_shape(),
inputs[1]->get_data_ptr<ET>(),
inputs[1]->get_shape(),
inputs[2]->get_data_ptr<ET>(),
inputs[2]->get_shape(),
inputs[3]->get_data_ptr<ET>(),
inputs[3]->get_shape(),
inputs[4]->get_data_ptr<ET>(),
inputs[4]->get_shape(),
inputs[5]->get_data_ptr<ET>(),
inputs[5]->get_shape(),
outputs[0]->get_data_ptr<ET>(),
outputs[1]->get_data_ptr<ET>(),
op->get_activations()[0],
op->get_activations()[1],
op->get_activations()[2],
op->get_clip());
return true;
}
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::LSTMCell>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::lstm_cell_v1<T>(inputs[0]->get_data_ptr<ET>(),
inputs[0]->get_shape(),
inputs[1]->get_data_ptr<ET>(),
inputs[1]->get_shape(),
inputs[2]->get_data_ptr<ET>(),
inputs[2]->get_shape(),
inputs[3]->get_data_ptr<ET>(),
inputs[3]->get_shape(),
inputs[4]->get_data_ptr<ET>(),
inputs[4]->get_shape(),
inputs[5]->get_data_ptr<ET>(),
inputs[5]->get_shape(),
inputs[6]->get_data_ptr<ET>(),
inputs[6]->get_shape(),
outputs[0]->get_data_ptr<ET>(),
outputs[1]->get_data_ptr<ET>(),
op->get_activations()[0],
op->get_activations()[1],
op->get_activations()[2],
op->get_clip(),
op->get_weights_format(),
op->get_input_forget());
return true;
}
template <>
bool evaluate_node<ngraph::op::v4::LSTMCell>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v4::LSTMCell>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v4::LSTMCell>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v4::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v4::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v4::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v4::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v4::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v4::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v4::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v4::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v4::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v4::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v4::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v4::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v4::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v4::LSTMCell>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}
template <>
bool evaluate_node<ngraph::op::v0::LSTMCell>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::LSTMCell>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::LSTMCell>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::LSTMCell>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::LSTMCell>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,208 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/matrix_nms.hpp"
#include "evaluate_node.hpp"
#include "evaluates_map.hpp"
#include "ngraph/runtime/reference/utils/nms_common.hpp"
namespace matrix_nms_v8 {
using SortResultType = ngraph::op::v8::MatrixNms::SortResultType;
struct InfoForNMS {
ngraph::Shape selected_outputs_shape;
ngraph::Shape selected_indices_shape;
ngraph::Shape boxes_shape;
ngraph::Shape scores_shape;
std::vector<float> boxes_data;
std::vector<float> scores_data;
size_t selected_outputs_shape_size;
size_t selected_indices_shape_size;
};
constexpr size_t boxes_port = 0;
constexpr size_t scores_port = 1;
ngraph::PartialShape infer_selected_outputs_shape(const std::vector<std::shared_ptr<ngraph::HostTensor>>& inputs,
int nms_top_k,
int keep_top_k) {
const auto boxes_ps = inputs[boxes_port]->get_partial_shape();
const auto scores_ps = inputs[scores_port]->get_partial_shape();
ngraph::PartialShape result = {ngraph::Dimension::dynamic(), 6};
if (boxes_ps.rank().is_static() && scores_ps.rank().is_static()) {
const auto num_boxes_boxes = boxes_ps[1];
if (num_boxes_boxes.is_static() && scores_ps[0].is_static() && scores_ps[1].is_static()) {
const auto num_boxes = num_boxes_boxes.get_length();
const auto num_classes = scores_ps[1].get_length();
int64_t max_output_boxes_per_class = 0;
if (nms_top_k >= 0)
max_output_boxes_per_class = std::min(num_boxes, (int64_t)nms_top_k);
else
max_output_boxes_per_class = num_boxes;
auto max_output_boxes_per_batch = max_output_boxes_per_class * num_classes;
if (keep_top_k >= 0)
max_output_boxes_per_batch = std::min(max_output_boxes_per_batch, (int64_t)keep_top_k);
result[0] = max_output_boxes_per_batch * scores_ps[0].get_length();
}
}
return result;
}
std::vector<float> prepare_boxes_data(const std::shared_ptr<ngraph::HostTensor>& boxes,
const ngraph::Shape& boxes_shape) {
auto result = get_floats(boxes, boxes_shape);
return result;
}
std::vector<float> prepare_scores_data(const std::shared_ptr<ngraph::HostTensor>& scores,
const ngraph::Shape& scores_shape) {
auto result = get_floats(scores, scores_shape);
return result;
}
InfoForNMS get_info_for_nms_eval(const std::shared_ptr<ngraph::op::v8::MatrixNms>& nms,
const std::vector<std::shared_ptr<ngraph::HostTensor>>& inputs) {
InfoForNMS result;
const auto& nms_attrs = nms->get_attrs();
const auto nms_top_k = nms_attrs.nms_top_k;
const auto keep_top_k = nms_attrs.keep_top_k;
auto selected_outputs_shape = infer_selected_outputs_shape(inputs, nms_top_k, keep_top_k);
result.selected_outputs_shape = selected_outputs_shape.to_shape();
result.selected_indices_shape = {result.selected_outputs_shape[0], 1};
result.boxes_shape = inputs[boxes_port]->get_shape();
result.scores_shape = inputs[scores_port]->get_shape();
result.boxes_data = prepare_boxes_data(inputs[boxes_port], result.boxes_shape);
result.scores_data = prepare_scores_data(inputs[scores_port], result.scores_shape);
result.selected_outputs_shape_size = ngraph::shape_size(result.selected_outputs_shape);
result.selected_indices_shape_size = ngraph::shape_size(result.selected_indices_shape);
return result;
}
} // namespace matrix_nms_v8
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v8::MatrixNms>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto info = matrix_nms_v8::get_info_for_nms_eval(op, inputs);
std::vector<float> selected_outputs(info.selected_outputs_shape_size);
std::vector<int64_t> selected_indices(info.selected_indices_shape_size);
std::vector<int64_t> valid_outputs(info.boxes_shape[0]);
ngraph::runtime::reference::matrix_nms(info.boxes_data.data(),
info.boxes_shape,
info.scores_data.data(),
info.scores_shape,
op->get_attrs(),
selected_outputs.data(),
info.selected_outputs_shape,
selected_indices.data(),
info.selected_indices_shape,
valid_outputs.data());
void* pscores = nullptr;
void* pselected_num = nullptr;
void* prois;
size_t num_selected = static_cast<size_t>(std::accumulate(valid_outputs.begin(), valid_outputs.end(), size_t(0)));
outputs[0]->set_shape({num_selected, 6});
prois = outputs[0]->get_data_ptr();
if (outputs.size() >= 2) {
outputs[1]->set_shape({num_selected, 1});
pscores = outputs[1]->get_data_ptr();
}
if (outputs.size() >= 3) {
pselected_num = outputs[2]->get_data_ptr();
}
ngraph::runtime::reference::nms_common::nms_common_postprocessing(prois,
pscores,
pselected_num,
op->get_attrs().output_type,
selected_outputs,
selected_indices,
valid_outputs,
op->get_input_element_type(0));
return true;
}
template <>
bool evaluate_node<ngraph::op::v8::MatrixNms>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v8::MatrixNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v8::MatrixNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v8::MatrixNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v8::MatrixNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v8::MatrixNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v8::MatrixNms>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v8::MatrixNms>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v8::MatrixNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v8::MatrixNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v8::MatrixNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v8::MatrixNms>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v8::MatrixNms>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v8::MatrixNms>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v8::MatrixNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v8::MatrixNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v8::MatrixNms>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,68 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/mod.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v1::Mod>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::mod<T>(inputs[0]->get_data_ptr<T>(),
inputs[1]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
inputs[0]->get_shape(),
inputs[1]->get_shape(),
op->get_autob());
return true;
}
template <>
bool evaluate_node<ngraph::op::v1::Mod>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v1::Mod>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v1::Mod>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v1::Mod>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v1::Mod>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v1::Mod>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v1::Mod>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v1::Mod>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v1::Mod>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v1::Mod>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v1::Mod>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v1::Mod>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v1::Mod>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v1::Mod>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v1::Mod>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v1::Mod>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v1::Mod>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,268 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/multiclass_nms.hpp"
#include "evaluate_node.hpp"
#include "ngraph/runtime/reference/utils/nms_common.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v8::MulticlassNms>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto info = ngraph::runtime::reference::multiclass_nms_impl::get_info_for_nms_eval(op, inputs);
std::vector<float> selected_outputs(info.selected_outputs_shape_size);
std::vector<int64_t> selected_indices(info.selected_indices_shape_size);
std::vector<int64_t> valid_outputs(info.selected_numrois_shape_size);
ngraph::runtime::reference::multiclass_nms(info.boxes_data.data(),
info.boxes_shape,
info.scores_data.data(),
info.scores_shape,
nullptr,
ngraph::Shape(), // won't be used
op->get_attrs(),
selected_outputs.data(),
info.selected_outputs_shape,
selected_indices.data(),
info.selected_indices_shape,
valid_outputs.data());
void* pscores = nullptr;
void* pselected_num = nullptr;
void* prois;
size_t num_selected = static_cast<size_t>(std::accumulate(valid_outputs.begin(), valid_outputs.end(), int64_t(0)));
outputs[0]->set_shape({num_selected, 6});
prois = outputs[0]->get_data_ptr();
if (outputs.size() >= 2) {
outputs[1]->set_shape({num_selected, 1});
pscores = outputs[1]->get_data_ptr();
}
if (outputs.size() >= 3) {
pselected_num = outputs[2]->get_data_ptr();
}
ngraph::runtime::reference::nms_common::nms_common_postprocessing(prois,
pscores,
pselected_num,
op->get_attrs().output_type,
selected_outputs,
selected_indices,
valid_outputs,
op->get_input_element_type(0));
return true;
}
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v9::MulticlassNms>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto info = ngraph::runtime::reference::multiclass_nms_impl::get_info_for_nms_eval(op, inputs);
std::vector<float> selected_outputs(info.selected_outputs_shape_size);
std::vector<int64_t> selected_indices(info.selected_indices_shape_size);
std::vector<int64_t> valid_outputs(info.selected_numrois_shape_size);
ngraph::runtime::reference::multiclass_nms(info.boxes_data.data(),
info.boxes_shape,
info.scores_data.data(),
info.scores_shape,
info.roisnum_data.data(),
info.roisnum_shape,
op->get_attrs(),
selected_outputs.data(),
info.selected_outputs_shape,
selected_indices.data(),
info.selected_indices_shape,
valid_outputs.data());
void* pscores = nullptr;
void* pselected_num = nullptr;
void* prois;
size_t num_selected = static_cast<size_t>(std::accumulate(valid_outputs.begin(), valid_outputs.end(), 0));
outputs[0]->set_shape({num_selected, 6});
prois = outputs[0]->get_data_ptr();
if (outputs.size() >= 2) {
outputs[1]->set_shape({num_selected, 1});
pscores = outputs[1]->get_data_ptr();
}
if (outputs.size() >= 3) {
pselected_num = outputs[2]->get_data_ptr();
}
ngraph::runtime::reference::nms_common::nms_common_postprocessing(prois,
pscores,
pselected_num,
op->get_attrs().output_type,
selected_outputs,
selected_indices,
valid_outputs,
op->get_input_element_type(0));
return true;
}
template <>
bool evaluate_node<ngraph::op::v8::MulticlassNms>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v8::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v8::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v8::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v8::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v8::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v8::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v8::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v8::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v8::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v8::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v8::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v8::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v8::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v8::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v8::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v8::MulticlassNms>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}
template <>
bool evaluate_node<ngraph::op::v9::MulticlassNms>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v9::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v9::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v9::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v9::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v9::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v9::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v9::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v9::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v9::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v9::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v9::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v9::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v9::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v9::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v9::MulticlassNms>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v9::MulticlassNms>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,159 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/mvn.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::MVN>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::mvn<T>(inputs[0]->get_data_ptr<ET>(),
outputs[0]->get_data_ptr<ET>(),
inputs[0]->get_shape(),
op->get_normalize_variance(),
op->get_reduction_axes(),
op->get_eps());
return true;
}
namespace mvn_6_axes {
template <typename T>
ngraph::AxisSet mvn_6_reduction_axes(const ngraph::HostTensorPtr& axes_input, size_t rank) {
T* a = axes_input->get_data_ptr<T>();
auto v = std::vector<T>(a, a + axes_input->get_shape()[0]);
std::vector<size_t> axes(v.size(), 0);
for (size_t i = 0; i < v.size(); i++) {
if (v[i] < 0) {
if (rank + v[i] < 0) {
throw ngraph::ngraph_error("Unexpected axis");
}
axes[i] = (size_t)(rank + v[i]);
} else {
axes[i] = (size_t)(v[i]);
}
}
return ngraph::AxisSet(axes);
}
} // namespace mvn_6_axes
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v6::MVN>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::AxisSet reduction_axes;
auto rank = inputs[0]->get_shape().size();
if (inputs[1]->get_element_type() == ngraph::element::i64) {
reduction_axes = mvn_6_axes::mvn_6_reduction_axes<int64_t>(inputs[1], rank);
} else if (inputs[1]->get_element_type() == ngraph::element::i32) {
reduction_axes = mvn_6_axes::mvn_6_reduction_axes<int32_t>(inputs[1], rank);
} else {
throw ngraph::ngraph_error("Unexpected indices type");
}
ngraph::runtime::reference::mvn_6<T>(inputs[0]->get_data_ptr<ET>(),
outputs[0]->get_data_ptr<ET>(),
inputs[0]->get_shape(),
reduction_axes,
op->get_normalize_variance(),
op->get_eps(),
op->get_eps_mode());
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::MVN>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::MVN>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}
template <>
bool evaluate_node<ngraph::op::v6::MVN>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v6::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v6::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v6::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v6::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v6::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v6::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v6::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v6::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v6::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v6::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v6::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v6::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v6::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v6::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v6::MVN>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v6::MVN>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,100 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/normalize_l2.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::NormalizeL2>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::normalize_l2<T>(inputs[0]->get_data_ptr<const T>(),
outputs[0]->get_data_ptr<T>(),
op->get_input_shape(0),
op->get_reduction_axes(),
op->get_eps(),
op->get_eps_mode());
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::NormalizeL2>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::NormalizeL2>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::NormalizeL2>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::NormalizeL2>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::NormalizeL2>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::NormalizeL2>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::NormalizeL2>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::NormalizeL2>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::NormalizeL2>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::NormalizeL2>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::NormalizeL2>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::NormalizeL2>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::NormalizeL2>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::NormalizeL2>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::NormalizeL2>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::NormalizeL2>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::NormalizeL2>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,454 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#pragma once
#include "evaluate_node.hpp"
#include "ov_ops/augru_cell.hpp"
#include "ov_ops/augru_sequence.hpp"
extern template bool evaluate_node<ngraph::op::v0::Abs>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::BatchNormInference>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::Ceiling>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::CTCGreedyDecoder>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::CumSum>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::DetectionOutput>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::Elu>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::Gelu>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v7::Gelu>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::GRN>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::HardSigmoid>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::Interpolate>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v11::Interpolate>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::LRN>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::LSTMCell>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::LSTMSequence>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::MVN>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::NormalizeL2>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::Proposal>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::PSROIPooling>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::RegionYolo>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::Relu>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::ReorgYolo>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::ReverseSequence>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::RNNCell>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::Selu>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::Sign>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::SquaredDifference>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::TensorIterator>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::ROIPooling>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v1::AvgPool>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v1::BinaryConvolution>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v1::ConvertLike>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v1::Convolution>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v1::ConvolutionBackpropData>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v1::DeformablePSROIPooling>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v1::Equal>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v1::Greater>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v1::GroupConvolution>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v1::GroupConvolutionBackpropData>(
std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v1::DeformableConvolution>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v1::Mod>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v1::NonMaxSuppression>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v1::Pad>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v1::GatherTree>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v3::Assign>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v3::Bucketize>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v3::EmbeddingBagOffsetsSum>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v3::EmbeddingBagPackedSum>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v3::ExtractImagePatches>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v3::EmbeddingSegmentsSum>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v3::GRUCell>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v3::NonMaxSuppression>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v3::ReadValue>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v3::ScatterNDUpdate>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v4::CTCLoss>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v4::LSTMCell>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v4::NonMaxSuppression>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v4::Proposal>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v5::BatchNormInference>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v5::GatherND>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v5::GRUSequence>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v5::LogSoftmax>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v5::LSTMSequence>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v5::NonMaxSuppression>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v5::RNNSequence>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v6::CTCGreedyDecoderSeqLen>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v6::ExperimentalDetectronDetectionOutput>(
std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v6::ExperimentalDetectronGenerateProposalsSingleImage>(
std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v9::GenerateProposals>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v6::ExperimentalDetectronPriorGridGenerator>(
std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v6::ExperimentalDetectronROIFeatureExtractor>(
std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v6::ExperimentalDetectronTopKROIs>(
std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v6::GatherElements>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v6::MVN>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v7::DFT>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v7::Einsum>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v7::IDFT>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v7::Roll>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v8::AdaptiveAvgPool>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v8::AdaptiveMaxPool>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v8::Gather>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v8::MatrixNms>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v8::MulticlassNms>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v8::DeformableConvolution>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v8::If>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v8::GatherND>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v8::DetectionOutput>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v8::NV12toRGB>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v8::NV12toBGR>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v8::I420toRGB>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v8::I420toBGR>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::Sigmoid>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::Tanh>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::Exp>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::Log>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v0::PRelu>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v9::GridSample>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v9::RDFT>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v9::NonMaxSuppression>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v9::IRDFT>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v9::ROIAlign>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v9::SoftSign>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v9::MulticlassNms>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v10::IsFinite>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v10::IsInf>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v10::IsNaN>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ngraph::op::v10::Unique>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ov::op::internal::AUGRUCell>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);
extern template bool evaluate_node<ov::op::internal::AUGRUSequence>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs);

View File

@ -0,0 +1,70 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/pad.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v1::Pad>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
ngraph::runtime::reference::pad(inputs[0]->get_data_ptr<char>(),
inputs[1]->get_data_ptr<char>(),
outputs[0]->get_data_ptr<char>(),
ngraph::shape_size(inputs[0]->get_shape()),
inputs[1]->get_shape(),
outputs[0]->get_shape(),
op->get_pads_end(),
op->get_pads_begin(),
op->get_pad_mode());
return true;
}
template <>
bool evaluate_node<ngraph::op::v1::Pad>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v1::Pad>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v1::Pad>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v1::Pad>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v1::Pad>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v1::Pad>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v1::Pad>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v1::Pad>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v1::Pad>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v1::Pad>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v1::Pad>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v1::Pad>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v1::Pad>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v1::Pad>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v1::Pad>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v1::Pad>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v1::Pad>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,69 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/prelu.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::PRelu>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::prelu<T>(inputs[0]->get_data_ptr<T>(),
inputs[1]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
inputs[0]->get_shape(),
inputs[1]->get_shape());
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::PRelu>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::PRelu>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::PRelu>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::PRelu>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::PRelu>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::PRelu>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::PRelu>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::PRelu>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::PRelu>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::PRelu>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::PRelu>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::PRelu>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::PRelu>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::PRelu>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::PRelu>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::PRelu>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::PRelu>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,145 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/proposal.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::Proposal>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::proposal_v0<T>(inputs[0]->get_data_ptr<T>(),
inputs[1]->get_data_ptr<T>(),
inputs[2]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
inputs[0]->get_shape(),
inputs[1]->get_shape(),
inputs[2]->get_shape(),
outputs[0]->get_shape(),
op.get()->get_attrs());
return true;
}
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v4::Proposal>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::proposal_v4<T>(inputs[0]->get_data_ptr<T>(),
inputs[1]->get_data_ptr<T>(),
inputs[2]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
outputs[1]->get_data_ptr<T>(),
inputs[0]->get_shape(),
inputs[1]->get_shape(),
inputs[2]->get_shape(),
outputs[0]->get_shape(),
outputs[1]->get_shape(),
op.get()->get_attrs());
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::Proposal>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::Proposal>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::Proposal>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::Proposal>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}
template <>
bool evaluate_node<ngraph::op::v4::Proposal>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v4::Proposal>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v4::Proposal>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v4::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v4::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v4::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v4::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v4::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v4::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v4::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v4::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v4::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v4::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v4::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v4::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v4::Proposal>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v4::Proposal>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,77 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/psroi_pooling.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::PSROIPooling>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::psroi_pooling<T>(inputs[0]->get_data_ptr<T>(),
inputs[0]->get_shape(),
inputs[1]->get_data_ptr<T>(),
inputs[1]->get_shape(),
outputs[0]->get_data_ptr<T>(),
outputs[0]->get_shape(),
op->get_mode(),
op->get_spatial_scale(),
op->get_spatial_bins_x(),
op->get_spatial_bins_y());
return true;
}
template <>
bool evaluate_node<ngraph::op::PSROIPooling>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::PSROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::PSROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::PSROIPooling>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::PSROIPooling>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::PSROIPooling>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::PSROIPooling>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::PSROIPooling>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::PSROIPooling>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::PSROIPooling>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::PSROIPooling>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::PSROIPooling>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::PSROIPooling>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::PSROIPooling>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::PSROIPooling>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::PSROIPooling>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::PSROIPooling>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,125 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/rdft.hpp"
#include "evaluate_node.hpp"
#include "evaluates_map.hpp"
#include "ngraph/runtime/reference/fft.hpp"
namespace rfft_v9 {
struct InfoForRFFT9 {
std::vector<float> input_data;
std::vector<int64_t> axes_data;
ngraph::Shape input_data_shape;
ngraph::Shape axes_data_shape;
ngraph::Shape fft_output_shape;
ngraph::Shape output_shape;
};
InfoForRFFT9 get_info_for_rfft9_eval(const std::vector<std::shared_ptr<ngraph::HostTensor>>& inputs) {
InfoForRFFT9 result;
result.input_data_shape = inputs[0]->get_shape();
result.axes_data_shape = inputs[1]->get_shape();
result.input_data = get_floats(inputs[0], result.input_data_shape);
result.axes_data = get_integers(inputs[1], result.axes_data_shape);
auto fft_output_shape = result.input_data_shape;
auto output_shape = result.input_data_shape;
int64_t input_rank = static_cast<int64_t>(result.input_data_shape.size());
auto canonicalized_axes =
ngraph::runtime::reference::canonicalize_axes(result.axes_data.data(), result.axes_data_shape, input_rank);
size_t num_of_axes = result.axes_data.size();
auto signal_size = get_signal_size(inputs, num_of_axes);
const auto last_axis = canonicalized_axes.back();
for (size_t i = 0; i < num_of_axes; ++i) {
int64_t current_axis = canonicalized_axes[i];
int64_t current_signal_size = signal_size[i];
if (current_signal_size != -1) {
fft_output_shape[current_axis] = current_signal_size;
output_shape[current_axis] = current_signal_size;
}
}
output_shape[last_axis] = fft_output_shape[last_axis] / 2 + 1;
output_shape.push_back(2);
fft_output_shape.push_back(2);
result.fft_output_shape = fft_output_shape;
result.output_shape = output_shape;
result.axes_data = canonicalized_axes;
return result;
}
} // namespace rfft_v9
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v9::RDFT>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto info = rfft_v9::get_info_for_rfft9_eval(inputs);
outputs[0]->set_shape(info.output_shape);
std::vector<float> rfft_result(ngraph::shape_size(info.output_shape), 0.0f);
ngraph::runtime::reference::rdft(info.input_data,
info.input_data_shape,
info.axes_data,
info.fft_output_shape,
rfft_result.data());
const auto output_type = op->get_input_element_type(0);
ngraph::runtime::reference::fft_postprocessing(outputs, output_type, rfft_result);
return true;
}
template <>
bool evaluate_node<ngraph::op::v9::RDFT>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v9::RDFT>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v9::RDFT>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v9::RDFT>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v9::RDFT>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v9::RDFT>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v9::RDFT>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v9::RDFT>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v9::RDFT>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v9::RDFT>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v9::RDFT>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v9::RDFT>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v9::RDFT>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v9::RDFT>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v9::RDFT>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v9::RDFT>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v9::RDFT>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,84 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v3::ReadValue>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
outputs[0]->set_unary(inputs[0]);
void* input = inputs[0]->get_data_ptr();
outputs[0]->write(input, outputs[0]->get_size_in_bytes());
return true;
}
template <>
bool evaluate_node<ngraph::op::v3::ReadValue>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v3::ReadValue>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v3::ReadValue>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v3::ReadValue>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v3::ReadValue>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v3::ReadValue>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v3::ReadValue>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v3::ReadValue>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v3::ReadValue>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v3::ReadValue>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v3::ReadValue>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v3::ReadValue>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v3::ReadValue>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v3::ReadValue>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v3::ReadValue>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v3::ReadValue>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v3::ReadValue>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,102 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/region_yolo.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::RegionYolo>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::region_yolo<T>(inputs[0]->get_data_ptr<const T>(),
outputs[0]->get_data_ptr<T>(),
inputs[0]->get_shape(),
static_cast<int>(op->get_num_coords()),
static_cast<int>(op->get_num_classes()),
static_cast<int>(op->get_num_regions()),
op->get_do_softmax(),
op->get_mask());
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::RegionYolo>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::RegionYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::RegionYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::RegionYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::RegionYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::RegionYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::RegionYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::RegionYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::RegionYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::RegionYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::RegionYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::RegionYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::RegionYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::RegionYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::RegionYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::RegionYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::RegionYolo>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,65 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/relu.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::Relu>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::relu<T>(inputs[0]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
ngraph::shape_size(inputs[0]->get_shape()));
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::Relu>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::Relu>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::Relu>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::Relu>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::Relu>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::Relu>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::Relu>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::Relu>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::Relu>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::Relu>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::Relu>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::Relu>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::Relu>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::Relu>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::Relu>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::Relu>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::Relu>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,88 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/reorg_yolo.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::ReorgYolo>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
ngraph::runtime::reference::reorg_yolo(inputs[0]->get_data_ptr<char>(),
outputs[0]->get_data_ptr<char>(),
inputs[0]->get_shape(),
op->get_strides().at(0),
inputs[0]->get_element_type().size());
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::ReorgYolo>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::ReorgYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::ReorgYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::ReorgYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::ReorgYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::ReorgYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::ReorgYolo>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::ReorgYolo>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::ReorgYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::ReorgYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::ReorgYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::ReorgYolo>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::ReorgYolo>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::ReorgYolo>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::ReorgYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::ReorgYolo>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::ReorgYolo>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,149 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/reverse_sequence.hpp"
#include "evaluate_node.hpp"
namespace reverse_sequence_v0 {
template <ngraph::element::Type_t t1, ngraph::element::Type_t t2>
inline void evaluate(const std::shared_ptr<ngraph::op::v0::ReverseSequence>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T1 = typename ngraph::element_type_traits<t1>::value_type;
using T2 = typename ngraph::element_type_traits<t2>::value_type;
ngraph::runtime::reference::reverse_sequence<T1, T2>(inputs[0]->get_data_ptr<T1>(),
outputs[0]->get_data_ptr<T1>(),
inputs[0]->get_shape(),
op->get_batch_axis(),
op->get_sequence_axis(),
inputs[1]->get_data_ptr<T2>());
}
} // namespace reverse_sequence_v0
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::ReverseSequence>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
switch (inputs[1]->get_element_type()) {
case ngraph::element::Type_t::boolean:
reverse_sequence_v0::evaluate<ET, ngraph::element::Type_t::boolean>(op, outputs, inputs);
break;
case ngraph::element::Type_t::i8:
reverse_sequence_v0::evaluate<ET, ngraph::element::Type_t::i8>(op, outputs, inputs);
break;
case ngraph::element::Type_t::i16:
reverse_sequence_v0::evaluate<ET, ngraph::element::Type_t::i16>(op, outputs, inputs);
break;
case ngraph::element::Type_t::i32:
reverse_sequence_v0::evaluate<ET, ngraph::element::Type_t::i32>(op, outputs, inputs);
break;
case ngraph::element::Type_t::i64:
reverse_sequence_v0::evaluate<ET, ngraph::element::Type_t::i64>(op, outputs, inputs);
break;
case ngraph::element::Type_t::u8:
reverse_sequence_v0::evaluate<ET, ngraph::element::Type_t::u8>(op, outputs, inputs);
break;
case ngraph::element::Type_t::u16:
reverse_sequence_v0::evaluate<ET, ngraph::element::Type_t::u16>(op, outputs, inputs);
break;
case ngraph::element::Type_t::u32:
reverse_sequence_v0::evaluate<ET, ngraph::element::Type_t::u32>(op, outputs, inputs);
break;
case ngraph::element::Type_t::u64:
reverse_sequence_v0::evaluate<ET, ngraph::element::Type_t::u64>(op, outputs, inputs);
break;
case ngraph::element::Type_t::f16:
reverse_sequence_v0::evaluate<ET, ngraph::element::Type_t::f16>(op, outputs, inputs);
break;
case ngraph::element::Type_t::f32:
reverse_sequence_v0::evaluate<ET, ngraph::element::Type_t::f32>(op, outputs, inputs);
break;
case ngraph::element::Type_t::f64:
reverse_sequence_v0::evaluate<ET, ngraph::element::Type_t::f64>(op, outputs, inputs);
break;
default:
return false;
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::ReverseSequence>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::ReverseSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::ReverseSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::ReverseSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::ReverseSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::ReverseSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::ReverseSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::ReverseSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::ReverseSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::ReverseSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::ReverseSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::ReverseSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::ReverseSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::ReverseSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::ReverseSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::ReverseSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::ReverseSequence>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,77 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/rnn_cell.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::RNNCell>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::rnn_cell<T>(inputs[0]->get_data_ptr<ET>(),
inputs[0]->get_shape(),
inputs[1]->get_data_ptr<ET>(),
inputs[1]->get_shape(),
inputs[2]->get_data_ptr<ET>(),
inputs[2]->get_shape(),
inputs[3]->get_data_ptr<ET>(),
inputs[3]->get_shape(),
inputs[4]->get_data_ptr<ET>(),
inputs[4]->get_shape(),
outputs[0]->get_data_ptr<ET>(),
op->get_activations().front(),
op->get_clip());
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::RNNCell>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::RNNCell>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::RNNCell>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::RNNCell>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::RNNCell>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::RNNCell>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::RNNCell>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::RNNCell>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::RNNCell>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::RNNCell>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::RNNCell>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::RNNCell>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::RNNCell>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::RNNCell>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::RNNCell>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::RNNCell>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::RNNCell>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,95 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/roi_align.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v9::ROIAlign>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
std::vector<int64_t> batch_indices_vec_scaled_up = host_tensor_2_vector<int64_t>(inputs[2]);
ngraph::op::v3::ROIAlign::PoolingMode m_mode_v3;
switch (op->get_mode()) {
case ngraph::op::v9::ROIAlign::PoolingMode::AVG: {
m_mode_v3 = ngraph::op::v3::ROIAlign::PoolingMode::AVG;
break;
}
case ngraph::op::v9::ROIAlign::PoolingMode::MAX: {
m_mode_v3 = ngraph::op::v3::ROIAlign::PoolingMode::MAX;
break;
}
default: {
NGRAPH_CHECK(false, "unsupported PoolingMode ");
}
}
ngraph::runtime::reference::roi_align<T>(inputs[0]->get_data_ptr<const T>(),
inputs[1]->get_data_ptr<const T>(),
batch_indices_vec_scaled_up.data(),
outputs[0]->get_data_ptr<T>(),
op->get_input_shape(0),
op->get_input_shape(1),
op->get_input_shape(2),
op->get_output_shape(0),
op->get_pooled_h(),
op->get_pooled_w(),
op->get_sampling_ratio(),
op->get_spatial_scale(),
m_mode_v3,
op->get_aligned_mode());
return true;
}
template <>
bool evaluate_node<ngraph::op::v9::ROIAlign>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v9::ROIAlign>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v9::ROIAlign>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v9::ROIAlign>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v9::ROIAlign>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v9::ROIAlign>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v9::ROIAlign>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v9::ROIAlign>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v9::ROIAlign>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v9::ROIAlign>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v9::ROIAlign>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v9::ROIAlign>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v9::ROIAlign>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v9::ROIAlign>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v9::ROIAlign>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v9::ROIAlign>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v9::ROIAlign>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,103 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
// clang-format off
#include "evaluate_node.hpp"
#include "ngraph/runtime/reference/roi_pooling.hpp"
// clang-format on
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::ROIPooling>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::roi_pooling<T>(inputs[0]->get_data_ptr<const T>(),
inputs[1]->get_data_ptr<const T>(),
outputs[0]->get_data_ptr<T>(),
op->get_input_shape(0),
op->get_input_shape(1),
op->get_output_shape(0),
op->get_spatial_scale(),
op->get_method());
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::ROIPooling>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::ROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::ROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::ROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::ROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::ROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::ROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::ROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::ROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::ROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::ROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::ROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::ROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::ROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::ROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::ROIPooling>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::ROIPooling>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,96 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/roll.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v7::Roll>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
const auto& shiftType = inputs[1]->get_element_type();
std::vector<int64_t> shift_int64;
if (shiftType == ngraph::element::Type_t::i32) {
auto shift = inputs[1]->get_data_ptr<const int32_t>();
shift_int64.resize(ngraph::shape_size(inputs[1]->get_shape()));
std::transform(shift,
shift + ngraph::shape_size(inputs[1]->get_shape()),
shift_int64.begin(),
[](const int32_t& elem) {
return static_cast<int64_t>(elem);
});
}
const auto& axesType = inputs[2]->get_element_type();
std::vector<int64_t> axes_int64;
if (axesType == ngraph::element::Type_t::i32) {
auto axes = inputs[2]->get_data_ptr<const int32_t>();
axes_int64.resize(ngraph::shape_size(inputs[2]->get_shape()));
std::transform(axes,
axes + ngraph::shape_size(inputs[2]->get_shape()),
axes_int64.begin(),
[](const int32_t& elem) {
return static_cast<int64_t>(elem);
});
}
ngraph::runtime::reference::roll(
inputs[0]->get_data_ptr<const char>(),
inputs[1]->get_element_type() != ngraph::element::Type_t::i64 ? shift_int64.data()
: inputs[1]->get_data_ptr<const int64_t>(),
inputs[2]->get_element_type() != ngraph::element::Type_t::i64 ? axes_int64.data()
: inputs[2]->get_data_ptr<const int64_t>(),
outputs[0]->get_data_ptr<char>(),
inputs[0]->get_shape(),
inputs[1]->get_shape(),
inputs[2]->get_shape(),
inputs[0]->get_element_type().size());
return true;
}
template <>
bool evaluate_node<ngraph::op::v7::Roll>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v7::Roll>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v7::Roll>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v7::Roll>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v7::Roll>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v7::Roll>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v7::Roll>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v7::Roll>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v7::Roll>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v7::Roll>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v7::Roll>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v7::Roll>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v7::Roll>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v7::Roll>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v7::Roll>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v7::Roll>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v7::Roll>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,114 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/scatter_nd_update.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v3::ScatterNDUpdate>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
auto idxType = op->get_input_element_type(1);
if (idxType == ngraph::element::i32) {
ngraph::runtime::reference::scatterNdUpdate<T, int32_t>(inputs[0]->get_data_ptr<const T>(),
inputs[1]->get_data_ptr<const int32_t>(),
inputs[2]->get_data_ptr<const T>(),
outputs[0]->get_data_ptr<T>(),
op->get_input_shape(0),
op->get_input_shape(1),
op->get_input_shape(2));
} else if (idxType == ngraph::element::i64) {
ngraph::runtime::reference::scatterNdUpdate<T, int64_t>(inputs[0]->get_data_ptr<const T>(),
inputs[1]->get_data_ptr<const int64_t>(),
inputs[2]->get_data_ptr<const T>(),
outputs[0]->get_data_ptr<T>(),
op->get_input_shape(0),
op->get_input_shape(1),
op->get_input_shape(2));
} else {
throw ngraph::ngraph_error("ScatterNDUpdate layer support only i32 and i64 'indices' input precision!");
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v3::ScatterNDUpdate>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v3::ScatterNDUpdate>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v3::ScatterNDUpdate>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v3::ScatterNDUpdate>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v3::ScatterNDUpdate>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v3::ScatterNDUpdate>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v3::ScatterNDUpdate>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v3::ScatterNDUpdate>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v3::ScatterNDUpdate>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v3::ScatterNDUpdate>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v3::ScatterNDUpdate>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v3::ScatterNDUpdate>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v3::ScatterNDUpdate>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v3::ScatterNDUpdate>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v3::ScatterNDUpdate>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v3::ScatterNDUpdate>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v3::ScatterNDUpdate>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,69 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/selu.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::Selu>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::selu<T>(inputs[0]->get_data_ptr<T>(),
inputs[1]->get_data_ptr<T>(),
inputs[2]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
ngraph::shape_size(inputs[0]->get_shape()),
ngraph::shape_size(inputs[1]->get_shape()),
ngraph::shape_size(inputs[2]->get_shape()));
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::Selu>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::Selu>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::Selu>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::Selu>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::Selu>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::Selu>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::Selu>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::Selu>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::Selu>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::Selu>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::Selu>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::Selu>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::Selu>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::Selu>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::Selu>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::Selu>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::Selu>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,653 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
// clang-format off
#include "evaluate_node.hpp"
#include "ov_ops/augru_sequence.hpp"
#include "ngraph/runtime/reference/sequences.hpp"
// clang-format on
namespace rnn_seq_v5 {
template <ngraph::element::Type_t t1, ngraph::element::Type_t t2>
inline void evaluate(const std::shared_ptr<ngraph::op::v5::RNNSequence>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T1 = typename ngraph::element_type_traits<t1>::value_type;
using T2 = typename ngraph::element_type_traits<t2>::value_type;
ngraph::runtime::reference::rnn_sequence<T1, T2>(inputs[0]->get_data_ptr<char>(),
inputs[0]->get_shape(),
inputs[1]->get_data_ptr<char>(),
inputs[1]->get_shape(),
inputs[2]->get_data_ptr<char>(),
inputs[2]->get_shape(),
inputs[3]->get_data_ptr<char>(),
inputs[3]->get_shape(),
inputs[4]->get_data_ptr<char>(),
inputs[4]->get_shape(),
inputs[5]->get_data_ptr<char>(),
inputs[5]->get_shape(),
outputs[0]->get_data_ptr<char>(),
outputs[1]->get_data_ptr<char>(),
op->get_activations()[0],
op->get_clip(),
op->get_direction());
}
} // namespace rnn_seq_v5
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v5::RNNSequence>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
switch (inputs[2]->get_element_type()) {
case ngraph::element::Type_t::i64:
case ngraph::element::Type_t::u64:
rnn_seq_v5::evaluate<ET, ngraph::element::Type_t::i64>(op, outputs, inputs);
break;
case ngraph::element::Type_t::i32:
case ngraph::element::Type_t::u32:
rnn_seq_v5::evaluate<ET, ngraph::element::Type_t::i32>(op, outputs, inputs);
break;
default:
return false;
}
return true;
}
namespace lstm_seq_v1 {
template <ngraph::element::Type_t t1, ngraph::element::Type_t t2>
inline void evaluate(const std::shared_ptr<ngraph::op::v0::LSTMSequence>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T1 = typename ngraph::element_type_traits<t1>::value_type;
using T2 = typename ngraph::element_type_traits<t2>::value_type;
ngraph::runtime::reference::lstm_sequence_v1<T1, T2>(inputs[0]->get_data_ptr<char>(),
inputs[0]->get_shape(),
inputs[1]->get_data_ptr<char>(),
inputs[1]->get_shape(),
inputs[2]->get_data_ptr<char>(),
inputs[2]->get_shape(),
inputs[3]->get_data_ptr<char>(),
inputs[3]->get_shape(),
inputs[4]->get_data_ptr<char>(),
inputs[4]->get_shape(),
inputs[5]->get_data_ptr<char>(),
inputs[5]->get_shape(),
inputs[6]->get_data_ptr<char>(),
inputs[6]->get_shape(),
inputs[7]->get_data_ptr<char>(),
inputs[7]->get_shape(),
outputs[0]->get_data_ptr<char>(),
outputs[1]->get_data_ptr<char>(),
outputs[2]->get_data_ptr<char>(),
op->get_activations()[0],
op->get_activations()[1],
op->get_activations()[2],
op->get_clip_threshold(),
op->get_weights_format(),
op->get_input_forget(),
op->get_direction());
}
} // namespace lstm_seq_v1
namespace lstm_seq_v5 {
template <ngraph::element::Type_t t1, ngraph::element::Type_t t2>
inline void evaluate(const std::shared_ptr<ngraph::op::v5::LSTMSequence>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T1 = typename ngraph::element_type_traits<t1>::value_type;
using T2 = typename ngraph::element_type_traits<t2>::value_type;
ngraph::runtime::reference::lstm_sequence<T1, T2>(inputs[0]->get_data_ptr<char>(),
inputs[0]->get_shape(),
inputs[1]->get_data_ptr<char>(),
inputs[1]->get_shape(),
inputs[2]->get_data_ptr<char>(),
inputs[2]->get_shape(),
inputs[3]->get_data_ptr<char>(),
inputs[3]->get_shape(),
inputs[4]->get_data_ptr<char>(),
inputs[4]->get_shape(),
inputs[5]->get_data_ptr<char>(),
inputs[5]->get_shape(),
inputs[6]->get_data_ptr<char>(),
inputs[6]->get_shape(),
outputs[0]->get_data_ptr<char>(),
outputs[1]->get_data_ptr<char>(),
outputs[2]->get_data_ptr<char>(),
op->get_activations()[0],
op->get_activations()[1],
op->get_activations()[2],
op->get_clip(),
op->get_direction());
}
} // namespace lstm_seq_v5
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::LSTMSequence>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
switch (inputs[3]->get_element_type()) {
case ngraph::element::Type_t::i64:
case ngraph::element::Type_t::u64:
lstm_seq_v1::evaluate<ET, ngraph::element::Type_t::i64>(op, outputs, inputs);
break;
case ngraph::element::Type_t::i32:
case ngraph::element::Type_t::u32:
lstm_seq_v1::evaluate<ET, ngraph::element::Type_t::i32>(op, outputs, inputs);
break;
default:
return false;
}
return true;
}
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v5::LSTMSequence>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
switch (inputs[3]->get_element_type()) {
case ngraph::element::Type_t::i64:
case ngraph::element::Type_t::u64:
lstm_seq_v5::evaluate<ET, ngraph::element::Type_t::i64>(op, outputs, inputs);
break;
case ngraph::element::Type_t::i32:
case ngraph::element::Type_t::u32:
lstm_seq_v5::evaluate<ET, ngraph::element::Type_t::i32>(op, outputs, inputs);
break;
default:
return false;
}
return true;
}
namespace gru_seq_v5 {
template <ngraph::element::Type_t t1, ngraph::element::Type_t t2>
inline void evaluate(const std::shared_ptr<ngraph::op::v5::GRUSequence>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T1 = typename ngraph::element_type_traits<t1>::value_type;
using T2 = typename ngraph::element_type_traits<t2>::value_type;
ngraph::runtime::reference::gru_sequence<T1, T2>(inputs[0]->get_data_ptr<char>(),
inputs[0]->get_shape(),
inputs[1]->get_data_ptr<char>(),
inputs[1]->get_shape(),
inputs[2]->get_data_ptr<char>(),
inputs[2]->get_shape(),
inputs[3]->get_data_ptr<char>(),
inputs[3]->get_shape(),
inputs[4]->get_data_ptr<char>(),
inputs[4]->get_shape(),
inputs[5]->get_data_ptr<char>(),
inputs[5]->get_shape(),
outputs[0]->get_data_ptr<char>(),
outputs[1]->get_data_ptr<char>(),
op->get_activations()[0],
op->get_activations()[1],
op->get_clip(),
op->get_direction(),
op->get_linear_before_reset());
}
} // namespace gru_seq_v5
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v5::GRUSequence>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
switch (inputs[2]->get_element_type()) {
case ngraph::element::Type_t::i64:
case ngraph::element::Type_t::u64:
gru_seq_v5::evaluate<ET, ngraph::element::Type_t::i64>(op, outputs, inputs);
break;
case ngraph::element::Type_t::i32:
case ngraph::element::Type_t::u32:
gru_seq_v5::evaluate<ET, ngraph::element::Type_t::i32>(op, outputs, inputs);
break;
default:
return false;
}
return true;
}
namespace augru_seq {
template <ngraph::element::Type_t t1, ngraph::element::Type_t t2>
inline void evaluate(const std::shared_ptr<ov::op::internal::AUGRUSequence>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T1 = typename ngraph::element_type_traits<t1>::value_type;
using T2 = typename ngraph::element_type_traits<t2>::value_type;
ngraph::runtime::reference::gru_sequence<T1, T2>(inputs[0]->get_data_ptr<char>(),
inputs[0]->get_shape(),
inputs[1]->get_data_ptr<char>(),
inputs[1]->get_shape(),
inputs[2]->get_data_ptr<char>(),
inputs[2]->get_shape(),
inputs[3]->get_data_ptr<char>(),
inputs[3]->get_shape(),
inputs[4]->get_data_ptr<char>(),
inputs[4]->get_shape(),
inputs[5]->get_data_ptr<char>(),
inputs[5]->get_shape(),
outputs[0]->get_data_ptr<char>(),
outputs[1]->get_data_ptr<char>(),
op->get_activations()[0],
op->get_activations()[1],
op->get_clip(),
op->get_direction(),
op->get_linear_before_reset(),
inputs[6]->get_data_ptr<char>());
}
} // namespace augru_seq
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ov::op::internal::AUGRUSequence>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
switch (inputs[2]->get_element_type()) {
case ngraph::element::Type_t::i64:
case ngraph::element::Type_t::u64:
augru_seq::evaluate<ET, ngraph::element::Type_t::i64>(op, outputs, inputs);
break;
case ngraph::element::Type_t::i32:
case ngraph::element::Type_t::u32:
augru_seq::evaluate<ET, ngraph::element::Type_t::i32>(op, outputs, inputs);
break;
default:
return false;
}
return true;
}
template <>
bool evaluate_node<ov::op::internal::AUGRUSequence>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ov::op::internal::AUGRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ov::op::internal::AUGRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ov::op::internal::AUGRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ov::op::internal::AUGRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ov::op::internal::AUGRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ov::op::internal::AUGRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ov::op::internal::AUGRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ov::op::internal::AUGRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ov::op::internal::AUGRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ov::op::internal::AUGRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ov::op::internal::AUGRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ov::op::internal::AUGRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ov::op::internal::AUGRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ov::op::internal::AUGRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ov::op::internal::AUGRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ov::op::internal::AUGRUSequence>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}
template <>
bool evaluate_node<ngraph::op::v5::GRUSequence>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v5::GRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v5::GRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v5::GRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v5::GRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v5::GRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v5::GRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v5::GRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v5::GRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v5::GRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v5::GRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v5::GRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v5::GRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v5::GRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v5::GRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v5::GRUSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v5::GRUSequence>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}
template <>
bool evaluate_node<ngraph::op::v5::LSTMSequence>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v5::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v5::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v5::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v5::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v5::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v5::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v5::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v5::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v5::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v5::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v5::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v5::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v5::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v5::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v5::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v5::LSTMSequence>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}
template <>
bool evaluate_node<ngraph::op::v0::LSTMSequence>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::LSTMSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::LSTMSequence>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}
template <>
bool evaluate_node<ngraph::op::v5::RNNSequence>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v5::RNNSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v5::RNNSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v5::RNNSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v5::RNNSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v5::RNNSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v5::RNNSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v5::RNNSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v5::RNNSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v5::RNNSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v5::RNNSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v5::RNNSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v5::RNNSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v5::RNNSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v5::RNNSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v5::RNNSequence>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v5::RNNSequence>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,67 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/sigmoid.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::Sigmoid>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::sigmoid<T>(inputs[0]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
ngraph::shape_size(inputs[0]->get_shape()));
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::Sigmoid>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::Sigmoid>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::Sigmoid>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::Sigmoid>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::Sigmoid>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::Sigmoid>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::Sigmoid>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::Sigmoid>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::Sigmoid>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::Sigmoid>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::Sigmoid>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::Sigmoid>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::Sigmoid>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::Sigmoid>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::Sigmoid>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::Sigmoid>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::Sigmoid>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,65 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/sign.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::Sign>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::sign<T>(inputs[0]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
ngraph::shape_size(inputs[0]->get_shape()));
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::Sign>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::Sign>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::Sign>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::Sign>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::Sign>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::Sign>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::Sign>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::Sign>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::Sign>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::Sign>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::Sign>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::Sign>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::Sign>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::Sign>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::Sign>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::Sign>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::Sign>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,90 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/softsign.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v9::SoftSign>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
ngraph::element::Type input_et = op->get_input_element_type(0);
switch (input_et) {
case ngraph::element::Type_t::f64:
ngraph::runtime::reference::softsign<double>(inputs[0]->get_data_ptr<double>(),
outputs[0]->get_data_ptr<double>(),
ngraph::shape_size(inputs[0]->get_shape()));
break;
case ngraph::element::Type_t::f32:
ngraph::runtime::reference::softsign<float>(inputs[0]->get_data_ptr<float>(),
outputs[0]->get_data_ptr<float>(),
ngraph::shape_size(inputs[0]->get_shape()));
break;
case ngraph::element::Type_t::f16:
ngraph::runtime::reference::softsign<ngraph::float16>(inputs[0]->get_data_ptr<ngraph::float16>(),
outputs[0]->get_data_ptr<ngraph::float16>(),
ngraph::shape_size(inputs[0]->get_shape()));
break;
case ngraph::element::Type_t::bf16:
ngraph::runtime::reference::softsign<ngraph::bfloat16>(inputs[0]->get_data_ptr<ngraph::bfloat16>(),
outputs[0]->get_data_ptr<ngraph::bfloat16>(),
ngraph::shape_size(inputs[0]->get_shape()));
break;
default:
return false;
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v9::SoftSign>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v9::SoftSign>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v9::SoftSign>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v9::SoftSign>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v9::SoftSign>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v9::SoftSign>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v9::SoftSign>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v9::SoftSign>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v9::SoftSign>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v9::SoftSign>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v9::SoftSign>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v9::SoftSign>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v9::SoftSign>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v9::SoftSign>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v9::SoftSign>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v9::SoftSign>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v9::SoftSign>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,100 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/squared_difference.hpp"
#include "evaluate_node.hpp"
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::SquaredDifference>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::squared_difference<T>(inputs[0]->get_data_ptr<const T>(),
inputs[1]->get_data_ptr<const T>(),
outputs[0]->get_data_ptr<T>(),
inputs[0]->get_shape(),
inputs[1]->get_shape(),
op->get_autob());
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::SquaredDifference>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::SquaredDifference>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::SquaredDifference>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::SquaredDifference>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::SquaredDifference>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::SquaredDifference>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::SquaredDifference>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::SquaredDifference>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::SquaredDifference>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::SquaredDifference>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::SquaredDifference>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::SquaredDifference>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::SquaredDifference>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::SquaredDifference>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::SquaredDifference>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::SquaredDifference>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::SquaredDifference>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,66 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
// clang-format off
#include "evaluate_node.hpp"
#include "ngraph/runtime/reference/tanh.hpp"
// clang-format on
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::Tanh>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using T = typename ngraph::element_type_traits<ET>::value_type;
ngraph::runtime::reference::tanh<T>(inputs[0]->get_data_ptr<T>(),
outputs[0]->get_data_ptr<T>(),
ngraph::shape_size(inputs[0]->get_shape()));
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::Tanh>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::Tanh>(node), outputs, inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::Tanh>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::Tanh>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::Tanh>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::Tanh>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::Tanh>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::Tanh>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::Tanh>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::Tanh>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::Tanh>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::Tanh>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::Tanh>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::Tanh>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::Tanh>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::Tanh>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::Tanh>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,136 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/tensor_iterator.hpp"
#include "backend.hpp"
#include "evaluate_node.hpp"
#include "tensor_conversion_util.hpp"
namespace ti_v0 {
ngraph::runtime::reference::custom_evaluate_function evaluate = [](const std::shared_ptr<ngraph::Function>& function,
const ngraph::HostTensorVector& inputs,
ngraph::HostTensorVector& outputs) -> void {
const auto& parameters = function->get_parameters();
const auto& parametersNumber = parameters.size();
const auto& inputsNumber = inputs.size();
NGRAPH_CHECK(parametersNumber == inputsNumber,
"Got function (",
function->get_friendly_name(),
") with ",
parametersNumber,
" parameters, but ",
inputsNumber,
" input blobs");
const auto& results = function->get_results();
outputs.reserve(results.size());
for (size_t i = 0; i < results.size(); ++i) {
outputs.push_back(std::make_shared<ngraph::HostTensor>(results[i]->output(0)));
}
auto backend = ov::runtime::Backend::create();
auto handle = backend->compile(function);
OPENVINO_SUPPRESS_DEPRECATED_START
auto outputTensors = ov::util::wrap_tensors(outputs);
auto inputTensors = ov::util::wrap_tensors(inputs);
handle->call_with_validate(outputTensors, inputTensors);
ov::util::update_output_host_tensors(outputs, outputTensors);
OPENVINO_SUPPRESS_DEPRECATED_END
};
} // namespace ti_v0
template <ngraph::element::Type_t ET>
bool evaluate(const std::shared_ptr<ngraph::op::v0::TensorIterator>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
ngraph::runtime::reference::tensor_iterator(op->get_num_iterations(),
op->get_function(),
op->get_output_descriptions(),
op->get_input_descriptions(),
outputs,
inputs,
ti_v0::evaluate);
return true;
}
template <>
bool evaluate_node<ngraph::op::v0::TensorIterator>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v0::TensorIterator>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v0::TensorIterator>(node),
outputs,
inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v0::TensorIterator>(node),
outputs,
inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v0::TensorIterator>(node),
outputs,
inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v0::TensorIterator>(node),
outputs,
inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v0::TensorIterator>(node),
outputs,
inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v0::TensorIterator>(node),
outputs,
inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v0::TensorIterator>(node),
outputs,
inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v0::TensorIterator>(node),
outputs,
inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v0::TensorIterator>(node),
outputs,
inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v0::TensorIterator>(node),
outputs,
inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v0::TensorIterator>(node),
outputs,
inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v0::TensorIterator>(node),
outputs,
inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v0::TensorIterator>(node),
outputs,
inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v0::TensorIterator>(node),
outputs,
inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v0::TensorIterator>(node),
outputs,
inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}

View File

@ -0,0 +1,122 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "ngraph/runtime/reference/unique.hpp"
#include "evaluate_node.hpp"
template <typename Data_t, typename Index_t, typename Count_t>
void execute_unique(const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs,
const std::shared_ptr<ngraph::op::v10::Unique>& op) {
const auto maybe_extract_axis = [&op]() {
std::unique_ptr<int64_t> axis;
if (op->get_input_size() == 2 && ov::op::util::is_constant(op->input_value(1).get_node())) {
const auto axis_constant =
std::dynamic_pointer_cast<ngraph::op::v0::Constant>(op->input_value(1).get_node_shared_ptr());
const auto axis_vec = axis_constant->cast_vector<int64_t>();
axis = std::unique_ptr<int64_t>(new int64_t{axis_vec.at(0)});
}
return axis;
};
const auto unique_elements =
ngraph::runtime::reference::find_unique_elements<Data_t, Index_t, Count_t>(inputs[0]->get_data_ptr<Data_t>(),
inputs[0]->get_shape(),
maybe_extract_axis(),
op->get_sorted());
const auto tensor_shapes =
ngraph::runtime::reference::make_tensor_shapes(unique_elements, inputs[0]->get_shape(), maybe_extract_axis());
auto& out_unique_elements = outputs[0];
auto& out_indices = outputs[1];
auto& out_rev_indices = outputs[2];
auto& out_counts = outputs[3];
out_unique_elements->set_shape(std::get<0>(tensor_shapes));
out_indices->set_shape(std::get<1>(tensor_shapes));
out_rev_indices->set_shape(std::get<2>(tensor_shapes));
out_counts->set_shape(std::get<1>(tensor_shapes));
ngraph::runtime::reference::unique(out_unique_elements->get_data_ptr<Data_t>(),
out_indices->get_data_ptr<Index_t>(),
out_rev_indices->get_data_ptr<Index_t>(),
out_counts->get_data_ptr<Count_t>(),
inputs[0]->get_data_ptr<Data_t>(),
inputs[0]->get_shape(),
std::get<0>(tensor_shapes),
unique_elements);
}
template <ngraph::element::Type_t Data_ET>
bool evaluate(const std::shared_ptr<ngraph::op::v10::Unique>& op,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
using Data_t = typename ngraph::element_type_traits<Data_ET>::value_type;
if (op->get_index_element_type() == ngraph::element::i32 && op->get_count_element_type() == ngraph::element::i32) {
execute_unique<Data_t, int32_t, int32_t>(outputs, inputs, op);
} else if (op->get_index_element_type() == ngraph::element::i64 &&
op->get_count_element_type() == ngraph::element::i64) {
execute_unique<Data_t, int64_t, int64_t>(outputs, inputs, op);
} else if (op->get_index_element_type() == ngraph::element::i32 &&
op->get_count_element_type() == ngraph::element::i64) {
execute_unique<Data_t, int32_t, int64_t>(outputs, inputs, op);
} else if (op->get_index_element_type() == ngraph::element::i64 &&
op->get_count_element_type() == ngraph::element::i32) {
execute_unique<Data_t, int64_t, int32_t>(outputs, inputs, op);
} else {
return false;
}
return true;
}
template <>
bool evaluate_node<ngraph::op::v10::Unique>(std::shared_ptr<ngraph::Node> node,
const ngraph::HostTensorVector& outputs,
const ngraph::HostTensorVector& inputs) {
auto element_type = node->get_output_element_type(0);
if (ov::is_type<ngraph::op::v1::Select>(node) || ov::is_type<ngraph::op::util::BinaryElementwiseComparison>(node))
element_type = node->get_input_element_type(1);
switch (element_type) {
case ngraph::element::Type_t::boolean:
return evaluate<ngraph::element::Type_t::boolean>(ov::as_type_ptr<ngraph::op::v10::Unique>(node),
outputs,
inputs);
case ngraph::element::Type_t::bf16:
return evaluate<ngraph::element::Type_t::bf16>(ov::as_type_ptr<ngraph::op::v10::Unique>(node), outputs, inputs);
case ngraph::element::Type_t::f16:
return evaluate<ngraph::element::Type_t::f16>(ov::as_type_ptr<ngraph::op::v10::Unique>(node), outputs, inputs);
case ngraph::element::Type_t::f64:
return evaluate<ngraph::element::Type_t::f64>(ov::as_type_ptr<ngraph::op::v10::Unique>(node), outputs, inputs);
case ngraph::element::Type_t::f32:
return evaluate<ngraph::element::Type_t::f32>(ov::as_type_ptr<ngraph::op::v10::Unique>(node), outputs, inputs);
case ngraph::element::Type_t::i4:
return evaluate<ngraph::element::Type_t::i4>(ov::as_type_ptr<ngraph::op::v10::Unique>(node), outputs, inputs);
case ngraph::element::Type_t::i8:
return evaluate<ngraph::element::Type_t::i8>(ov::as_type_ptr<ngraph::op::v10::Unique>(node), outputs, inputs);
case ngraph::element::Type_t::i16:
return evaluate<ngraph::element::Type_t::i16>(ov::as_type_ptr<ngraph::op::v10::Unique>(node), outputs, inputs);
case ngraph::element::Type_t::i32:
return evaluate<ngraph::element::Type_t::i32>(ov::as_type_ptr<ngraph::op::v10::Unique>(node), outputs, inputs);
case ngraph::element::Type_t::i64:
return evaluate<ngraph::element::Type_t::i64>(ov::as_type_ptr<ngraph::op::v10::Unique>(node), outputs, inputs);
case ngraph::element::Type_t::u1:
return evaluate<ngraph::element::Type_t::u1>(ov::as_type_ptr<ngraph::op::v10::Unique>(node), outputs, inputs);
case ngraph::element::Type_t::u4:
return evaluate<ngraph::element::Type_t::u4>(ov::as_type_ptr<ngraph::op::v10::Unique>(node), outputs, inputs);
case ngraph::element::Type_t::u8:
return evaluate<ngraph::element::Type_t::u8>(ov::as_type_ptr<ngraph::op::v10::Unique>(node), outputs, inputs);
case ngraph::element::Type_t::u16:
return evaluate<ngraph::element::Type_t::u16>(ov::as_type_ptr<ngraph::op::v10::Unique>(node), outputs, inputs);
case ngraph::element::Type_t::u32:
return evaluate<ngraph::element::Type_t::u32>(ov::as_type_ptr<ngraph::op::v10::Unique>(node), outputs, inputs);
case ngraph::element::Type_t::u64:
return evaluate<ngraph::element::Type_t::u64>(ov::as_type_ptr<ngraph::op::v10::Unique>(node), outputs, inputs);
default:
throw ngraph::ngraph_error(std::string("Unhandled data type ") + node->get_element_type().get_type_name() +
std::string("in evaluate_node()"));
}
}