首页 > 解决方案 > 使用 GNU 中的编译和链接标志减少 fortran 程序的运行时间

问题描述

我的问题与 .exe 应用程序的运行时有关。我得到了一个非常大的代码(我知道它没有错误),但是运行时间太长了。我已经用 GNU 编译了它,但由于我的计算机只有两个处理器,我也无法使用并行编程。

该问题与 2000 行的单个子程序有关。我注意到它主要由循环组成,我认为问题出在哪里。它也被主程序调用了 20000 次。

首先,我使用了 -O 标志(最好的运行时是使用 -Ofast)。之后,我尝试使用 -fforce-addr 提高循环性能,但没有发生可测量的加速。最近我正在使用其他标志,如 -mtune 来创建针对本地机器优化的代码。

这是我的主要测试和结果:

COMPOPTS= -pthread -finline-functions -fbacktrace -fzero-initialized-in-bss -fno-automatic -frecord-marker=4 LINKOPTS= -l unlimit -s unlimited

COMPOPTS= -pthread -finline-functions -fbacktrace -fzero-initialized-in-bss -fno-automatic -frecord-marker=4 -cpp LINKOPTS= -l unlimit -s unlimited

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%,所以我认为还有一些改进的空间。

标签: optimizationfortranruntimegnuflags

解决方案


推荐阅读