2017-05-30 158 views
3

我是基准朱莉娅执行速度。我在Julia提示符下执行了@time [i^2 for i in 1:1000],这导致了20毫秒的顺序。这似乎很奇怪,因为我的电脑是现代的,有一个i7处理器(我正在使用Linux Ubuntu)。朱莉娅执行速度

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

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

回答

8

几件事情,看到performance tips

  1. 不要在全局范围内没有标杆。
  2. 不要测量像这样的第一次执行。
  3. 使用BenchmarkTools

Julia是一种JIT编译语言,所以你第一次测量的东西,你测量的是编译时间。这是一个很小的固定开销,因此对于需要相当长时间的任何事情来说,这是微不足道的,但对于像这样的短期运行代码,几乎都是这样。非常量的全局变量迫使编译器几乎不考虑类型,这往往会影响你的所有性能。在某些情况下这很好,但大多数情况下,您应该编写代码,以便输入是函数的显式参数,而不是来自某些全局变量的隐式参数,以及b)不应编写使用可变全局州。

+0

我没有测量第一次执行。 20ms是第二次执行中的执行时间。在Julia教程中,同样的基准测试要求不到1ms。 – NSL

+2

好吧,我现在就明白了。看来,当我在命令提示符下运行它时,它每次都会编译。所以,我在一个* .il文件中的函数中定义了这段代码并调用了函数。事实上,从第二次开始,它在1:100000列表上花费少于1毫秒。谢谢! – NSL

+0

@NSL - 全球空间的基准测试是许多新用户的共同陷阱,因为它包含编译时间,所以总是对除第一次运行之外的函数进行基准测试。也就是说,即使你在带有返回类型注解的REPL中运行这个理解列表,'@time(Int64)[i^2 for i in 1:1000];',这个运行时间约为4μs。请参阅[本JuliaCon 2016年谈话](https://youtu.be/szE4txAD8mk)了解编写好的Julia代码的许多类似技巧的更多细节。 – AboAmmar