首页 > 解决方案 > gfortran 程序运行速度比 ifort 快

问题描述

我有一些 fortran 代码,使用 gfortran 编译时比使用 ifort 编译时更快。我通常在互联网上找到相反的情况......

我尝试运行 intel vtune 来识别可执行文件之间的不同热点,但我无法解决这些问题。

我不确定是什么导致了这种差异。这是性能输出:

gfortran:

Performance counter stats for 'build/gnuRelease/NBODY inputFile temp' (10 runs):

      2,489.36 msec task-clock:u              #    0.986 CPUs utilized            ( +-  0.21% )
             0      context-switches:u        #    0.000 K/sec                  
             0      cpu-migrations:u          #    0.000 K/sec                  
           589      page-faults:u             #    0.237 K/sec                    ( +-  0.05% )
10,678,130,527      cycles:u                  #    4.290 GHz                      ( +-  0.20% )
31,102,858,644      instructions:u            #    2.91  insn per cycle           ( +-  0.00% )
 3,537,572,458      branches:u                # 1421.078 M/sec                    ( +-  0.00% )
       566,054      branch-misses:u           #    0.02% of all branches          ( +-  5.14% )

        2.5235 +- 0.0150 seconds time elapsed  ( +-  0.59% )

福特:

 Performance counter stats for 'build/ifortRelease/NBODY inputFile temp' (10 runs):

      2,834.44 msec task-clock:u              #    0.978 CPUs utilized            ( +-  0.14% )
             0      context-switches:u        #    0.000 K/sec                  
             0      cpu-migrations:u          #    0.000 K/sec                  
         2,600      page-faults:u             #    0.917 K/sec                    ( +-  0.01% )
12,146,500,211      cycles:u                  #    4.285 GHz                      ( +-  0.14% )
36,441,911,065      instructions:u            #    3.00  insn per cycle           ( +-  0.00% )
 2,936,917,079      branches:u                # 1036.154 M/sec                    ( +-  0.00% )
       339,226      branch-misses:u           #    0.01% of all branches          ( +-  3.74% )

        2.8991 +- 0.0165 seconds time elapsed  ( +-  0.57% )

页面错误指标引起了我的注意,但我不确定它是什么意思...

更新:

gfortran 版本:10.2.0

ifort 版本:19.1.3.304

英特尔至强(R)

更新:

类似示例:ifort 和 gfortran 之间令人费解的性能差异

从这个例子:

删除复杂的 IF 语句后,gfortran 需要大约 4 倍的时间(10-11 秒)。这是意料之中的,因为该声明大约抛出了大约 75% 的数字,避免对它们进行 SQRT。另一方面,ifort 只使用了稍微多一点的时间。我的猜测是,当 ifort 尝试优化 IF 语句时出现问题。

似乎也与此案有关

标签: performanceassemblyfortrangfortranintel-fortran

解决方案


推荐阅读