与Driver API的CUDA动态并行性

时间:2015-01-07 22:35:51

标签: cuda dynamic-parallelism

我正在尝试编译和链接动态内核,并将其与GK110上的 CUDA驱动程序API 一起使用。

我将Visual Studio中的.cu源文件与可重定位设备代码标志和compute_35,sm_35编译成ptx文件然后 CUDA链接器添加cudadevrt.lib (至少它试图根据到链接器调用)。当我在ptx .obj上执行cuModuleLoad时,它表示不支持的设备代码。还有一个 .device-link.obj ,它似乎不切实际的小而且没有驱动程序api函数似乎将它识别为有效图像。在检查ptx文件时,我可以看到它根据CUDA文档(来自PTX部分的动态并行性)生成了对内核启动函数的调用。

如何链接正确的设备代码,以便动态内核调用工作?

(这是带有VC2013的Win64上的CUDA 6.5)

1 个答案:

答案 0 :(得分:4)

您需要在使用驱动程序API提供的cuda链接器加载ptx文件时进行链接:

  • 使用可重定位标志将cu源文件编译为ptx

在你的应用中:

  • 使用cuLinkCreate()
  • 创建链接器实例
  • 使用cuLinkAddFile()或cuLinkAddData()附加ptx文件
  • 使用cuLinkAddFile()或cuLinkAddData()附加cudadevrt.lib
  • 调用cuLinkComplete(),它会返回您可以照常加载的二进制文件(例如cuModuleLoadDataEx())
  • 使用cuLinkDestroy()
  • 销毁链接器实例