不同程序中的CUDA调用函数

CUDA calling function in different program

在 cuda 中,是否可以调用在不同程序中定义的 device 函数?

我想要一个包含多个 device 函数的程序,然后创建不同的内核(可以在不同的 cubin 中编译),但能够调用这些函数。

那么,我想要的是:

有办法吗?

还有一个类似的问题,在CUDA中是否可以有一种类似于GLSL中子程序的函数指针?

您不能使用小方块执行此操作。

在CUDA中,无法编译成依赖不满足的cubin文件。所有 CUDA 代码 必须 在编译时可供 assembler/linker 使用,无论是在目标文件还是库中。如果您不这样做,则 cubin 组装阶段将在未满足的依赖项中失败。因此,您提出的建议是行不通的。设备函数指针在 CUDA 中的工作方式也排除了使用运行时指针分配将以前的匿名函数传递给内核的可能性。这是因为无法在运行时使用主机 APIs 从 cubin 获取设备功能句柄。为此需要设备代码,而由于上述原因,设备代码无法工作。

这里有两个选择:

  1. 使用单独的编译和库将实用函数构建到服务库中,然后使用设备链接器针对该库构建 cubin
  2. 在运行时使用 JIT PTX 编译和组装。如果您拥有编译为 PTX 所需的所有代码,则可以设计一个系统,将所有必需的 PTX 代码连接到驱动程序 API 的 JIT 编译调用的单个输入中。这应该避免在编译时解决所有问题的需要

最后,是的,您可以在 CUDA 中使用函数指针,但如上所述,它们在这里对您没有帮助。