Fortran中内在(数学)函数的效率如何?

时间:2017-05-16 17:31:50

标签: performance fortran

Fortran(90+)内在(数学)功能的效率如何?我特别关心tanh和sech,但我也对其他Fortran内部函数感兴趣。

"效率如何"我的意思是,如果很难提出一个更快的方法,那么内在函数是有效的,但如果很容易想出一个更快的方法,那么内在函数是低效的。

这是一个MWE,其中我尝试使其更快的更改实际上使其变慢,这表明内在函数是有效的。

program main
implicit none

integer, parameter :: n = 10000000
integer  :: i
real :: x, var
real :: t1,t2,t3,t4

!! Intrinsic first
call cpu_time(t1)
do i = 1, n
  x = REAL(i)/300.0
  var = tanh(x)
end do
call cpu_time(t2)
write(*,*) "Elapsed CPU Time = ", t2 - t1
write(*,*) var

!! Intrinsic w/ small change
call cpu_time(t3)
do i = 1, n
  x = REAL(i)/300.0
  if (x > 10.0) then
    var = 1.0
  else
    var = tanh(x)
  end if
end do
call cpu_time(t4)
write(*,*) "Elapsed CPU Time = ", t4 - t3            
write(*,*) var

end program main

请注意,Fortran90似乎很懒惰;如果我不包括"写()var"然后它说经过的CPU时间= 0.0

0 个答案:

没有答案