gpt4 book ai didi

python - Python生态系统中是否有与C++编译器优化等效或类似的机制?

转载 作者:太空宇宙 更新时间:2023-11-03 20:46:31 25 4
gpt4 key购买 nike

这个问题源自这个post还有这个post

C++ 编译器在优化时能够丢弃以下函数。

void function()
{
long long number = 0;
long long problemSize = 100;

for( long long i = 0; i < problemSize; ++i )
{
number++;
number--;
}
}

Python生态系统中是否有等效或类似的机制?

work = 1
for x in xrange(problemSize):
work += 1
work -= 1

最佳答案

CPython引用解释器没有这样的功能;它拥有的优化器极其有限,一般无法进行语句间优化;由于优化器正在查看 work -= 1,所以它完全忘记了 work += 1

Cython 可能能够也可能无法对此进行优化;我怀疑它本身不会,但如果正确声明类型,编译 Cython 生成的代码的 C 编译器可能能够消除未使用的代码。

对于其他解释器(PyPy、Jython、IronPython),这一切都取决于其 JIT 编译引擎的质量。如果代码只执行一次,他们就不会费心对其进行 JIT,但如果是热代码,执行多次,则可能能够消除循环。

在 Python 中执行此操作比较困难,主要是因为即使是像您所表达的那样简单的循环也可能会产生不可预测的副作用。当然,从表面上看,删除循环是安全的(如果稍后没有从 x 读取任何内容),但总是可以用 xrange 替换来进入循环,无论是在模块全局或内置范围,并且替换可能会产生明显的副作用。如果不简单地忽略 xrange 被替换的可能性(如 Cython 所做的那样)或编译在 xrange 不被替换时有条件执行的代码,则几乎不可能对代码进行静态编译。替换(谨慎的 JIT 必须这样做)。

关于python - Python生态系统中是否有与C++编译器优化等效或类似的机制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56553814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com