Python, Cython, Numba, TensorFlowの処理速度比較

Python, Cython, Numba, TensorFlowで、処理速度を比較してみた。未完成感あるけれど、いったん今日時点での結果を記録しておく。

github.com

原点を中心とした半径 1 の円の、x, y ともに正である領域(四分の一円)を考えると、その面積は  \frac{\pi r^{2}}{4} = \frac{\pi}{4} ということで円周率の四分の一である。続いて、この領域の x 軸と接している辺を n 等分した点それぞれから垂線 (a) を、円弧に到達するまで y 軸正方向に垂線を引く。ここで、各 (a) を高さ、\frac{1}{n} を幅とする長方形群を考えると、それらの面積の総和は n を大きくすればするほど四分の一円の面積に近づいていく。この区分求積法の考え方でもって円周率を求める処理を、Python, Cython, Numba, TensorFlow (GPU), TensorFlow (CPU) で実装して実行速度を比較した。

今回の実装では、Numba の優秀さが際立つ結果となった。TensorFlow での GPU 演算では演算が軽すぎるのか、GPU へのメモリー転送コストによってか CPU 使用時の方が速かったりする結果となっている。

TensorFlow だけは、まだ理解できた感覚が無い。もう少し、細かく見てみたい。