CPython 中函数调用的近期性能改进

主要观点:

  • Pritam 在 Leetcode 中发现使用 Python 的min内置函数时代码变慢,内联min后性能提升,引发对 Python 中函数调用成本的讨论。
  • 作者创建 3 个微基准测试来衡量在循环中调用内置函数、Python 函数及内联函数的影响,结果显示 CPython 在这三方面性能显著提升。
  • 详细介绍了 CPython 中导致性能提升的具体优化,如超级指令(super instructions)、指令特化(instruction specialization)、内置函数优化(optimization of builtins)和内联 Python 到 Python 函数调用(inlining Python-to-Python function calls)等。
  • 强调在将研究结果应用于代码之前,应先进行性能分析和测量。

关键信息:

  • 测试的 3 个基准测试代码及相关性能数据。
  • 超级指令通过融合连续字节码指令减少解释器工作和提高 CPU 执行效率。
  • 指令特化将慢的BINARY_OPCOMPARE_OP指令转换为专门指令,减少指针追逐。
  • LOAD_GLOBAL指令优化为LOAD_GLOBAL_BUILTIN避免字典查找。
  • minmax内置函数从tp_call转换为vectorcall提高性能。
  • Python 到 Python 函数调用在 CPython 3.11 中通过内联消除递归调用提高性能。
  • 提到相关的 Python 提案(PEP)、CPython 错误追踪器中的讨论及其他相关资源。

重要细节:

  • 测试代码中各种函数的实现及在不同 CPython 版本下的性能变化情况。
  • 字节码层面的优化细节,如不同版本中字节码指令的差异及优化过程。
  • 各种优化在减少解释器开销、提高 CPU 指令吞吐量等方面的作用。
  • 强调性能分析和测量的重要性,避免盲目应用优化。
阅读 43
0 条评论