Julia 如何改进函数的推理

Julia 如何改进函数的推理,julia,type-inference,cdf,Julia,Type Inference,Cdf,我使用Julia0.4.7,因为我有一些旧代码,在我的应用程序中,它比0.5.1快 我试图计算长向量Ints的经验CDF。为此,我使用了searchsortedlast(data,x)/n,其中data是一个排序的Vector{Int},x是一个Int和n=length(data) 我必须计算很多向量的CDF,我发现速度非常慢。我认为减速是因为推断在searchsortedlast的某个地方失败了(正文中有一个Any): 我已经看过了searchsortedlast的功能,但是我不知道如何改进那

我使用Julia0.4.7,因为我有一些旧代码,在我的应用程序中,它比0.5.1快

我试图计算长向量
Int
s的经验CDF。为此,我使用了
searchsortedlast(data,x)/n
,其中
data
是一个排序的
Vector{Int}
x
是一个
Int
n=length(data)

我必须计算很多向量的CDF,我发现速度非常慢。我认为减速是因为推断在
searchsortedlast
的某个地方失败了(正文中有一个
Any
):


我已经看过了searchsortedlast的功能,但是我不知道如何改进那里的推理(有很多方法定义让我困惑,但这并不是说我是一个专业的程序员)。也许我可以在某个地方注释一些东西,但不知道在哪里。有人能帮忙吗?

除了升级到0.5之外,你真的什么都做不了,问题已经解决了。0.4根本不具备对0.5之类的函数类型进行分派的能力,这就是为什么
ord
调用的类型不稳定的原因


请注意,这种特定类型的不稳定性是无害的-由于函数的返回类型仍然是稳定的,因此唯一增加的成本是每次调用时向
searchsortedlast
进行一次动态调度,与搜索大型阵列的成本相比,这是一个很小的成本。

但我发现0.5无论如何都要慢。然后打开一个新问题,“为什么JuliaLang v0.5上的XYZ比v0.4.7慢?”并举一个人们可以运行的示例。
@code_warntype searchsortedlast(data, 2000)

Variables:
  v::Array{Int64,1}
  x::Int64

Body:
  begin $(Expr(:line, 184, symbol("sort.jl"), symbol("")))
      return (Base.Sort.searchsortedlast)(v::Array{Int64,1},x::Int64,(Base.Sort.ord)(Base.Sort.isless,Base.Sort.identity,false,Base.Sort.Forward)::Any)::Int64
  end::Int64