如何让 PyCuda SourceModule 编译包含设备代码的多个源文件?
How to get PyCuda SourceModule to compile multiple source files containing device code?
我正在尝试在 CUDA 内核中使用一些 LAPACKE 函数来求解小型线性方程组。我有一个主源文件,其中包含我要调用的内核函数。在该内核函数中,我想调用 LAPACKE 函数 LAPACKE_dgesv()
,它在不同的源文件中定义。
在我的主源文件中,我包含了头文件 lapacke.h
,其中包含 LAPACKE_dgesv()
的声明。此外,我编辑了 lapacke.h
以将 __device__
添加到 LAPACKE_dgesv()
.
的函数声明中
我在 Python 代码中将包含 LAPACKE_dgesv()
定义的源文件目录添加到 SourceModule 调用的 include_dirs
参数中。但是,当我 运行 代码时,出现此错误:
ptxas fatal : Unresolved extern function 'LAPACKE_dgesv'
我的猜测是包含 LAPACKE_dgesv()
定义的源文件没有被编译。
有没有办法让PyCuda编译包含设备代码的多个源文件?似乎 PyCuda 需要一种方法来 运行 带有 --relocatable-device-code=true
标志的 CUDA 编译器。
不,您不能使用 SourceModule
执行此操作。
有一个实验性的 DynamicSourceModule
最近被添加到 Master 分支,它可能可以做你想做的事,虽然它没有很好的文档记录而且我从未使用过它。否则,您始终可以在 PyCUDA 之外自行将代码静态编译和设备 link 到 cubin 文件,然后通过标准 API 加载生成的设备代码。
我正在尝试在 CUDA 内核中使用一些 LAPACKE 函数来求解小型线性方程组。我有一个主源文件,其中包含我要调用的内核函数。在该内核函数中,我想调用 LAPACKE 函数 LAPACKE_dgesv()
,它在不同的源文件中定义。
在我的主源文件中,我包含了头文件 lapacke.h
,其中包含 LAPACKE_dgesv()
的声明。此外,我编辑了 lapacke.h
以将 __device__
添加到 LAPACKE_dgesv()
.
我在 Python 代码中将包含 LAPACKE_dgesv()
定义的源文件目录添加到 SourceModule 调用的 include_dirs
参数中。但是,当我 运行 代码时,出现此错误:
ptxas fatal : Unresolved extern function 'LAPACKE_dgesv'
我的猜测是包含 LAPACKE_dgesv()
定义的源文件没有被编译。
有没有办法让PyCuda编译包含设备代码的多个源文件?似乎 PyCuda 需要一种方法来 运行 带有 --relocatable-device-code=true
标志的 CUDA 编译器。
不,您不能使用 SourceModule
执行此操作。
有一个实验性的 DynamicSourceModule
最近被添加到 Master 分支,它可能可以做你想做的事,虽然它没有很好的文档记录而且我从未使用过它。否则,您始终可以在 PyCUDA 之外自行将代码静态编译和设备 link 到 cubin 文件,然后通过标准 API 加载生成的设备代码。