欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

[源代码分析] [I] 通过 pybind11 绑定 C++ 和 Python

最编程 2024-07-15 09:08:44
...
mindspore\python\mindspore\__init__.py from . import common, dataset, mindrecord, train, log mindspore\python\mindspore\common\__init__.py from . import dtype mindspore\python\mindspore\common\dtype.py // 从mindspore-1.7.0-cp39-cp39-win_amd64.whl中的_c_expression.cp39-win_amd64.pyd动态库中导入C++符号 from .._c_expression import typing from .._c_expression.typing import Type mindspore\ccsrc\pybind_api\ir\dtype_py.cc REGISTER_PYBIND_DEFINE(typing, ([](py::module *const m) // 使用pybind11,定义了typing模块,对应: from .._c_expression import typing (void)py::class_<Type, std::shared_ptr<Type>>(m_sub, "Type") // 注册了导出类:Type,对应:from .._c_expression.typing import Type mindspore\mindspore\core\ir\dtype\type.h class MS_CORE_API Type : public Value // C++代码定义的Type类 _c_expression.cp39-win_amd64.pyd 编译 mindspore\ccsrc\CMakeLists.txt pybind11_add_module(_c_expression NO_EXTRAS "pipeline/jit/init.cc") // 调用 pybind11_add_module 来生成_c_expression.cp39-win_amd64.pyd // mindspore的所有C++ API导出到python的入口:pipeline/jit/init.cc mindspore\ccsrc\pipeline\jit\init.cc PYBIND11_MODULE(_c_expression, m) // 使用pybind11,指定整个模块_c_expression,ms C++符号都在这个_c_expression中 // 将REGISTER_PYBIND_DEFINE注册上来的模块添加到_c_expression中 auto fns = mindspore::PybindDefineRegister::AllFuncs(); for (auto &item : fns) { item.second(&m); } // 主动绑定一些模块 py::class_<GraphExecutorPy, std::shared_ptr<GraphExecutorPy>>(m, "GraphExecutor_")

推荐阅读