首页 > 解决方案 > 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)

标签: pythonc

解决方案


PyPy并不奇怪,默认情况下会进行许多运行时优化,而默认情况下C编译器不执行任何优化。Dave Beazley 的2012 PyCon Keynote非常明确地涵盖了这一点,并深入解释了为什么会发生这种情况。

根据引用的谈话,在使用优化级别编译时C应该超过或(您可以在此处观看关于斐波那契生成性能的完整部分,并从此处开始)。PyPy 23cpythonpypyC


推荐阅读