根据"performace tips" section of the Julia manual,不建议多次发送疯狂。我遇到的情况似乎我需要3个参数来定义I型。这与我关于using only 1 parameter for 2 possible types的问题有关。我意识到我可以通过简单地使用另一个参数来解决那里出现的困难但是我的类型看起来像
,
对于要派遣几个参数,这是不可取的性能中介吗? mytype上的函数然后将调度3个参数,函数参数是正确的吗?
答案 0 :(得分:5)
没关系。请注意,您可以将其写为:
type mytype{R<:Real, S, T}
x::Matrix{R}
y::Dict{Int64, Vector{S}}
z::Dict{T, Vector{Int64}}
end
在大多数情况下,如果你进行了一些非常重要的计算,严格打字(在类型上)将有利于提高性能。如果您使用内联调用的小功能(在很多情况下它会在v0.5中自动调用,但您可以使用@inline
进行帮助),那么无论如何都可以免费调用函数而且你一无所畏。
与往常一样,对它进行基准测试并亲眼看看。这里的问题主要来自大量的价值类型。
答案 1 :(得分:5)
没关系。 根据需要对类型进行多次调度。 这就是它的用途。
你真正想做的事情;以及文档的这一部分是什么,是对值的过多调度。 您可以使用值作为类型参数来执行此操作。
对值进行调度往往会产生(通常)导致动态调度的问题。 这意味着调用具有值作为类型参数的函数的函数不能通过知道它将调用哪个函数来专门化。 这与类型不稳定性密切相关。 它可以杀死很多优化器,并使julia像python一样运行缓慢。
Here is我的一些代码的例子,可以说是太远了#34;随着价值的调度。
它广泛使用Val{T}
类型,它仅用于允许对值进行调度。
它非常具有表现力,而且非常简洁,但它不会像使用条件或字典查找那样快速运行相同的代码。
(在这种情况下,这是我愿意做出的权衡)
文档还指出,您不应将值存储为自定义类型的类型参数。特别是如果你甚至不打算发送它们。这就是字段的用途。