You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch高版本替换THC/THC.h为ATen API的代码适配咨询

适配方案说明

针对THC依赖的ATen替换方法

你遇到的'THC/THC.h': No such file or directory是PyTorch 1.11及以上版本的典型适配问题,这部分版本已经完全移除了旧的TH/THC系列接口,统一使用ATen作为底层张量运算API。你定位到的3行旧代码可以直接按如下规则替换:

  • 删除第一行#include <THC/THC.h>:旧的THC头文件已经不存在,PyTorch C++扩展统一通过引入#include <torch/extension.h>引入所有需要的ATen接口,Pointnet2项目的源码头部本来就包含该引入,不需要额外补充其他头文件。
  • 删除第二行extern THCState *state;:ATen架构下不存在全局的THCState上下文对象,所有设备、流的上下文都由PyTorch内部自动托管,不需要开发者手动声明维护。
  • 替换第三行获取CUDA流的代码:把cudaStream_t stream = THCState_getCurrentStream(state);替换为
cudaStream_t stream = at::cuda::getCurrentCUDAStream();

如果你的kernel需要绑定到特定张量所在设备的流,也可以传入设备索引参数:at::cuda::getCurrentCUDAStream(input_tensor.device().index()),对于Pointnet2项目的所有算子逻辑,直接使用无参版本即可和原有行为完全一致。

仅修改cpp文件能否解决编译报错

不能。
除了cpp文件外,你还需要检查两部分内容:

  • 检查所有后缀为.cu的CUDA源码文件,删除其中所有#include <THC/THC.h>的引入,同时把文件内所有通过THCState_getCurrentStream获取流的代码按上面的规则替换。如果遇到旧的THCudaCheck类宏报错,直接替换为ATen提供的AT_CUDA_CHECK宏即可。
  • 检查setup.py编译配置,如果其中有手动链接THC库的配置直接删除,新版本PyTorch编译扩展时会自动链接所有需要的依赖库,不需要手动指定THC相关链接项。

上述修改完成后,即可在高版本PyTorch下正常编译Pointnet2的算子扩展,不需要降级PyTorch版本。

内容的提问来源于stack exchange,提问作者won5830

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:09:16