我在 Linux 上使用了一个商业模拟软件,它可以进行密集的矩阵操作。该软件默认使用英特尔 MKL,但它允许我将其替换为自定义 BLAS/LAPACK 库。此库必须是共享对象 (.so) 库,并且必须导出 BLAS 和 LAPACK 标准例程。该软件都需要标准的 Fortran 接口。
为了验证我是否可以使用自定义库,我编译了 ATLAS 并在其中链接了 LAPACK(来自 netlib)。该软件能够毫无问题地使用我编译的 ATLAS 版本。
现在,我想让软件使用 cuBLAS 以提高仿真速度。我遇到了 cuBLAS 不导出标准 BLAS 函数名称(它们有cublas
前缀)的问题。此外,库 cuBLAS 库不包含 LAPACK 例程。我readelf -a
用来检查导出的函数。
另一方面,我尝试使用MAGMA来解决这个问题。我成功编译并链接到所有 ATLAS、LAPACK 和 cuBLAS。但它仍然没有导出正确的函数,也没有在最终的共享对象中包含 LAPACK。我不确定这是应该的方式还是我在构建过程中做错了什么。
我也找到了CULA,但我不确定这是否能解决问题。
是否有人试图将 cuBLAS/LAPACK(或适当的包装器)链接到一个(.so)导出具有正确函数名称的标准 Fortran 接口?我相信这在概念上是可能的,但我不知道该怎么做!