首页 > 解决方案 > 如何在 Julia 中创建功能障碍以提高性能?

问题描述

我正在阅读一些关于计算机科学中的障碍是什么(特别是函数障碍)的想法,并想知道如何在我自己的 Julia 代码中复制这种事情。我有以下功能:

julia> function strange_twos(n)
           a = Vector{rand(Bool) ? Int64 : Float64}(undef, n)
           for i = 1:n
               a[i] = 2
           end
           return a
       end;

我将如何为此功能添加障碍以提高性能?

标签: julia

解决方案


分解的方法如下:

julia> function fill_twos!(a)
           for i = eachindex(a)
               a[i] = 2
           end
       end;

julia> function strange_twos(n)
           a = Vector{rand(Bool) ? Int64 : Float64}(undef, n)
           fill_twos!(a)
           return a
       end;

这个实现速度很快的原因是在原始循环中,a循环本身的类型是未知的。但是在上面提供的示例中,函数的类型a将在调用函数时知道,因此可以预编译代码,从而提高速度。

您可以在性能改进部分下的 Julia 文档中阅读有关此内容的更多信息:https ://docs.julialang.org/en/v1/manual/performance-tips/#kernel-functions


推荐阅读