[Transformation] MarkPrecisionSensitiveDivides extending to mark fp32 divides (#11391)

* MarkPrecisionSensitiveDivides: fp32 divides marking enabled

* ConvertDivide: added a negative test-case with fp32 divide on precision sensitive subgraph
This commit is contained in:
Vladislav Golubev
2022-04-01 17:31:23 +03:00
committed by GitHub
parent 56df3962e3
commit a02b3f4995
2 changed files with 26 additions and 1 deletions

View File

@@ -25,7 +25,7 @@ bool ov::pass::MarkPrecisionSensitiveDivides::run_on_model(const std::shared_ptr
}
auto markup_func = [](Node* node) {
if (ov::is_type<ov::opset8::Divide>(node) && node->get_output_element_type(0) == ngraph::element::f16) {
if (ov::is_type<ov::opset8::Divide>(node)) {
ov::disable_divide_conversion(node->shared_from_this());
}
};

View File

@@ -212,3 +212,28 @@ TEST_F(TransformationTestsF, ConvertDivideFP16ShapeOfSubgraphNegative2) {
manager.register_pass<ngraph::pass::ConvertDivide>();
}
}
TEST_F(TransformationTestsF, ConvertDivideFP32ShapeOfSubgraphNegative) {
{
auto data = std::make_shared<ngraph::opset1::Parameter>(ngraph::element::f32, ngraph::Shape{1, 3, 22, 22});
auto gather = ngraph::op::util::node_to_get_shape_value_of_indices_from_shape_source(data, {2, 3});
auto convert = std::make_shared<ngraph::opset1::Convert>(gather, ngraph::element::f32);
auto divide_constant = ngraph::opset1::Constant::create(ngraph::element::f32, ngraph::Shape{1}, {0.5});
auto divide = std::make_shared<ngraph::opset1::Divide>(convert, divide_constant);
auto convert_after = std::make_shared<ngraph::opset1::Convert>(divide, ngraph::element::i32);
ngraph::opset1::Interpolate::Attributes interp_attr;
interp_attr.antialias = false;
interp_attr.axes = {2, 3};
interp_attr.mode = "nearest";
interp_attr.pads_begin = {0, 0, 0, 0};
interp_attr.pads_end = {0, 0, 0, 0};
auto interpolate = std::make_shared<ngraph::opset1::Interpolate>(data, convert_after, interp_attr);
function = std::make_shared<ngraph::Function>(ngraph::NodeVector{interpolate}, ngraph::ParameterVector{data});
manager.register_pass<ov::pass::MarkPrecisionSensitiveDivides>();
manager.register_pass<ngraph::pass::ConvertDivide>();
}
}