繁体   English   中英

慢茱莉亚启动时间

[英]Slow Julia Startup Time

我正在探索使用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

附录是朱莉娅去年的一位作者的引用。 这个策略有些困难吗?

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

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

不幸的是,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

我在评论中提到的分支现在已经合并,julia比以往更加优化启动(并且什么都不做)。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM