python - C 运行速度比 PyPy 慢
问题描述
我正在运行这两个代码。它们都执行相同的数学过程(计算大项的序列值),并且正如预期的那样,产生相同的输出。
但出于某种原因,PyPy 代码的运行速度明显快于 C 代码。
我无法弄清楚为什么会发生这种情况,因为我希望 C 代码运行得更快。
如果有人能帮助我澄清这一点,我将不胜感激(也许有更好的方法来编写 C 代码?)
C代码:
#include <stdio.h>
#include <math.h>
int main()
{
double Sum = 0.0;
long n;
for(n = 2; n < 1000000000; n = n + 1) {
double Sign;
Sign = pow(-1.0, n % 2);
double N;
N = (double) n;
double Sqrt;
Sqrt = sqrt(N);
double InvSqrt;
InvSqrt = 1.0 / Sqrt;
double Ln;
Ln = log(N);
double LnSq;
LnSq = pow(Ln, 2.0);
double Term;
Term = Sign * InvSqrt * LnSq;
Sum = Sum + Term;
}
double Coeff;
Coeff = Sum / 2.0;
printf("%0.14f \n", Coeff);
return 0;
}
PyPy 代码(Python 的更快实现):
from math import log, sqrt
Sum = 0
for n in range(2, 1000000000):
Sum += ((-1)**(n % 2) * (log(n))**2) / sqrt(n)
print(Sum / 2)
解决方案
这PyPy
并不奇怪,默认情况下会进行许多运行时优化,而默认情况下C
编译器不执行任何优化。Dave Beazley 的2012 PyCon Keynote非常明确地涵盖了这一点,并深入解释了为什么会发生这种情况。
根据引用的谈话,在使用优化级别编译时C
应该超过或(您可以在此处观看关于斐波那契生成性能的完整部分,并从此处开始)。PyPy
2
3
cpython
pypy
C
推荐阅读
- google-cloud-pubsub - 在 pubsub 服务中处理 SIGTERM 和 SIGINT 信号的最佳方法是什么?
- python-3.x - Python Selenium 循环遍历表元素
- machine-learning - 在 Triplet loss 中增加 alpha 有什么缺点吗?
- python - 使用 html 进入 url 并抓取表格
- python - 在bash中传递带有星号的路径名作为python脚本的参数
- amazon-web-services - AWS Amplify 控制台不构建 Nuxt 项目 - 在验证步骤中创建空白屏幕
- java - 想要从特定单词打印文本直到该段落的结尾或直到该行为空
- amazon-web-services - 如何为 CfnDistribution 添加 Route53 别名?
- python - “配置不完整”安装opencv贡献
- python - 语法来修改字典中的键以便理解