我有一个 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个小时。
已经进行了以下测试:
在没有编译优化标志的新旧机器上运行代码。结果:性能没有改变。
尝试在旧机器上的链接阶段创建一个带有 -static 标志的静态库,并在新机器上运行生成的 .exe 文件。这部分解决了问题。两台机器上的性能速度是一样的,但是程序有时会出乎意料的崩溃。
非常感谢有关可能解决方案的建议。