performance - gfortran 9.3 的 zgetrf 例程非常慢
问题描述
我有一个 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 文件。这部分解决了问题。两台机器上的性能速度是一样的,但是程序有时会出乎意料的崩溃。
非常感谢有关可能解决方案的建议。
解决方案
谢谢弗拉基米尔,
问题已经解决了。我在新服务器上安装了 BLAS,但没有注意到该程序实际上与旧服务器上的 OpenBLAS 链接。安装 OpenBLAS 完全解决了这个问题。这似乎是一个有趣的点,在编译过程中我看不到我是否将库与 BLAS 或 OpenBLAS 链接。
推荐阅读
- python - OrderedDict 的 OrderedDict 和在 YAML 问题中存储数据
- php - 将 Woocommerce 结帐“订单评论”更改为具有已定义最大长度的文本输入字段
- angular - Nativescript Angular,无法返回上一页
- python - Django,我的 for 循环未显示在包含模板中
- c# - 如何在 C# 中更改 Excel 工作表单元格的背景颜色
- recursion - 在 SML 中查找 int 列表的模式以及它在没有库函数的情况下出现的位置
- excel - MS Access 2016 TransferSpreadsheet 导入错误 3274:不是预期的格式
- java - 当我使用 PDFBox 从 PDF 中提取西班牙语文本时,重音被“奇怪”字符改变
- css - Vue JS:如何在路由器链接中设置活动标签的样式?
- javascript - 日文的表意和全角句号是否都映射到 ASCII 句号?