我有这样的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
file2.f90
module func1mod
contains
func1(var1,var2,var3,....)
func1=some computations based on var1, var2, var3, ...
return
end function func1
end module func1mod
函数func1不会修改其任何参数。它根据参数计算值并返回一个值。参数数量很大,但函数少于30行代码。减少函数调用开销的最佳方法是什么? 一种方法是内联函数。还有其他出路吗?
答案 0 :(得分:5)
您可以做的最好的事情是尽可能明确地关于函数的语义,尽可能地提高优化,并让编译器做出关于如何最好地实现调用的最佳决策。确保虚拟变量标记为intent(in)
,并将函数标记为pure
- 尽管如果它只有30行,编译器无疑会在高优化时注意这些事情 - 并检查编译器选项以查看如果有什么可以鼓励(例如)内联。
答案 1 :(得分:2)
通常,过程调用的开销很低。如果函数有30行代码,那么你可能会获得很少的代码,因为实际函数将优先于函数调用。如果您想确定,请测量当前实现的运行时,然后内联代码并测量该运行时。