慢茱莉亚启动时间

时间:2013-09-25 16:02:47

标签: python optimization julia

我正在探索使用Julia作为通用科学计算语言(而不是python),但它的启动时间非常缓慢。

有没有办法加快速度?

$ time python -c 'print "Hello"'
Hello

real    0m0.030s
user    0m0.018s
sys 0m0.010s

$ time julia -e 'println("Hello")'
Hello

real    0m4.614s
user    0m4.644s
sys 0m0.116s

ADDENDUM Here是去年朱莉娅作家之一的引用。这个策略有些困难吗?

  

Julia的大部分都是自己编写的,然后进行解析,类型推断和   jitted,所以从头开始引导整个系统需要一些   15-20秒。为了加快速度,我们有一个分阶段的系统   解析,类型推断,然后缓存序列化版本   文件sys.ji中的类型推断AST。然后加载此文件   用于在运行julia时运行系统。没有LLVM代码或机器   但是,代码缓存在sys.ji中,因此所有LLVM jitting仍然需要   每次朱莉娅启动时都要完成,因此需要大约2个   秒。

     

这个2秒的启动延迟非常烦人,我们有一个计划   修理它。基本计划是能够编译整个Julia   程序到二进制文件:可以运行的可执行文件或.so / .dylib   可以从其他程序调用的共享库,就像它们一样   只是共享C库。二进制文件的启动时间是   像任何其他C程序一样,2秒启动延迟将消失。

2 个答案:

答案 0 :(得分:7)

不幸的是,Julia目前使用了大量的时间来启动,所以几乎不可能在bash脚本中使用它来解决真正的小问题。你可能会得到一个更有利于julia的结果,一个复杂的例子使用循环来做多次事情,但是在2-4秒的启动时,需要一个大问题才能有足够的时间赶上。如果启动时间对于您的科学计算来说是最重要的,那么Julia还没有准备好。

同样不公平的比较是使用愚蠢的递归公式来计算斐波纳契数。如果你超过26,它会变得更糟。还要注意代码的Julia版本是多么紧凑。

>>> ivarne~/dev/julia$ time julia -e 'fib(x) = x<2?1:fib(x-1)+fib(x-2);println(fib(36))'
24157817

real    0m2.763s
user    0m2.776s
sys     0m0.093s
>>> time python -c $'def fib(x):\n    if x<2: return 1\n    else: return fib(x-1)+ fib(x-2);\nprint fib(36)'
24157817

real    0m8.371s
user    0m8.336s
sys     0m0.025s

当你要求加快问题的方法时;这是:

>>> time echo "Hello"
Hello

real    0m0.000s
user    0m0.000s
sys     0m0.000s

答案 1 :(得分:7)

我在评论中提到的branch现已合并,julia比以往任何时候都更适合启动(并且什么都不做)。

$> time julia -e 'println("Hello")'
Hello

real    0m0.622s
user    0m1.013s
sys     0m0.624s

现在可在夜间版本中使用,并将包含在下一个0.3版本中。