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