function - 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”方式来实现类似目标。我非常感谢堆栈溢出社区的帮助。
干杯。
解决方案
不同之处在于查找结构的时间。如果您在@btime
调用中插入变量(注意$
以下内容),您会得到相同的时间:
julia> @btime $A.func()
0.036 ns (0 allocations: 0 bytes)
2
julia> @btime fun()
0.036 ns (0 allocations: 0 bytes)
2
推荐阅读
- javascript - React JS:从 json 对象填充 rsuite 下拉列表
- python - admin.site.register(Question) doesn't work
- windows - dpinst 无法静默安装驱动程序
- c# - 尝试列出后台进程时,Xamarin.Android 中的 NulReferenceException
- java - HTTP 请求不起作用,使用 setRequestProperty 方法设置授权
- python - 在 Django 中向前端用户显示 Celery 任务活动的最佳实践
- python - 如何计算按钮的点击次数
- python - Django Rss Feed 将图像添加到描述中
- apache-spark - 使用 Struct 列类型读/写 Parquet
- hybris - 如何通过 impex 在 hybris 提供的电子商店上添加新的规格内容?