CUDA在不同的程序中调用函数

时间:2015-06-28 15:04:32

标签: cuda glsl

在cuda中,是否可以调用在其他程序中定义的设备功能?

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

所以,我想要的是:

  • 具有实用功能A,B和C
  • 的立方体
  • 能够调用功能A和B
  • 的Cubin
  • 能够调用功能A和C
  • 的cubin

有办法吗?

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

1 个答案:

答案 0 :(得分:2)

你不能用cubins做到这一点。

在CUDA中,无法编译为具有不满意依赖关系的cubin文件。所有CUDA代码必须在编译时可用于汇编器/链接器,无论是在目标文件还是库中。如果你不这样做,那么cubin汇编阶段将会因未满足的依赖性而失败。因此,你提出的建议无法奏效。设备函数指针在CUDA中的工作方式也排除了使用运行时指针赋值将先前的匿名函数传递给内核的可能性。这是因为没有办法在运行时使用主机API从cubin获取设备函数句柄。要做到这一点,需要设备代码,设备代码无法正常工作。

你有两个选择:

  1. 使用单独的编译和库将实用程序功能构建到服务库中,然后使用设备链接器为该库构建cubin
  2. 在运行时使用JIT PTX编译和汇编。如果您需要将所有代码编译到PTX,您可以设计一个系统,将所有必需的PTX代码连接到驱动程序API的JIT编译调用的单个输入中。这应该避免在编译时解决所有问题的必要性
  3. 最后,是的,您可以在CUDA中使用函数指针,但如上所述,他们不会在这里帮助您。