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

本文详细解析了C++项目中代码的组织方式,包括.h文件的数据结构定义与函数声明,.cpp文件的函数定义,以及通过宏控制代码生成的机制。特别介绍了TH/generic/THTensor.h和TH/generic/THTensor.cpp文件如何利用开关宏实现不同数据类型的代码生成,揭示了THGeneral.h.in文件在CMakeLists.txt中配置生成THGeneral.h的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本原则:#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等宏;

 

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值