Julia 朱莉娅:嵌套函数慢吗?

Julia 朱莉娅:嵌套函数慢吗?,julia,nested-function,Julia,Nested Function,当我编写代码时,我可以看到函数中重复的部分,但在其他函数中没有使用 f(x) = x*x function g(a,b) a+f(b) end 所以,我想让重复部分发挥作用 但是嵌套函数是否较慢?我在julia docs的性能提示中找不到这一点。Bogumil在评论中普遍回答了这个问题。为了认识到内联是有效的,您可以做这个小实验。定义以下f和g功能 f(x) = x*x function g(a,b) a+f(b) end 现在,让我们看看编译器如何处理它们: julia>

当我编写代码时,我可以看到函数中重复的部分,但在其他函数中没有使用

f(x) = x*x

function g(a,b)
  a+f(b)
end
所以,我想让重复部分发挥作用


但是嵌套函数是否较慢?我在julia docs的性能提示中找不到这一点。

Bogumil在评论中普遍回答了这个问题。为了认识到内联是有效的,您可以做这个小实验。定义以下
f
g
功能

f(x) = x*x

function g(a,b)
  a+f(b)
end
现在,让我们看看编译器如何处理它们:

julia> @code_typed g(3,4)
CodeInfo(
1 ─ %1 = Base.mul_int(b, b)::Int64
│   %2 = Base.add_int(a, %1)::Int64
└──      return %2
) => Int64
您可以看到对函数
f
的调用已经内联

通常小函数是内联的,较大的函数可以用
@inline
宏修饰,以建议编译器使用内联(请注意,这只是一个提示)。由于当一个函数的代码不止几行时,调用它的成本很小,因此调用它不会对性能产生显著影响


最后但并非最不重要的一点是,使用
BenchmarkTools
进行自己的基准测试似乎总是一个好主意:-)

为什么不编写一个基准测试并对其进行测试?一般来说:1)Julia中的函数调用速度很快,2)编译器将内联小函数。您的问题的详细答案取决于您的具体实现,因此为了准确回答问题,我们需要您的代码。@NicoHaase当然,我写了一个基准代码,但我不知道通用基准方法,我想知道通用基准方法case@Bogumi卡米斯基:谢谢你的回答!