Julia - 为什么循环更快

try*_*lve 4 performance julia

我有 MATLAB 背景,所以我倾向于将所有内容矢量化。但是,在 Julia 中,我测试了这两个函数:

function testVec(n)
    t = [0 0 0 0];
    for i = 1:n
        for j = 1:4
            t[j] = i;
        end
    end
end

function testVec2(n)
    t = [0 0 0 0];
    for i = 1:n
        t.= [i i i i];
    end
end

@time testVec(10^4)
0.000029 seconds (6 allocations: 288 bytes)
@time testVec2(10^4)
0.000844 seconds (47.96 k allocations: 1.648 MiB)
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 为什么循环更快?
  2. 如果循环确实更快,是否有模拟循环的“智能”矢量化技术?循环的语法又丑又长。

DNF*_*DNF 5

  1. 这都是引擎盖下的循环。向量化的表达式在 Julia 和 Matlab 中都被转换为循环。最后都是循环。在您的特定示例中,正如@sam 所说,因为您正在分配一堆额外的数组,如果您显式循环,则可以避免这些数组。您仍然在 Matlab 中这样做的原因是,所有内容都被改组为用高性能语言(可能是 C 或 Fortran)编写的函数,因此即使您进行额外分配也是值得的。

  2. 确实有,正如@sam 所示。是一篇博客文章,它告诉您有关广播和循环融合的所有信息。