0

我有一个 c++ 代码(用 g++ 编译),它创建并填充了一个 blitz++ 矩阵,其中填充了复杂的双精度值(我称之为 lseMatrix)。然后使用 zgetrf fortran 例程将矩阵反转为

zgetrf_(&n, &n, &((*lseMatrix)(0, 0)), &n, &(iPiv(0)), &info)

我的旧机器(在 Ubuntu 16.04 下,单处理器)安装了 g++ 和 gfortran(版本 5.4)和 lapack/blas(v. 3.6.0-2ubuntu2)。代码在那里运行得非常好,使用 zgetrf 反转相对较大的矩阵大约需要 10 分钟。但是,当我用我的新机器(在 Ubuntu 20.04 下,两个配对处理器)运行代码时,具有最新版本的 g++ 和 gfotran(v. 9.3)和最新的 lapack/blas(3.9.0-1build1),反转操作需要5个小时。

已经进行了以下测试:

  1. 在没有编译优化标志的新旧机器上运行代码。结果:性能没有改变。

  2. 尝试在旧机器上的链接阶段创建一个带有 -static 标志的静态库,并在新机器上运行生成的 .exe 文件。这部分解决了问题。两台机器上的性能速度是一样的,但是程序有时会出乎意料的崩溃。

非常感谢有关可能解决方案的建议。

4

1 回答 1

0

谢谢弗拉基米尔,

问题已经解决了。我在新服务器上安装了 BLAS,但没有注意到该程序实际上与旧服务器上的 OpenBLAS 链接。安装 OpenBLAS 完全解决了这个问题。这似乎是一个有趣的点,在编译过程中我看不到我是否将库与 BLAS 或 OpenBLAS 链接。

于 2021-06-14T07:39:46.493 回答