【问题标题】:CUDA dynamic parallelism with Driver APICUDA 动态并行与驱动程序 API
【发布时间】:2015-03-05 23:08:48
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: cuda dynamic-parallelism


    【解决方案1】:

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

    • 将带有可重定位标志的 cu 源文件编译为 ptx

    在您的应用中:

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

    【讨论】:

    • 谢谢!那确实奏效了。不过仍然想知道如何制作一个预先链接的东西。
    • 我提供了一个答案here,它展示了如何制作“预链接的东西”。
    猜你喜欢
    • 2010-09-19
    • 2020-09-22
    • 2021-11-07
    • 1970-01-01
    • 2020-05-24
    • 2021-10-31
    • 2011-10-29
    • 1970-01-01
    • 2013-08-21
    相关资源
    最近更新 更多