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