2013-09-25 35 views
10

我正在探索使用朱莉娅作为通用科学计算语言(而不是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 

附录Here是从去年朱莉娅作者之一的报价。这个策略有没有困难?

大多数朱莉娅写入本身,然后解析,类型推断和 即时编译,因此从头自举整个系统需要一些 15-20秒。为了加快速度,我们有一个分阶段系统,我们在这个系统中解析,类型推断,然后在文件sys.ji中缓存一个序列化版本的 类型推断的AST。然后加载该文件,并在运行茱莉亚时使用该文件运行系统。没有LLVM代码或机器 代码被高速缓存在sys.ji中,但是,所有LLVM jitting仍然需要 在每次启动julia时完成,因此需要大约2 秒。

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

+0

现在Julialang存储库中有一个分支可以检出。 https://github.com/JuliaLang/julia/pull/4898。可能还有一些问题仍然存在,所以请自行承担风险。它可能会包含在即将发布的0.3版本中。 – ivarne

回答

7

我在注释中提到的branch现在已经合并,Julia是用于调试(无所事事)更优化,比以往任何时候。

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

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

这是现在夜间的版本,并将包括在下一个0.3版本。

+0

'''时间朱莉娅-e '的println( “你好”)' 你好 真正1m35.137s 用户0m0.328s SYS 1m33.604s ''' ,我在茱莉亚0.5.0这是一款带有16GiB RAM而不是覆盆子pi的核心i3机器! –

+0

似乎你的朱莉娅安装有些问题。你使用的是什么操作系统,你是如何安装朱莉娅 – ivarne

+0

我使用的是Ubuntu 16.04.1 LTS。我从“.tar.gz”文件安装它。 –

7

不幸的是,Julia目前使用大量的时间来启动,所以几乎不可能在bash脚本中使用它来处理非常小的问题。你可能会得到一个更有利于朱利亚的结果,这个复杂的例子多次使用循环来做事情,但如果以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 
+0

我不确定比较应该证明什么。 Python版本是buggy - 两个版本甚至不计算相同的数字! - 如果你关心的是紧凑性,你可以写成'fib = lambda x:1 if x <3 else fib(x-1)+ fib(x-2)',尽管通常Python程序员关心正确性和清晰度字符。 – DSM

+0

我试图证明,当您比较Julia和Python之间的性能时,结果高度依赖于您执行的任务。 – ivarne

+2

我没有试图找到最有效的回声; -PI只是想知道最新的技术是如何降低茱莉亚的开销 –