CUDA将多个.cu文件编译为一个文件

CUDA将多个.cu文件编译为一个文件,cuda,ptx,managed-cuda,Cuda,Ptx,Managed Cuda,我正在将一些计算从C移植到CUDA。 在我的CUDA项目中,我为每个C类创建了.cu和.cuh文件。 所有相关的类,以及它们在计算中使用的所有类。 我需要保存我的C代码的结构,因为在其他情况下很容易出错 顺便说一句,如果我把所有代码放在一个文件中,一切都会按预期工作,但读取或修复某些问题会成为真正的痛苦 我想编译CUDA项目并通过ManagedCuda库在我的C中使用它。 我可以用一个.cu文件将测试CUDA项目编译成.ptx文件,通过ManagedCuda将其加载到C中,并从中调用函数 但当我

我正在将一些计算从C移植到CUDA。 在我的CUDA项目中,我为每个C类创建了.cu和.cuh文件。 所有相关的类,以及它们在计算中使用的所有类。 我需要保存我的C代码的结构,因为在其他情况下很容易出错

顺便说一句,如果我把所有代码放在一个文件中,一切都会按预期工作,但读取或修复某些问题会成为真正的痛苦

我想编译CUDA项目并通过ManagedCuda库在我的C中使用它。 我可以用一个.cu文件将测试CUDA项目编译成.ptx文件,通过ManagedCuda将其加载到C中,并从中调用函数

但当我想用多个cu文件编译我的实际项目时,结果是项目中的每个.cu文件都有多个.ptx文件,甚至我无法通过ManagedCuda加载这个.ptx文件,我遇到了下一个错误:

ErrorInvalidPtx:这表示PTX JIT编译失败

但是这个错误是意料之中的,因为ptx文件中存在交叉引用,并且只有当这些文件一起加载时才有意义

我的目标是将我的CUDA项目编译成一个文件,但同时我不想只局限于我拥有的特定视频卡。为此,我需要使用包含ptx的PTXor cubin。该ptx文件将在加载时针对特定设备进行编译


我尝试将Generate relocated Device Code设置为Yes-rdc=true,并编译为PTX和Cubin-结果相同,每个.cu文件都没有独立的文件。

非常简短的答案是否定的,你不能这样做。工具链无法在编译阶段合并PTX代码

如果生成多个PTX文件,则需要使用CUDA运行时的JIT链接器工具生成可加载到上下文中的模块。我不知道托管CUDA是否支持这一点

编辑以添加托管CUDA不支持运行时链接的内容,请参阅