chainer以外でのcupyの使用について
アドベントカレンダー8日目です。
今日はcupyについて書いていきたいと思います。
速度比較
今回は、0~300000000までの配列を生成し、それをシグモイド関数に通します。その時の速度を以下の3つで比較します。
- pythonのrangeとmath.exp
def sigmoid(x): temp = x.copy() for i,x in enumerate(x): temp[i] = 1/(1+math.exp(-x)) return temp start = time.time() x = list(range(300000000)) sigmoid(x) print(time.time()-start)
- numpyのarangeとnp.exp
def numpy_sigmoid(x): return 1/(1+np.exp(-x)) start = time.time() x = np.arange(300000000) numpy_sigmoid(x) print(time.time()-start)
- cupyのarangeとcupy.exp
def cupy_sigmoid(x): return 1/(1+xp.exp(-x)) start = time.time() x = xp.arange(300000000) numpy_sigmoid(x) print(time.time()-start)
実行結果
何秒かかったか以下に示します。
80.69074440002441
- numpy
5.5577309131622314
- cupy
0.0005419254302978516
numpyを使うことでかなり早くなってますね。
cupyは異次元です*2。