0

我正在主目录中构建 python 2.6.6 并尝试优化我正在使用的包的速度和内存使用。阅读此页面,有人说CFLAGS='-g -O2'应该让它更快。

经过一番搜索,我读到这是您传递给编译器的某种标志,但他们没有解释为什么这会优化 python 速度(实际上,其他值似乎优化了其他东西,比如 ruby​​)。

我想更好地理解它,以便在我正在做的事情中获得更多性能,因为目前它需要很多时间。有谁可以解释这些标志是什么意思,在什么意义上它可以提高 python 速度?谢谢

4

2 回答 2

5

-O2 标志指示 C 编译器做出某些优化选择,请参阅GCC 优化标志文档

Python 解释器是用 C 编写的;优化编译器生成的机器代码意味着程序可以运行得更快,因为代码避免了一些常见的速度瓶颈。这不仅仅适用于 Python。

不利的一面是,某些激进的优化可能会引入错误或降低速度,因为为这些优化所做的假设结果不正确。不同程序的工作方式不同;如果没有深入了解优化的作用,也没有完整的测试套件来捕捉引入的任何问题,您应该远离这些标志,除非有这些知识的人告诉您使用优化设置。

你最好专注于优化你自己的 Python 代码;那里有更大的收获。分析您的代码,重新考虑数据结构,如果需要,将 C 中的部分重写为 Python 扩展。有时,您正在处理的问题空间的一个事实是某些任务需要时间。

于 2013-08-05T12:03:26.933 回答
2

-O是启用编译器优化的通用编译器标志。这些优化由编译器执行以提高性能,特别是与根本没有任何优化相比。但是,优化会增加编译时间,并且某些优化可能会使最终代码变得更大。

在 GCC 系列编译器中,-O后面可以跟一个字母或数字,指定要执行的优化级别。默认没有优化(对于最快的编译)。-O是基本优化;-O2是更多的优化,并且-O3是激进的(有时是不安全的)优化。大多数项目的通常水平是-O2因为它提供了良好的性能改进,而不会显着增加代码大小或潜在地引入错误。此外,您可以-Os改为使用最小化代码大小,而不是旨在提高代码速度。

值得注意的是,大多数已发布的 Python 构建都已经进行了某种程度的优化,因此您不太可能通过构建自己的构建来获得巨大的性能提升。如果程序很慢,您可以进行算法更改以使程序运行得更快。

-g意思是生成调试信息,使调试Python变得更容易。除非您正在为 Python 开发,否则不需要它,但离开也不会受到伤害(除了使最终的二进制文件更大一点)。

于 2013-08-05T12:02:23.347 回答