LLVM是什么?将Python虚拟机替换为LLVM如何使速度提高5倍?

26

谷歌正在赞助一个开源项目,旨在将Python速度提高5倍。

Unladen-Swallow似乎有一个好的项目计划

为什么并发是一个难题?
LLVM是否将解决并发问题?
除了多核硬件升级,还有其他解决方案吗?


2
那不是一个问题。我看到至少三个,可能四个。 - Devin Jeanpierre
你想让我一个一个地问吗?它们在某种程度上都有关联,不是吗? :) - lprsd
“Py3k似乎已经解决了内存占用问题(通过返回迭代器而不是列表); 现在如果LLVM解决速度问题呢?”有一种隐含的问题...但它并不清楚是什么。是的,这里有太多问题了! - TofuBeer
@TofuBeer:编辑了最后一部分并将其删除,它可能更适合不同的问题。 - lprsd
3个回答

32

LLVM是几个部分的结合体-一种虚拟机/优化编译器,结合不同的前端,以特定语言输入并输出结果到中间语言。这种中间输出可以与虚拟机一起运行,也可以用于生成独立的可执行文件。

并发编程的问题在于,虽然它在科学计算中已被使用很长时间,但最近才在消费应用程序中变得普遍。因此,尽管人们广泛知道如何编写科学计算程序以实现出色的性能,但编写邮件用户代理/文字处理器以实现良好的并发性能完全是另一回事。而且,大多数当前的操作系统都是针对单处理器设计的,它们可能没有完全为多核处理器做好准备。

LLVM相对于并发性的好处在于你有一个中间输出,如果未来有关并发方面的进展,那么通过更新你的解释器,您即可立即获得所有LLVM编译程序中的这些好处。如果您编译成独立的可执行文件,则不太容易做到这一点。因此,LLVM本身并不能解决并发问题,但它为未来的增强留下了一扇开放的大门。

当然,硬件方面还有更多可能的进步,如量子计算机、基因计算机等。但我们必须等待它们成为现实。


3
@Ismael:我认为这不是科学与非科学应用程序的问题。真正的问题在于语言和操作系统对并发编程的支持不好,一些人愿意更加努力地克服这种对并发性的不良支持。 - S.Lott
@Lott:是的,你说得对。虽然有一些工具可以考虑并发编程,但它们很难使用,需要付出大量的努力。 - Ismael

17

转向LLVM本身并不能解决并发问题。 该问题正在通过另外一种方式解决,即消除全局解释器锁定

我不确定自己对此感觉如何; 我主要使用线程来处理阻塞I/O,而不是利用多核处理器(为此,我会使用multiprocessing模块来生成单独的进程)。

因此,我有点喜欢全局解释器锁定; 它使我的生活变得更加轻松,不必考虑复杂的同步问题。


9
如果他们能够除去GIL但确保你希望是原子操作的一切仍然是原子操作,那么最坏的情况下对你没有影响,并且在某些情况下可能会提高你的应用程序性能。 - John Fouhy

15

LLVM负责代码生成的琐碎细节,因此它使得他们可以以更通用、可移植和可维护的方式重写Psyco。这反过来又使他们能够重写CPython核心,从而使他们能够尝试使用备用GC和其他必要的东西来改善Python对并发的支持。

换句话说,LLVM并没有解决并发问题,而是释放了你的手让你自己去解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接