pytorch源码:C拓展 *

两个疑问:

  • C扩展中的各种Tensor是如何定义和实现的。
  • 上层的Python是如何调用C中定义的类(或结构体)。

事实证明,看似简单的两个问题并不那么简单,直接读Pytorch中C的源码完全不知所云,查了一些资料才明白自己严重需要预备知识:

  • Python如何拓展C库
  • Python的实现机制

源码中会经常遇到THP和TH前缀的变量,THP: pytorch中的变量前缀,TH: 源自Torch库中的对应变量。

pytorch底层实现中调用了大量的Torch库。

Python C拓展

和普通的CPython方式拓展类似,下面主要看pytorch中的拓展模块“_C"的定义和相应其他模块的添加方式。pytorch中的拓展模块定义代码主要在torch/csrc/Module.cpp中

在编译过程中PyMODINIT_FUNC方法被调用,完成了"torch._C"的定义,接着就是各种类型Tensor的初始化函数调用,该部分在后面详细来看。
和普通C拓展套路一致,最终在编译阶段的setup.py文件中,声明Extension 执行setup加入拓展和用到的lib:


......
作者:zqh_zy
链接:https://www.jianshu.com/p/91af2ab867d5

发布了1715 篇原创文章 · 获赞 380 · 访问量 247万+

猜你喜欢

转载自blog.csdn.net/tony2278/article/details/105048873