Julia中for循环的性能

罗格维布

我尝试了以下代码,但是代码之间的性能差异很大。我听说顶级代码不适合进行数值计算,但是性能似乎也取决于顶级变量(此处为N)是否出现在for循环范围内。避免使用此类顶级变量总是更好吗?

N = 10000000

# case1 (slow)
x = 0.0
@time for k = 1:N
    x += float( k )
end

# case2 (slow)
@time let
    y = 0.0
    for j = 1:N
        y += float( j )
    end
end

# case3 (very fast)
@time let
    n::Int64
    n = N
    z = 0.0
    for m = 1:n
        z += float( m )
    end
end

# case 4 (slow)
function func1()
  c = 0.0
  for i = 1:N                                             
    c += float( i )
  end
end

# case 5 (fast)
function func2( n )                                          
  c = 0.0
  for i = 1:n
    c += float( i )
  end
end

# case 6 (fast)
function func3()
  n::Int
  n = N
  c = 0.0
  for i = 1:n                                   
    c += float( i )
  end
end

# case 7 (slow)
function func4()
  n = N        # n = int( N ) is also slow                                  
  c = 0.0
  for i = 1:n
    c += float( i )
  end
end

@time func1()
@time func2( N )
@time func3()
@time func4()

使用Julia 0.3.7(在Linux x86_64上)获得的结果是

elapsed time: 2.595440598 seconds (959985496 bytes allocated, 10.70% gc time)
elapsed time: 2.469471127 seconds (959983688 bytes allocated, 11.49% gc time)
elapsed time: 1.608e-6 seconds (16 bytes allocated)
elapsed time: 2.535243279 seconds (960021976 bytes allocated, 11.21% gc time)
elapsed time: 0.002601149 seconds (75592 bytes allocated)
elapsed time: 0.003471583 seconds (84456 bytes allocated)
elapsed time: 2.480343146 seconds (960020752 bytes allocated, 11.48% gc time)
姆绍尔

答案是“避免这样的顶级变量总是更好吗?” 字面量当然是“不,取决于”,但有用的注释是将全局变量声明为常量

const N = 10000000

使情况2与情况3一样快。

编辑:我应该补充一点,情况2的问题是,即使累加器变量是本地的,顶层也N会使范围1:N和迭代器变量的类型j不稳定y解决此问题的方法更加灵活

   let
       y = 0.0
       for j = 1:(N::Int)
           y += float( j )
       end
       y
   end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Julia中的线程性能

来自分类Dev

R中循环的性能问题

来自分类Dev

优化R中for循环的性能

来自分类Dev

C ++中循环的性能差异

来自分类Dev

R中循环的性能问题

来自分类Dev

优化R中for循环的性能

来自分类Dev

Julia中的性能分析/内存分配

来自分类Dev

Julia中的FOR循环和范围

来自分类Dev

提高Julia中for循环的速度

来自分类Dev

在Julia中循环。语法混乱

来自分类Dev

向量在C ++中的循环性能

来自分类Dev

提高R中嵌套For循环的性能

来自分类Dev

R中嵌套循环的性能降低

来自分类Dev

Rcpp中单个“ for”循环的意外性能

来自分类Dev

openmp 中嵌套 for 循环的性能改进失败

来自分类Dev

julia中while循环中的print(“”)效果

来自分类Dev

在Julia中的for循环中索引函数的名称

来自分类Dev

如何在Julia中实现递减的for循环?

来自分类Dev

Julia中嵌套循环的并行处理

来自分类Dev

如何在 julia 中管理循环的索引?

来自分类Dev

在julia中尝试catch或类型转换性能-(Julia 73秒,Python 0.5秒)

来自分类Dev

Java中的Break vs Normal循环性能问题

来自分类Dev

在无限循环性能中声明变量类型?

来自分类Dev

在VBA Excel中优化双循环性能

来自分类Dev

在无限循环性能中声明变量类型?

来自分类Dev

C#中ForEach循环的性能改进技巧?

来自分类Dev

Haskell中具有良好性能的简单循环

来自分类Dev

循环性能下降

来自分类Dev

获得循环的最佳性能