gpt4 book ai didi

performance - exp 函数运行时比较 ifort 与 gfortran

转载 作者:行者123 更新时间:2023-12-04 01:02:59 24 4
gpt4 key购买 nike

我写了这段代码:

program exponent
implicit none

real(8) :: sum
integer(8) :: i
integer :: limit
real :: start, end

sum = 0d0
limit = 10000000
call CPU_TIME(start)
do i=1, limit
sum = sum + exp(i*1.d0/limit)
end do
call CPU_TIME(end)
print *, sum
print '("Time = ",f6.3," seconds.")',end-start
end program exponent

我在 CentOS Linux 7 上使用 gfortran 10.1.0 和 ifort 19.1.3.304 编译它,使用:

ifort *.f90 -O3 -o intel.out

gfortran *.f90 -O3 -o gnu.out

输出是:

牛:

17182819.143730670
Time = 0.248 seconds.

英特尔:

17182819.1437313
Time = 0.051 seconds.

当我运行几次时,每次的运行时间几乎相同。

为什么 ifort 比 gfortran 快,我怎样才能使 gfortran 运行得和 ifort 一样快?

最佳答案

ifort 主要更快,因为它使用自己的优化数学库 SVML(随英特尔编译器提供)。这个库通常更快,因为它提供了优化的矢量化原语,即使没有-ffastmath。此外,英特尔编译器倾向于更好地矢量化循环(尤其是像这样的减少)。

你可以看出区别on GodBolt : ifort 版本通过一次处理 2 个数字来向量化循环,而 gfortran 版本使用较慢的标量指数。

请注意,由于 AVX 指令集,使用 -mavx2 有助于 ifort 生成更快的代码。使用 AVX-512 指令(如果在目标机器上可用)可能会更快。gfortran 可以在 GodBolt 上用 -march=native 向量化循环(但奇怪的是不能用 -march=skylake-ffast-math)。

关于performance - exp 函数运行时比较 ifort 与 gfortran,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67582658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com