pytorch源码阅读学习笔记(C代码宏展开实现泛型)

基本原则:#include的文件就相当于粘贴了一份代码;”.h”文件里放数据结构struct定义、函数声明(全局可以被多次#include);”.cpp”文件里放函数定义(实现代码;全局只能被编译一次);

 

  • TH/generic/THTensor.h: 数据结构定义和函数声明;使用以下开关来控制要定义宏指向自己,还是展开代码:

#ifndef TH_GENERIC_FILE

#define TH_GENERIC_FILE "TH/generic/THTensor.h"

#else

  • TH/generic/THTensor.cpp: 函数定义(代码实现);还是用那个开关来控制,同时起到了自己不单独编译的作用(只被TH/THTensor.cpp进行#include,避免再次编译造车报错)
  • TH/THTensor.h:

#define THTensor_(NAME)   TH_CONCAT_4(TH,Real,Tensor_,NAME)

#include <TH/generic/THTensor.h>     // 图的是该文件首部的#define TH_GENERIC_FILE "TH/generic/THTensor.h", 只定义上这个宏,不包含其里面的代码;

#include <TH/THGenerateAllTypes.h>   // 该文件里先定义scalar_t和Real等宏对应实际值,再#include <TH/generic/THTensor.h>把代码放进来,再#undef scalar_t和Real等宏和TH_GENERIC_FILE宏;

#include <TH/generic/THTensor.h>     // 每种数据类型写两行这个

#include <TH/THGenerateHalfType.h>  // 这里变了

  • TH/THTensor.cpp:先#include “TH/THTensor.h”,把所有类型声明放进来;再用两行一组法对每种数据类型进行代码生成(他每次#include的是<TH/generic/THTensor.cpp>);

 

THGeneral.h这个文件找不到,应该是由THGeneral.h.in这个文件生成的(在CMakeLists.txt里用configure_file来copy了一份);其中定义了TH_CONCAT_4等宏;

 

参考资料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章