Numba を使ってみる2016年2月14日 | |
はじめにPython の JIT コンパイラ Numba を使ってみたメモ。元ネタは Micha Gorelick, Ian Ozsvald 著 "ハイパフォーマンス Python"。 環境
※MinGW にも Python が入っているので、Anaconda のほうを使うようにパスを設定している。 Numba は Anaconda を提供している Continuum Analytics が提供しているもので、Anaconda に含まれている。バージョンは 0.23.1。 サンプルコードサンプルコードは こちら から入手。 ここでは以下のものを用いる。 01_profiling/cpu_profiling
Numba の利用Numba を利用するには、利用したい関数にデコレータ "@jit" を付ける。 from numba import jit ... @jit def calculate_z_serial_purepython(maxiter, zs, cs): ... これだけ。ただし、julia1_nopil.py では "calculate_z_serial_purepython.func_name" が用いられているが、デコレータを用いるとこれが使えなくなるので、直接関数名の文字列で置き換える。 オリジナル版の実行結果 $ python julia1_nopil.py Length of x: 1000 Total elements: 1000000 calculate_z_serial_purepython took 12.0959999561 seconds Numba 版の実行結果 $ python julia1_nopil_numba.py Length of x: 1000 Total elements: 1000000 calculate_z_serial_purepython took 1.08400011063 seconds これだけで結構速くなった。 推論された型を表示するには、次のようにする。 import numba ... @jit def calculate_z_serial_purepython(maxiter, zs, cs): ... print("type: %s" % numba.typeof(zs)) 次のように表示される。 type: reflected list(complex128) 型が間違っていれば、正しく推論できるようなヒントを与えればよい。また、直接型を指定することもできる。 注意点Numba はリスト内包表記に対応していない (いまのところ?)。 参考文献 | |
PENGUINITIS |