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

时间:2017-07-09 21:29:10

标签: cuda pycuda

我正在尝试在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编译器。

1 个答案:

答案 0 :(得分:1)

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

最近有一个实验DynamicSourceModule已添加到Master分支中,它可能可以做你想要的,虽然它没有很好的文档记录,我从来没有使用它。否则,您可以在PyCUDA之外自己静态编译和设备将代码链接到Cubin文件,并通过标准API加载生成的设备代码。