通过GNU

时间:2019-03-19 19:53:08

标签: optimization fortran runtime gnu flags

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

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

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

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

  • 原始程序(31秒)

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

  • 使用-Ofast(25秒)

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

  • 最后一刻(24秒)

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

0 个答案:

没有答案