代码之家  ›  专栏  ›  技术社区  ›  Thomas

如何让PyCuda SourceModule编译包含设备代码的多个源文件?

  •  0
  • Thomas  · 技术社区  · 7 年前

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

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

    LAPACKE_dgesv() include_dirs Python代码中SourceModule调用的参数。但是,当我运行代码时,会出现以下错误:

    ptxas fatal   : Unresolved extern function 'LAPACKE_dgesv'
    

    我的猜测是,包含 未编译。

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   talonmies    7 年前

    不,你不能这样做 SourceModule .

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