【问题标题】:Does python reorder instructions for optimization?python是否重新排序指令以进行优化?
【发布时间】:2021-01-16 08:58:52
【问题描述】:

我知道 C 和 C++ 编译器会重新排序操作(只要 as-if 规则成立)以进行优化。编译后的 python 代码是否会发生类似的情况?

【问题讨论】:

  • Python 是一种解释型语言。您是指为某些函数编译的 C 二进制文件,还是?
  • @anon01 .pyc 文件怎么样?
  • 我不这么认为。刚刚在两个函数上做了dis.dis,只是增加了两个变量,要么在两个变量之间交替,要么在第一个变量之间交替,然后是另一个变量。在这两种情况下,它都会为每个单独的赋值 LOAD_FASTSTORE_FAST,即使它在下一个赋值中再次使用相同的变量。因此,即使行的顺序不同,它也会执行相同的操作,只是顺序不同。

标签: python compiler-optimization


【解决方案1】:

Python 是一种解释型语言。即使您将其“编译”为 .pyc 文件,其中包含字节码,而不是机器指令。

重新排序字节码指令不太可能对性能产生任何影响。每个字节码对应于解释器本身中的许多指令,因此指令重新排序所利用的流水线效果在此高级级别上不可用。

【讨论】:

    【解决方案2】:

    首先,Python 本身既不解释也不编译;一种语言的实现可以是任何一种。

    也就是说,最常见的实现 (CPython)编译您的 Python 源代码。不过,目标不是您的处理器,而是一个虚拟堆栈机器,然后解释生成的字节码。

    重新排序指令是为了利用处理器一次执行多条指令的能力,交错诸如指令获取、数据访问等操作。CPython 实现的堆栈机器并不复杂;单个字节码不能分解成更小的“微指令”,这些“微指令”会受益于您正在考虑的重新排序类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2020-03-30
      • 1970-01-01
      • 1970-01-01
      • 2016-06-23
      • 1970-01-01
      相关资源
      最近更新 更多