diff --git a/src/plugins/intel_cpu/src/nodes/mkldnn_def_conv_node.cpp b/src/plugins/intel_cpu/src/nodes/mkldnn_def_conv_node.cpp index e843f40fb3b..399ef29b9de 100644 --- a/src/plugins/intel_cpu/src/nodes/mkldnn_def_conv_node.cpp +++ b/src/plugins/intel_cpu/src/nodes/mkldnn_def_conv_node.cpp @@ -674,9 +674,8 @@ void MKLDNNDeformableConvolutionNode::initSupportedPrimitiveDescriptors() { auto &weiDims = getInputShapeAtPort(WEI_ID).getDims(); if (weiDims[1] == Shape::UNDEFINED_DIM || weiDims[0] == Shape::UNDEFINED_DIM || - defConvAttr.group != 1 || // temporary workaround until jit impl. will correctly handle multigroup cases - (weiDims[1] % simd_w != 0) // in_channels_per_gr !% simd_w - || ((weiDims[0] / defConvAttr.group) % simd_w != 0)) { // out_channels_per_gr !% simd_w + (defConvAttr.group != 1 && ((weiDims[1] % simd_w != 0) // in_channels_per_gr !% simd_w + || ((weiDims[0] / defConvAttr.group) % simd_w != 0)))) { // out_channels_per_gr !% simd_w enforceRef = true; } else { enforceRef = false; @@ -822,8 +821,8 @@ void MKLDNNDeformableConvolutionNode::DefConvExecutor::prepareSamplingWeights( lh = (h_high < cur_h_end ? lh : 0); lw = (w_high < cur_w_end ? lw : 0); - const int h_off_low = h_ind_low * srcStrides[2] / srcStrides[3]; - const int h_off_high = h_ind_high * srcStrides[2] / srcStrides[3]; + const int h_off_low = h_ind_low * (srcStrides[2] / srcStrides[3]); + const int h_off_high = h_ind_high * (srcStrides[2] / srcStrides[3]); const int w_off_low = w_ind_low; const int w_off_high = w_ind_high; pSampledCoordsVector[sampledCoordIndex] = h_off_high + w_off_high; diff --git a/src/tests/functional/plugin/cpu/single_layer_tests/deformable_convolution.cpp b/src/tests/functional/plugin/cpu/single_layer_tests/deformable_convolution.cpp index 95b41dae812..391939b9fea 100644 --- a/src/tests/functional/plugin/cpu/single_layer_tests/deformable_convolution.cpp +++ b/src/tests/functional/plugin/cpu/single_layer_tests/deformable_convolution.cpp @@ -336,6 +336,12 @@ const std::vector> channelParamsSingleGr = { {16, 32}, // in. ch. per gr. {16, 32} // out. ch. per gr. }; +const std::vector> channelParamsSingleGr2 = { + {1}, // gr. 2,4 + {1}, // def. gr. 1,2 + {3}, // in. ch. per gr. + {3} // out. ch. per gr. +}; const std::vector> channelParamsMulGr = { {2, 4}, // gr. 2,4 {1, 2}, // def. gr. 1,2 @@ -503,7 +509,7 @@ INSTANTIATE_TEST_SUITE_P(smoke_DefConvLayoutTest9, DefConvLayerCPUTest, params9_ const auto params1 = ::testing::Combine( ::testing::Combine( addSpParams, - ::testing::ValuesIn(static_shapes_to_test_representation(buildStaticParams(spatParams1, channelParamsSingleGr))), + ::testing::ValuesIn(static_shapes_to_test_representation(buildStaticParams(spatParams1, channelParamsSingleGr2))), defConvSpecificParams, ::testing::ValuesIn(netPrecisions), ::testing::Values(CommonTestUtils::DEVICE_CPU)),