PyPyがCより速いケース
パイパイ(この名前ちょっとヤバいね)は場合によってはCより速いコードを生成することがあるという例。決してPyPyが一般的にCより速いと主張しているわけでないない。
http://morepypy.blogspot.com/2011/02/pypy-faster-than-c-on-carefully-crafted.html
どうしてこういうことになるかというと、Cはモジュール(.o)の壁を越えて関数をインラインすることができないからだ。JITはそんなものおかまいなしにインラインすることができる。動的最適化の利点だ。
Python
x.py
y.py:
def add(a, b):
return a + b
from x import add
def main():
i = 0
a = 0.0
while i < 1000000000:
a += 1.0
add(a, a)
i += 1
main()
C
x.c
double add(double a, double b)
{
return a + b;
}
y.c
double add(double a, double b);int main()
{
int i = 0;
double a = 0;
while (i < 1000000000) {
a += 1.0;
add(a, a);
i++;
}
}
Cに不利な状況を無理して作った感じだ。
結果
1.97s - PyPy
3.07s - C