CUDA调用不同程序中的函数



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

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

所以,我想要的是:

  • 具有效用函数A、B和C的立方体
  • 一个能够调用函数A和B的立方体
  • 一个能够调用函数A和C的立方体

有办法做到这一点吗?

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

不能使用立方体来完成此操作。

在CUDA中,不可能编译成依赖项不满足的cubin文件。所有CUDA代码必须在编译时可用于汇编程序/链接器,无论它们是在对象文件还是库中。如果不这样做,cubin组装阶段将在不满足的依赖关系中失败。因此,你的建议是行不通的。CUDA中设备函数指针的工作方式也排除了使用运行时指针分配将以前的匿名函数传递给内核的可能性。这是因为在运行时无法使用主机API从cubin获取设备函数句柄。要做到这一点,需要设备代码,而由于上述原因,设备代码无法工作。

这里有两个选择:

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

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

最新更新