psyco

http://psyco.sourceforge.net/
http://ja.wikipedia.org/wiki/Psyco
pythonJITコンパイラのpsycoを試してみた(python2.6)

def fibo(num):
  if num < 2:
    return 1
  return fibo(num - 2) + fibo(num - 1)

print fibo(40);

よくあるフィボナッチ数を計算する関数。

$ time python fibo.py
165580141

real 1m0.457s
user 0m0.015s
sys  0m0.000s

うちの環境だとこれで大体1分程度。
ここにpsycoを用いると…

import psyco  # ここ
psyco.full()  # ここ

def fibo(num):
  if num < 2:
    return 1
  return fibo(num - 2) + fibo(num - 1)

print fibo(40);

先頭に2行追加するだけ!

$ time python fibo.py
165580141

real 0m4.500s
user 0m0.015s
sys  0m0.015s

速っ!本当に10倍以上速くなった。これはいい。

後書き

  • psycoはクラス/関数の定義時にJITするのでimportしたモジュールに対しては効果を発揮しない
  • 主に整数/浮動少数の最適化を行うのでそこに負荷がかかってなければさほど高速にはならない。

向き不向きがあるようですね。

後書き2

  • python3.1(psycoなし)で1m6.094s。ただの2.6よりも遅いんですね。まだ3.xへの移行は必要ないかな〜。