@ -171,8 +171,20 @@ class ConvMKLDNNOpKernel : public paddle::framework::OpKernel<T> {
float fuse_beta = ctx . Attr < float > ( " fuse_beta " ) ;
bool fuse_residual_conn = ctx . Attr < bool > ( " fuse_residual_connection " ) ;
int groups = ctx . Attr < int > ( " groups " ) ;
std : : string padding_algorithm = ctx . Attr < std : : string > ( " padding_algorithm " ) ;
bool is_conv3d = strides . size ( ) = = 3U ;
auto input_dims = input - > dims ( ) ;
auto data_dims = framework : : slice_ddim ( input_dims , 2 , input_dims . size ( ) ) ;
auto filter_dims = filter - > dims ( ) ;
auto filter_data_dims =
framework : : slice_ddim ( filter_dims , 2 , filter_dims . size ( ) ) ;
auto ksize = framework : : vectorize < int > ( filter_data_dims ) ;
UpdatePaddingAndDilation ( & paddings , & dilations , padding_algorithm ,
data_dims , strides , ksize ) ;
PADDLE_ENFORCE (
is_conv3d
? dilations . size ( ) = = 3 & & dilations [ 0 ] = = 1 & & dilations [ 1 ] = = 1 & &
@ -435,12 +447,25 @@ class ConvMKLDNNOpKernel : public paddle::framework::OpKernel<T> {
std : : vector < int > paddings = ctx . Attr < std : : vector < int > > ( " paddings " ) ;
std : : vector < int > dilations = ctx . Attr < std : : vector < int > > ( " dilations " ) ;
std : : vector < int > strides = ctx . Attr < std : : vector < int > > ( " strides " ) ;
std : : string padding_algorithm =
ctx . Attr < std : : string > ( " padding_algorithm " ) ;
bool is_conv3d = strides . size ( ) = = 3U ;
PADDLE_ENFORCE_NE ( is_conv3d , true ,
" int8 does not support conv3d currently " ) ;
auto input_dims = input - > dims ( ) ;
auto data_dims = framework : : slice_ddim ( input_dims , 2 , input_dims . size ( ) ) ;
auto filter_dims = filter - > dims ( ) ;
auto filter_data_dims =
framework : : slice_ddim ( filter_dims , 2 , filter_dims . size ( ) ) ;
auto ksize = framework : : vectorize < int > ( filter_data_dims ) ;
UpdatePaddingAndDilation ( & paddings , & dilations , padding_algorithm ,
data_dims , strides , ksize ) ;
int groups = ctx . Attr < int > ( " groups " ) ;
auto weights_tz = paddle : : framework : : vectorize < int > ( filter - > dims ( ) ) ;
int g = std : : max ( groups , 1 ) ;
@ -696,6 +721,7 @@ class ConvMKLDNNGradOpKernel : public paddle::framework::OpKernel<T> {
std : : vector < int > strides = ctx . Attr < std : : vector < int > > ( " strides " ) ;
std : : vector < int > paddings = ctx . Attr < std : : vector < int > > ( " paddings " ) ;
std : : vector < int > dilations = ctx . Attr < std : : vector < int > > ( " dilations " ) ;
std : : string padding_algorithm = ctx . Attr < std : : string > ( " padding_algorithm " ) ;
int groups = ctx . Attr < int > ( " groups " ) ;
bool is_conv3d = strides . size ( ) = = 3U ;
@ -705,6 +731,17 @@ class ConvMKLDNNGradOpKernel : public paddle::framework::OpKernel<T> {
T * input_grad_data = nullptr ;
T * filter_grad_data = nullptr ;
auto input_dims = input - > dims ( ) ;
auto data_dims = framework : : slice_ddim ( input_dims , 2 , input_dims . size ( ) ) ;
auto filter_dims = filter - > dims ( ) ;
auto filter_data_dims =
framework : : slice_ddim ( filter_dims , 2 , filter_dims . size ( ) ) ;
auto ksize = framework : : vectorize < int > ( filter_data_dims ) ;
UpdatePaddingAndDilation ( & paddings , & dilations , padding_algorithm ,
data_dims , strides , ksize ) ;
auto src_tz = paddle : : framework : : vectorize < int > ( input - > dims ( ) ) ;
auto weights_tz = paddle : : framework : : vectorize < int > ( filter - > dims ( ) ) ;
int g = std : : max ( groups , 1 ) ;
@ -766,10 +803,13 @@ class ConvMKLDNNGradOpKernel : public paddle::framework::OpKernel<T> {
PADDLE_ENFORCE_NE ( conv_pd , nullptr ,
" Fail to find conv_pd in device context " ) ;
auto mkldnn_paddings = platform : : ToMkldnnPadding ( paddings ) ;
// create backward convolution weights primitive descriptor
auto conv_bwd_weights_desc = mkldnn : : convolution_backward_weights : : desc (
mkldnn : : convolution_direct , src_md , diff_weights_md , diff_dst_md ,
strides , paddings , paddings , mkldnn : : padding_kind : : zero ) ;
strides , mkldnn_paddings [ 0 ] , mkldnn_paddings [ 1 ] ,
mkldnn : : padding_kind : : zero ) ;
auto conv_bwd_weights_pd =
std : : make_shared < mkldnn : : convolution_backward_weights : : primitive_desc > (
conv_bwd_weights_desc , mkldnn_engine , * conv_pd ) ;
@ -777,7 +817,8 @@ class ConvMKLDNNGradOpKernel : public paddle::framework::OpKernel<T> {
// create backward convolution data primitive descriptor
auto conv_bwd_data_desc = mkldnn : : convolution_backward_data : : desc (
mkldnn : : convolution_direct , diff_src_md , weights_md , diff_dst_md ,
strides , paddings , paddings , mkldnn : : padding_kind : : zero ) ;
strides , mkldnn_paddings [ 0 ] , mkldnn_paddings [ 1 ] ,
mkldnn : : padding_kind : : zero ) ;
auto conv_bwd_data_pd =
std : : make_shared < mkldnn : : convolution_backward_data : : primitive_desc > (
conv_bwd_data_desc , mkldnn_engine , * conv_pd ) ;