aru*_*zhi 2 optimization performance fortran function fortran90
我有这样的fortran代码:
file1.f90
program myprog
use func1mod
do i=1,N
call subroutine1
enddo
subroutine subroutine1
integer*8::var1,var2,var3,...
do j=1,N
x=func1(var1,var2,var3,..)
computations based on x
enddo
return
end
end
Run Code Online (Sandbox Code Playgroud)
file2.f90
module func1mod
contains
func1(var1,var2,var3,....)
func1=some computations based on var1, var2, var3, ...
return
end function func1
end module func1mod
Run Code Online (Sandbox Code Playgroud)
function func1不会修改它的任何参数.它根据参数计算值并返回一个值.参数数量很大,但函数少于30行代码.减少函数调用开销的最佳方法是什么?一种方法是内联函数.还有其他出路吗?
您可以做的最好的事情是尽可能明确地关于函数的语义,尽可能高的优化,并让编译器做出关于如何最好地实现调用的最佳决策.确保虚拟变量被标记intent(in)
,并将函数标记为pure
- 尽管如果它只有30行,编译器无疑会在高优化时注意这些事情 - 并检查编译器选项以查看是否有任何可以做的事情来鼓励(对于实例)内联.