CPython提速实施方案

2020-10-20 22:46:20

PermalLink GitHub是5000多万开发人员的家园,他们一起工作,共同托管和审查代码、管理项目和构建软件。

报名。

我们的总体目标是将CPython的速度提高(大约)5倍,我们的目标是分四个不同的阶段来实现这一目标,每个阶段将CPython的速度提高(大约)50%。

每个阶段将以CPython的单独版本为目标。更快的时间表是可能的,但我们认为可预测和可靠的性能改进比挤出每个版本的最大性能更重要。当然,软件开发中的延迟太常见了,因此可能需要跳过一个版本。

出于安全原因,一些平台不允许运行时代码生成。这方面的主要例子是苹果移动设备的iOS平台。只有前两个阶段才能在这些平台上提高性能。

对于这些平台,X5加速是不可能的,但是速度应该可以翻倍。

最终目标是有几个执行层,每个执行层都根据程序的某个子集进行定制。

3.10的关键改进将是一个自适应的、专门化的解释器。解释器将在执行过程中适应类型和值,利用程序中的类型稳定性,而不需要运行时代码生成。

此阶段将对运行时和关键对象进行许多改进。第二阶段的特点是大量调整,而不是任何改进。计划的改进包括:

SIMPLE";JIT&34;编译器适用于小区域。使用相对简单、快速的编译器编译小区域的专用代码。

CPython是使用开放源码的协作模型开发的,这意味着实现中的任何复杂性都应该是可以理解的,并且可以由作者以外的其他人进行维护。为此,我们将:

在C或Python中不可能的地方,使用代码生成器来分离关注点。例如:

性能应该是合理的可预测的,并且不会因为程序或数据的微小改变而大量改变。所有代码的性能都应该提高,而不仅仅是循环繁重的数字代码。

例如,1 000 000个整数的列表和999999个整数的列表和1个无的列表的迭代速度和内存使用应该足够接近,以至于不容易测量差异。这并不是说在同质列表上的迭代不能比异质列表的迭代速度快,而是说在性能上不应该有尖锐的边缘。

不能保证优化的代码会运行,也不能保证代码整齐地归入";HOT";和";COLD";类别。为了防止性能急剧下降,将代码从一层提升到下一层的速度必须很快。

快速编译并不是没有代价的。生成的代码的质量可能会降低。循环繁重和数值代码的性能可能比重量级优化器的性能更差,但应用程序代码的性能应该更健壮。

目前,通过提供通用跟踪接口sys.settrace来支持Python中的调试和性能分析。为了避免在高性能解释器中尝试支持这种通用跟踪的复杂性,我们计划提供一个API,用于在运行时将调试和性能分析点插入字节码。这可以合并到第1层解释器的加速阶段,允许以接近全速的速度调试代码,以与CPython3.9相当的速度进行性能分析,而无需性能分析。