-
Notifications
You must be signed in to change notification settings - Fork 5.9k
auto generate USE_OP() in pybind.cc #4101
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 4 commits
0597f4d
70cadf9
f657e21
d0521e6
9fa2372
65bc5fc
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -241,24 +241,12 @@ MulOp(const std::string &type, const framework::VariableNameMap &inputs, | |
|
|
||
| - 绑定Python | ||
|
|
||
| 在 [`paddle/pybind/pybind.cc | ||
| `](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/pybind/pybind.cc) 使用`USE_OP`告知编译器需要链接的Op,具体解释参考[代码注释](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/op_registry.h#L81)。 | ||
|
|
||
| ``` | ||
| USE_OP(mul); | ||
| ``` | ||
| 如果只实现了CPU版本,则使用`USE_CPU_ONLY_OP`: | ||
|
|
||
| ``` | ||
| USE_CPU_ONLY_OP(gather); | ||
| ``` | ||
|
|
||
| 如果OP不带Kernel,则使用`USE_NO_KENREL_OP`: | ||
|
|
||
| ``` | ||
| USE_NO_KENREL_OP(recurrent); | ||
| ``` | ||
|
|
||
| 编译器 [paddle/operators/CMakeLists.txt](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/CMakeLists.txt) 会自动为Op绑定Python,生成[`paddle/pybind/pybind.h](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/pybind/pybind.h),绑定规则如下: | ||
|
|
||
| - net_op 不绑定Python | ||
| - 如果OP不带Kernel,则使用`USE_NO_KENREL_OP` | ||
| - 如果只实现了CPU版本,则使用`USE_CPU_ONLY_OP` | ||
| - `USE_NO_KENREL_OP`优先级高于`USE_CPU_ONLY_OP` | ||
|
|
||
| - 生成库 | ||
|
|
||
|
|
@@ -367,3 +355,9 @@ make test ARGS="-R test_mul_op -V" | |
| ```bash | ||
| ctest -R test_mul_op | ||
| ``` | ||
|
|
||
| ## 注意事项 | ||
|
|
||
| - 为每个Op创建单独的`*_op.h`(如有)、`*_op.cc`和`*_op.cu`(如有)。不允许一个文件中包含多个Op,这将会导致编译出错。 | ||
| - 注册Op时的类型名,需要和该Op的名字一样。即不允许在`A_op.cc`里面,注册`REGISTER_OP(B, ...)`等,这将会导致单元测试出错。 | ||
| - 如果Op没有实现GPU Kernel,请不要创建空的`*_op.cu`,这将会导致单元测试出错。 | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 可能有的op需要用一些公用的函数,但是也不是math库,能否创建一些非
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 是可以创建一些非
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done |
||
This file was deleted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这里是实现的细节了,感觉这些内容可以放到一个单独的
md文件里,说明如何完成构建系统的。在这个开发文档中只需要在前面某个位置简单说明:“只需要paddle构建系统会根据文件名(*_op.h, *_op.cc, *_op.cu)自动构建op何其对应的python扩展。“There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done