【问题标题】:Why does Julia run a function faster than the non-function equivalent?为什么 Julia 运行函数的速度比非等效函数快?
【发布时间】:2014-03-12 07:53:29
【问题描述】:

所以,今天我决定尝试 Julia,但我遇到了一些奇怪的事情,我无法完全理解原因,也无法通过搜索查询找到合适的答案,所以我在这里......

首先,我希望有一些东西可以用来对 Python 进行基准测试,因此我选择了这段非常简单的代码。

def test():            
    start = time()     
    a = 1              
    while a < 10000000:
        a+=1           
    print(time() - start)

在我的机器上用 Python 3.3 执行这需要大约 0.9 秒。然后我在 Julia 中运行了以下代码。

start = time()
a = 1
while a < 10000000
    a+=1
end
print(time() - start)

执行需要 ~0.7s。所以我得出结论,Julia 中的简单算术性能对 Python 来说是 ~=。

然而,当我把它变成一个函数时,我偶然发现了一个我没有预料到的奇怪现象,这让我的结果发生了变化。

function test_arithmetic()
    start = time()
    a = 1
    while a < 10000000
        a+=1
    end
    print(time() - start)
end

test_arithmetic()

这个coden-p只用了~0.1s执行,这是为什么呢?

【问题讨论】:

    标签: julia


    【解决方案1】:

    原因是全局变量的类型可以随时更改,这使得编译器难以优化。 Performance Tips section of the manual中提到了这一点。

    【讨论】:

      【解决方案2】:

      我找到了答案,它与存储局部变量相比全局变量如何更快有关。

      可以在 here 中找到 Python 的等效问题(这导致我测试是否同样适用于 Julia)。

      原来这个code-sn-p也能在~0.7s内运行。

      function test_arithmetic()
          start = time()
          global a = 1
          while a < 10000000
              a+=1
          end
          print(time() - start)
      end
      
      test_arithmetic()
      

      【讨论】:

        猜你喜欢
        • 2018-05-15
        • 1970-01-01
        • 2015-10-27
        • 2020-05-14
        • 1970-01-01
        • 2013-05-17
        • 1970-01-01
        • 1970-01-01
        • 2011-08-27
        相关资源
        最近更新 更多