optimization - 使用 GNU 中的编译和链接标志减少 fortran 程序的运行时间
问题描述
我的问题与 .exe 应用程序的运行时有关。我得到了一个非常大的代码(我知道它没有错误),但是运行时间太长了。我已经用 GNU 编译了它,但由于我的计算机只有两个处理器,我也无法使用并行编程。
该问题与 2000 行的单个子程序有关。我注意到它主要由循环组成,我认为问题出在哪里。它也被主程序调用了 20000 次。
首先,我使用了 -O 标志(最好的运行时是使用 -Ofast)。之后,我尝试使用 -fforce-addr 提高循环性能,但没有发生可测量的加速。最近我正在使用其他标志,如 -mtune 来创建针对本地机器优化的代码。
这是我的主要测试和结果:
- 原创节目(31s)
COMPOPTS= -pthread -finline-functions -fbacktrace -fzero-initialized-in-bss -fno-automatic -frecord-marker=4
LINKOPTS= -l unlimit -s unlimited
- 使用 -Ofast (25s)
COMPOPTS= -pthread -finline-functions -fbacktrace -fzero-initialized-in-bss -fno-automatic -frecord-marker=4 -cpp
LINKOPTS= -l unlimit -s unlimited
- 最后情况(24s)
COMPOPTS= -mtune=native -pthread -finline-functions -fbacktrace -fzero-initialized-in-bss -fno-automatic -frecord-marker=4 -cpp -fforce-addr -fschedule-insns2 -ffp-contract=off
LINKOPTS=-l ulimit -s unlimited
我有一个用 Intel 编译的 .exe 版本,它的运行时间是 7s。我知道英特尔通常比 GNU 快 20-40%,所以我认为还有一些改进的空间。
解决方案
推荐阅读
- unreal-engine4 - 如何获取actor的原始组件
- node.js - 函数中的返回不返回但挂起
- spring-boot - 在 Spring Batch 中使用 2 个数据源时面临提交问题
- python - 如何使用我在代码中使用的所有包将 myfile.py 编译为 myfile.exe?
- python - 为什么 NLP 特征矩阵有两列?
- html - 电子邮件签名在移动设备上无法正常工作
- vba - 如何在 ms-access 2007 VBA 中计算 mod 97
- python - 使用 Django 视图/URL 上传本地文件
- postman - 带有路径变量的 Postman Mock
- python - 嵌套字典的列表理解