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

时间:2018-03-22 15:48:29

标签: cuda ptx managed-cuda

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

P.S。如果我将所有代码放在一个文件中 - 一切都按预期工作,但阅读或修复一些问题变得非常痛苦。

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

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

ErrorInvalidPtx:这表示PTX JIT编译失败。

但是这个错误是预期的,因为在ptx文件中存在交叉引用,并且只有在加载到一起时它们才有意义。

我的目标是将我的CUDA项目编译为一个文件,但同时我不希望仅限于我拥有的特定视频卡。为此,我需要使用PTX(或包含ptx的cubin),在加载时,将为特定设备编译此PTX文件。

我尝试将Generate Relocatable Device Code设置为Yes(-rdc = true)并编译为PTX和Cubin - 结果相同我为每个.cu文件获得了很少的独立文件。

1 个答案:

答案 0 :(得分:1)

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

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

编辑添加,显示托管CUDA支持运行时链接(请参阅here)。