【发布时间】:2014-10-06 10:49:49
【问题描述】:
我在 Python 中编写了以下简单循环。它使用浮点加法和乘法来对 0 到 1.0e9 - 1 之间的整数的平方求和。(这是一个玩具示例,但我相信它代表了我目前正在编写的代码)。
a = 0.0
i = 0.0
while i < 1.0e9:
a += i * i
i += 1.0
print a
在我的机器上,使用 32 位 CPython 2.7.8,这需要 400 秒才能运行。等效的 C++ 代码(如下)运行时间不到 2 秒,等效的 Go 代码运行时间不到 3。
double a = 0.0;
for(double i = 0.0; i < 1.0e9; i += 1.0) {
a += i * i;
}
std::cout << a << std::endl;
由于我的代码需要分发给可能除了 CPython 之外没有安装任何其他东西的最终用户,我无法使用 PyPy 或 NumPy 来加速 Python 代码。
我还能做些什么来提高 Python 代码的性能,或者对于繁重的算术工作,CPython 通常会比 C++ 和 Go 慢 100 倍吗?
【问题讨论】:
-
您使用浮点数表示始终为整数的值是否有特殊原因?
-
@WilliamMcBrine - 我对浮点性能感兴趣。在我的实际项目代码中,这些值很少是整数。
-
@PaulBaker 在这种情况下,Paul,对于这个社区来说,设计一个更具代表性的示例来用于 StackOverflow 主持的研究和讨论是公平的。这样您就可以获得正确的答案,但是对于一个主题,这不是您将在项目中使用的主题,从而导致您的问题所付出的所有努力都被浪费了。您可能想要定义您的任务目标和优先级,以便更好地匹配您的应用程序/问题域。
标签: python c++ performance optimization