FORTRAN - 减少函数调用开销

时间:2012-08-23 01:02:25

标签: performance function optimization fortran 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 

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行代码。减少函数调用开销的最佳方法是什么? 一种方法是内联函数。还有其他出路吗?

2 个答案:

答案 0 :(得分:5)

您可以做的最好的事情是尽可能明确地关于函数的语义,尽可能地提高优化,并让编译器做出关于如何最好地实现调用的最佳决策。确保虚拟变量标记为intent(in),并将函数标记为pure - 尽管如果它只有30行,编译器无疑会在高优化时注意这些事情 - 并检查编译器选项以查看如果有什么可以鼓励(例如)内联。

答案 1 :(得分:2)

通常,过程调用的开销很低。如果函数有30行代码,那么你可能会获得很少的代码,因为实际函数将优先于函数调用。如果您想确定,请测量当前实现的运行时,然后内联代码并测量该运行时。