Created by: zhiqiu
PR types
Bug fixes
PR changes
Others
Describe
Fix bug of handling blank characters in operators.cmake
Paddle automatically add USE_OP
(or USE_OP_DEVICE_KERNEL
) for each operator target to pybind.h
during running cmake
(to avoid the operator registrar being removed from the generated binary file by the linker).
The approach is to extract REGISTER_OPERAOR(
using regex for the source file of each operator, like xx_op.cc
, and find the first registered operator.
However, the original implementation did not handle blank characters
, which may result in errors, link https://github.com/PaddlePaddle/Paddle/pull/27112#issuecomment-691941000.
The problem is, due to code formatting
, the REGISTER_OPERATOR(xxx
may be separated into two lines.
For example, elementwise_add_grad
and elementwise_add_grad_grad
in elementwise_add_op.cc
.
REGISTER_OPERATOR(
elementwise_add_grad, ops::ElementwiseOpGrad,
ops::ElementwiseGradOpInplaceInferer, ops::ElementwiseGradNoBufVarsInferer,
ops::ElementwiseAddDoubleGradMaker<paddle::framework::OpDesc>,
ops::ElementwiseAddDoubleGradMaker<paddle::imperative::OpBase>);
REGISTER_OPERATOR(elementwise_add_grad_grad,
ops::ElementwiseOpDoubleGradWithoutDXDY,
ops::ElementwiseDoubleGradOpInplaceInferer,
ops::ElementwiseDoubleGradNoBufVarsInferer);
Since the REGISTER_OPERATOR(elementwise_add_grad, ...)
is separated into two lines, the regex will match elementwise_add_grad_grad
.
And, since elementwise_add_mkldnn_op.cc
is present, a line USE_OP_DEVICE_KERNEL(elementwise_add_grad_grad, MKLDNN)
will be added to pybind.h
, which results in https://github.com/PaddlePaddle/Paddle/pull/27112#issuecomment-691941000.
This PR fixes that.