Cythonを使ってPythonのコードを高速化します。
Cythonのインストール
pip3 install cython
コンパイル
cythonのインストールが終わったら、スクリプトをc言語にコンパイルするために、以下のsetup.py
を用意します。
(ext_modules = [Extension('tsp', ['tsp.pyx'])]
のExtensionの中身はコンパイルするスクリプト名によって随時書き換えます。)
コンパイルの手順としては、
1. 対象スクリプトの拡張子をリネーム(.py -> .pyx)
1-α. cython用にスクリプトを書き換える(さらなる高速化のため)
2. python3 setup.py build_ext --inplace
を実行
です。
(手順1)
まず、前回の記事のtsp.pyをtsp.pyxにリネームします。(関数以外の部分は消しています)
次にとりあえず手順1-αをすっ飛ばして手順2のpython3 setup.py build_ext --inplace
を実行します。
すると、以下の2つのファイルが生成されます。
・tsp.cpython-35m-darwin.so
・tsp.c
これらができていたらコンパイルは無事終了です。pyhtonの対話モード等でimport tsp
でtsp関数の読み込みができます。
(注意)
tsp.cpython-35m-darwin.soはコンパイルを実行した環境に依存しているので、
使用する環境下でそれぞれコンパイルをする必要があります。
これでどれだけ速くなっているかというと
20ノードからなるグラフで計測
プログラム | 計測時間(s) | 比 |
---|---|---|
もともと | 49.59 | 1 |
コンパイル済み | 41.91 | 0.85 |
これだけでも高速化はできていますが、 変数に静的な型付けを行うことでさらに高速化することができます。(というか、これがcythonのメイン)
それはまた次の記事で。