[FIX][CPU] Convert CF: added convert childs number check (#19022)
* [FIX][CPU] Convert CF: added convert childs number check * code style fix * WIP: [CPU][TESTS] Convert CF: Added subgraph test with two outputs for Convert node * MatMulDecompressConvertTest refactoring + instances fixes * removed KeepConstAndDecompressionForMatMul pass and added cpu callback for KeepConstAndDecompression * MatMulDecompressConvertTest2: added graphs and small problem description * small review fix
This commit is contained in:
1 parent
85609d4881
commit
2a3132941c
4 files changed
+208
-97
No files matched your search
-12
@@ -14,7 +14,6 @@ namespace pass {
|
||||
class TRANSFORMATIONS_API EnableDecompressionConvertConstantFolding;
|
||||
class TRANSFORMATIONS_API DisableDecompressionConvertConstantFolding;
|
||||
class TRANSFORMATIONS_API KeepConstAndDecompression;
|
||||
class TRANSFORMATIONS_API KeepConstAndDecompressionForMatMul;
|
||||
|
||||
} // namespace pass
|
||||
} // namespace ov
|
||||
@@ -48,14 +47,3 @@ public:
|
||||
OPENVINO_RTTI("KeepConstAndDecompression", "0");
|
||||
KeepConstAndDecompression();
|
||||
};
|
||||
|
||||
/**
|
||||
* @ingroup ie_transformation_common_api
|
||||
* @brief Disables ConstantFolding for Convert operation (just before MatMul operation only) and prevents conversion
|
||||
* of f16 Consts to f32.
|
||||
*/
|
||||
class ov::pass::KeepConstAndDecompressionForMatMul : public MatcherPass {
|
||||
public:
|
||||
OPENVINO_RTTI("KeepConstAndDecompressionForMatMul", "0");
|
||||
KeepConstAndDecompressionForMatMul();
|
||||
};
|
||||
+4
-25
@@ -59,6 +59,10 @@ pass::KeepConstAndDecompression::KeepConstAndDecompression() {
|
||||
ov::is_shape_subgraph(node->shared_from_this()))
|
||||
return false;
|
||||
|
||||
if (transformation_callback(node)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
disable_constant_folding(node);
|
||||
|
||||
if (!is_type<ov::op::v0::Constant>(node->input_value(0).get_node_shared_ptr()))
|
||||
@@ -70,28 +74,3 @@ pass::KeepConstAndDecompression::KeepConstAndDecompression() {
|
||||
auto m = std::make_shared<pattern::Matcher>(node_pattern, matcher_name);
|
||||
register_matcher(m, callback);
|
||||
}
|
||||
|
||||
pass::KeepConstAndDecompressionForMatMul::KeepConstAndDecompressionForMatMul() {
|
||||
MATCHER_SCOPE(KeepConstAndDecompressionForMatMul);
|
||||
auto matmul = pass::pattern::wrap_type<ov::op::v0::MatMul>();
|
||||
|
||||
matcher_pass_callback callback = [=](pass::pattern::Matcher& m) {
|
||||
auto node = m.get_match_root();
|
||||
|
||||
// input to matmul is decompression Convert
|
||||
const auto& inp_convert = node->input_value(1).get_node_shared_ptr();
|
||||
if (!is_type<ov::op::v0::Convert>(inp_convert) || !is_decompression(inp_convert))
|
||||
return false;
|
||||
|
||||
disable_constant_folding(inp_convert);
|
||||
|
||||
if (!is_type<ov::op::v0::Constant>(inp_convert->input_value(0).get_node_shared_ptr()))
|
||||
return false;
|
||||
enable_keep_fp16_const(inp_convert->input_value(0).get_node_shared_ptr());
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
auto m = std::make_shared<pass::pattern::Matcher>(matmul, matcher_name);
|
||||
this->register_matcher(m, callback);
|
||||
}
|
||||
Reference in new issue
Block a user