【问题标题】:How to get PyCuda SourceModule to compile multiple source files containing device code?如何让 PyC​​uda SourceModule 编译多个包含设备代码的源文件?
【发布时间】:2017-07-10 11:15:15
【问题描述】:

我正在尝试在 CUDA 内核中使用一些 LAPACKE 函数来求解小型线性方程组。我有一个包含我要调用的内核函数的主源文件。在该内核函数中,我想调用 LAPACKE 函数LAPACKE_dgesv(),它在不同的源文件中定义。

在我的主源文件中,我包含了头文件lapacke.h,其中包含LAPACKE_dgesv() 的声明。此外,我编辑了lapacke.h 以将__device__ 添加到LAPACKE_dgesv() 的函数声明中。

我将包含LAPACKE_dgesv() 定义的源文件的目录添加到我的Python 代码中SourceModule 调用的include_dirs 参数中。但是,当我运行代码时,出现此错误:

ptxas fatal   : Unresolved extern function 'LAPACKE_dgesv'

我的猜测是包含LAPACKE_dgesv() 定义的源文件没有被编译。

有没有办法让 PyC​​uda 编译多个包含设备代码的源文件? PyCuda 似乎需要一种方法来运行带有 --relocatable-device-code=true 标志的 CUDA 编译器。

【问题讨论】:

    标签: cuda pycuda


    【解决方案1】:

    不,您不能使用 SourceModule 执行此操作。

    有一个实验性的DynamicSourceModule 最近被添加到主分支中,它可能可以做你想做的事,尽管它没有很好的文档记录,我从未使用过它。否则,您始终可以在 PyCUDA 之外自行静态编译并将代码链接到 cubin 文件,然后通过标准 API 加载生成的设备代码。

    【讨论】:

    • 那么,如果我在 PyCuda 之外手动创建一个 cubin 文件,我是否可以使用 module_from_file PyCuda 函数将其加载到我的 Python 代码中?
    • 是的。在设备代码中有 C++ 链接的情况下,您还可以先验检查 cubin 的内容以获取符号名称
    猜你喜欢
    • 2019-06-14
    • 1970-01-01
    • 2018-06-24
    • 2020-01-10
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    相关资源
    最近更新 更多