当函数参数是一个变量时,如何提高Fortran内部函数调用的性能

web*_*ppl 1 variables performance fortran arguments

我正在编写一个涉及大量指数函数调用的Fortran程序.我发现当exp()函数的参数是变量时,计算速度比使用常量值作为函数参数慢20多倍.例如,在以下两个示例程序中,程序A比程序B慢得多.

program A
real a,b
integer i

a=1.234
do i=1,100000000
  b=exp(a)
end do
stop
end program A
Run Code Online (Sandbox Code Playgroud)

=====================

program B
integer i
real b

do i=1,100000000
  b=exp(1.234)
end do
stop
end program B
Run Code Online (Sandbox Code Playgroud)

当使用变量作为exp()函数参数是不可避免的时候,如何提高exp()计算效率?

M. *_* B. 8

一些编译器可以在编译时评估应用于常量的内部函数.因此,在这种情况下评估内在函数没有运行时间成本.显然,这不能用于真正的变量,因为直到运行时才会知道这些值.

  • 并且一些编译器可以发现其内容不会改变的循环(如在OP的"程序B"中)并且只通过它一次. (4认同)