サブロウ丸

Sabrou-mal サブロウ丸

主にプログラミングと数学

Cython その2 変数の型付け

Cython その1 - サブロウ丸

前回からの続きです。
cython tsp.pyx --annotate もしくは cython tsp.pyx -a を実行すると
tsp.html というファイルが作られます。

tsp.html · GitHub
これをブラウザ等で開くと
f:id:inarizuuuushi:20170206223331p:plain
という、画面が出てきます。
簡単に言うと、濃い黄色の部分がpythonからcに変換するときにcになりきっていない部分です。すなわちcythonでcに変換してもそれほど高速化されていない可能性がある箇所になります。

例えばpythonでは、ただa+bを実行するだけでも、a, bは文字列かintかfloatか、はたまたそれ以外の何かかをいちいちチェックするので、変数の型が分かっている場合にはその作業が無駄になります。
cythonは変数の型が推測できる場合は、型をつけてくれますが、多くの場合は自分で変数の型を宣言しなくてはなりません。そうして変数に型をつけることで高速化を図るのです。

やり方は以下の通りです。


6~8行目がそれになります。これをつけるだけで、どれだけ高速になるかというと、
(20ノードからなるグラフで計測)

プログラム 計測時間(s)
もともと 49.59 1
コンパイル済み 41.91 0.85
型付け 13.42 0.26


となります。4倍も高速になっていますね(!!)。アノテートを見てみても、黄色い部分が減っていることが分かります。 f:id:inarizuuuushi:20170206225152p:plain


もう少しだけ、cythonの型付けの話をします。次回の記事にて..