在cuda中,是否可以调用在其他程序中定义的设备功能?
我希望有一个包含多个设备函数的程序,然后创建不同的内核(可以在不同的cubin中编译),但是能够调用这些函数。
所以,我想要的是:
有办法吗?
还有一个类似的问题,是否有可能有一种类似于CUDA中GLSL子程序的函数指针?
答案 0 :(得分:2)
你不能用cubins做到这一点。
在CUDA中,无法编译为具有不满意依赖关系的cubin文件。所有CUDA代码必须在编译时可用于汇编器/链接器,无论是在目标文件还是库中。如果你不这样做,那么cubin汇编阶段将会因未满足的依赖性而失败。因此,你提出的建议无法奏效。设备函数指针在CUDA中的工作方式也排除了使用运行时指针赋值将先前的匿名函数传递给内核的可能性。这是因为没有办法在运行时使用主机API从cubin获取设备函数句柄。要做到这一点,需要设备代码,设备代码无法正常工作。
你有两个选择:
最后,是的,您可以在CUDA中使用函数指针,但如上所述,他们不会在这里帮助您。