首页 > 解决方案 > Julia 结构内的函数属性性能不佳

问题描述

我想要一个可以从结构调用的函数。为此,我试图在 Julia(在一定程度上)模仿 C++ 类方法。为此,我在 Julia 结构中添加了一个函数属性,并将该属性分配给我在构造函数阶段传入的函数对象。

问题是,它有效,但这种方法实际上比直接调用函数慢 1000 倍。

下面是我的代码的 MWE:

struct struct_wh_method{F}
          func::F;
          function struct_wh_method(func_in)
             new{typeof(func_in)}(func_in)
          end
       end

fun() =  1+1;

现在,实例化结构对象:

A = struct_wh_method(fun);

接下来,导入 BenchmarkTools

import BenchmarkTools

我最后比较了 A.func() 和 fun() 的性能:

@btime A.func()

35.583 ns(0 个分配:0 个字节)

@btime fun()

0.035 ns(0 个分配:0 个字节)

有没有办法让函数调用更有效?我有一种感觉,我做错了什么。也许,这从根本上是使用 Julia 的错误方式,在这种情况下,我将非常感谢任何人指导我使用优雅且高性能的“Julian”方式来实现类似目标。我非常感谢堆栈溢出社区的帮助。

干杯。

标签: functionstructjulia

解决方案


不同之处在于查找结构的时间。如果您在@btime调用中插入变量(注意$以下内容),您会得到相同的时间:

julia> @btime $A.func()
  0.036 ns (0 allocations: 0 bytes)
2

julia> @btime fun()
  0.036 ns (0 allocations: 0 bytes)
2

推荐阅读