我有一个Fortran代码是这样的:FORTRAN - Reduce函数调用的开销
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行代码。减少函数调用开销的最佳方法是什么? 一种方法是内联函数。还有其他出路吗?
对于这种情况,所有的参数都是只读的,所以我应该将它们全部标记为“intent(in)'?但是通过指定'intent(in)'我会得到什么样的性能增益?我正在用'-O3 flag'编译最高优化。另外'纯'做什么? – arunmoezhi
pure告诉编译器该函数没有副作用,是的,标记所有参数意图(in)表示在函数期间没有任何变化。并且请注意,-O3不会启用* all *优化;检查你的编译器手册页,看看是否有任何额外的优化标志可能与这种情况有关。 –
我搜索了'pure'并得到了相同的解释。 '纯功能没有副作用'。但是'副作用'在这里意味着什么。除了'-O3'之外,我正在使用'-ipo',因为这个函数在另一个源文件中。 – arunmoezhi