【发布时间】:2013-09-20 02:43:25
【问题描述】:
我正在使用 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 接口?我相信这在概念上是可能的,但我不知道该怎么做!
【问题讨论】:
-
请参阅stackoverflow.com/q/11576073/681865,讨论为什么您想做的事情不是一个好主意。
-
有关在使用 BLAS 库的应用程序 (Octave) 中使用 cublas thunking 接口的有限示例(替换单个 BLAS 函数 -- Dgemm),请参阅here。在这种特殊情况下,对于大型矩阵乘法,将数据传输到 GPU 的开销/成本被减少的计算时间所抵消。
标签: cuda lapack blas cublas magma