【问题标题】:Julia speed of execution朱莉娅执行速度
【发布时间】:2017-05-30 13:31:59
【问题描述】:

我正在对 Julia 的执行速度进行基准测试。我在 Julia 提示符下执行了@time [i^2 for i in 1:1000],这导致了大约 20 毫秒的时间。这看起来很奇怪,因为我的电脑是现代的,配备 i7 处理器(我使用的是 Linux Ubuntu)。

另一个奇怪的事情是,当我在1:10 的范围内执行相同的命令时,执行时间是 15 毫秒。

这里一定有一些微不足道的东西吗?

【问题讨论】:

    标签: julia


    【解决方案1】:

    几件事,见performance tips

    1. 不要在全局范围内进行基准测试。
    2. 不要衡量此类事情的第一次执行。
    3. 使用BenchmarkTools

    Julia 是一种 JIT 编译语言,因此在您第一次测量事物时,就是在测量编译时间。这是一个很小的固定开销,因此对于任何需要大量时间的东西,它可以忽略不计,但对于像这样的短期运行代码,它几乎是所有时间。非常量全局变量迫使编译器对类型几乎不做任何假设,这往往会损害您的所有性能。在某些情况下这很好,但大多数时候,您 a) 应该编写代码,以便输入是函数的显式参数,而不是来自某些全局变量的隐式参数,并且 b) 不应该编写使用可变全局的代码状态。

    【讨论】:

    • 我没有测量第一次执行。 20ms 是第 2 次及以后的执行时间。 Julia 教程中声称相同的基准测试耗时不到 1 毫秒。
    • 好的,我现在知道了。似乎当我在命令提示符下运行它时,它每次都会编译。因此,我在 *.il 文件中的函数中定义了这段代码并调用了该函数。事实上,从第二次开始,在 1:100000 列表上花费的时间不到 1 毫秒。谢谢!
    • @NSL - 在全局空间中进行基准测试是许多新用户的常见陷阱,总是对函数进行基准测试,不包括第一次运行,因为它包括编译时间。也就是说,即使您在 REPL 中使用返回类型注释 @time (Int64)[i^2 for i in 1:1000]; 运行这个理解列表,它也会在大约 4μ sec 中运行。请参阅this JuliaCon 2016 talk,了解有关编写良好 Julia 代码的许多类似技巧的更多详细信息。
    猜你喜欢
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 2014-02-04
    • 2014-12-31
    • 2017-01-15
    • 2016-02-18
    相关资源
    最近更新 更多