我正在尝试在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编译器。
答案 0 :(得分:1)
不,您无法使用SourceModule
执行此操作。
最近有一个实验DynamicSourceModule
已添加到Master分支中,它可能可以做你想要的,虽然它没有很好的文档记录,我从来没有使用它。否则,您可以在PyCUDA之外自己静态编译和设备将代码链接到Cubin文件,并通过标准API加载生成的设备代码。