为什么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()

此代码段只执行 ~0.1s ,为什么会这样?

2 个答案:

答案 0 :(得分:7)

原因是全局变量可以在任何时候更改其类型,这使编译器难以优化。这在Performance Tips section of the manual中提到。

答案 1 :(得分:3)

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

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

事实证明,此代码段也在 ~0.7s 中运行。

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

test_arithmetic()