diff --git a/paddle/fluid/framework/ir/conv_elementwise_add_mkldnn_fuse_pass.cc b/paddle/fluid/framework/ir/conv_elementwise_add_mkldnn_fuse_pass.cc index f2ff0bf13b50b765dafd682ea4b6ca790ffb65f8..1ede53f46896344f5f3f74439d1af8430f878524 100644 --- a/paddle/fluid/framework/ir/conv_elementwise_add_mkldnn_fuse_pass.cc +++ b/paddle/fluid/framework/ir/conv_elementwise_add_mkldnn_fuse_pass.cc @@ -118,6 +118,7 @@ void CorrectGraphEdges(Graph* graph, Node* from, Node* to) { if (same != std::end(node.inputs)) { LinkNodes(to, &node); + node.Op()->SetInput("X", {to->Name()}); } } } @@ -145,7 +146,7 @@ graph_ptr ConvElementwiseAddMKLDNNFusePass::ApplyImpl(graph_ptr graph) const { op_desc.SetInput("Input", {conv_input->Name()}); op_desc.SetInput("Filter", {conv_filter->Name()}); - op_desc.SetInput("ElementwiseParameter", {elementwise_add_x->Name()}); + op_desc.SetInput("EltwiseParameter", {elementwise_add_x->Name()}); op_desc.SetOutput("Output", {conv_output->Name()}); op_desc.SetAttr("use_mkldnn", true); @@ -155,6 +156,7 @@ graph_ptr ConvElementwiseAddMKLDNNFusePass::ApplyImpl(graph_ptr graph) const { patterns::LinkNodes(conv_input, fused_conv_op); patterns::LinkNodes(conv_filter, fused_conv_op); + patterns::LinkNodes(elementwise_add_x, fused_conv_op); patterns::LinkNodes(fused_conv_op, conv_output); }; diff --git a/paddle/fluid/operators/conv_mkldnn_op.cc b/paddle/fluid/operators/conv_mkldnn_op.cc index d9666c1cedc56242d795a764c25483191e090a5b..c849caf94ffd17835294329479ae938ca0969c70 100644 --- a/paddle/fluid/operators/conv_mkldnn_op.cc +++ b/paddle/fluid/operators/conv_mkldnn_op.cc @@ -396,7 +396,8 @@ class ConvMKLDNNOpKernel : public paddle::framework::OpKernel { PADDLE_ENFORCE(eltwise_param_data != nullptr, "Provide data if you want MKLDNN conv+elementwise_add fusion"); PADDLE_ENFORCE_EQ(output->dims(), eltwise_param->dims(), "Output and elementwise parameter need to have the same dimension sizes"); - output_data = const_cast(eltwise_param_data); + output_data = output->mutable_data(ctx.GetPlace()); + output->ShareDataWith(*eltwise_param); } else { output_data = output->mutable_data(ctx.GetPlace(), handler.GetDstMemorySize()); diff --git a/paddle/fluid/operators/conv_op.cc b/paddle/fluid/operators/conv_op.cc index efb8c62737593fae3811c451d3f3df594e31937f..99c50a52078a4118678863273501e4c935a39ff7 100644 --- a/paddle/fluid/operators/conv_op.cc +++ b/paddle/fluid/operators/conv_op.cc @@ -134,7 +134,8 @@ void Conv2DOpMaker::Make() { .Reuse("Input"); AddInput("EltwiseParameter", "(Tensor) Tensor to which convolution output will be added." - "Used on with fuse_eltwise fusion."); + "Used on with fuse_eltwise fusion.") + .AsDispensable(); AddAttr>("strides", "(vector default:{1, 1}), the " "strides(h_stride, w_stride) of "