我正在将一些计算从 C# 移植到 CUDA。我想移植 C# 中的许多类,对于每个 c# 类,我在我的 CUDA 项目中创建 .cu 和 .cuh 文件。所有相关的类,以及它们在计算中使用的所有类。我需要保存我的 C# 代码的结构,因为在其他情况下很容易出错。
PS如果我将所有代码放在一个文件中 - 一切都按预期工作,但阅读或修复一些问题会变得非常痛苦。
我想编译 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 文件获得了几个独立的文件。