自称ASIC設計者です。どなたかkaggle一緒に出ましょう。2017-12-02CupyとNumpyのパフォーマンスを比較してみたPythonGPUで、Numpy互換のAPIで行列計算ができるCupyは活発に更新されています。sortやinv、最近はsparseまで、numpy(とscipy)の機能の多くをカバーするようになってきて、numpyの代用になりえるものになってきたと思います。そこでどれだけの機能がサポートされているのか、そして、GPUで計算することにより、どれだけ、速くなるのか?調べてみました。サポートされているAPI数の比較ざっくりとした調べ方になりますが、inspect.getmembers()でcupyとnumpyのメンバ数を調べてみます。inspect.isfunction(mem[1])])121ということで、numpy.***のメンバは269存在するのに対し、cupy.***のメンバは121存在するので、だいたい半分くらいの機能がサポートされている、ということになります。print(only_numpy)でリストアップすることができます。(長いので記事には書きませんが。続きまして、肝心の計算時間を比較してみます。8.0)cupyは最初に使う関数はコンパイルされて計算時間が長くなりますが、以後はコンパイル結果がキャッシュされるので、キャッシュ入手後の状態で計測しています。CUDA9使えばよりCupy有利な計算時間じなります。numpyの計算時間はtimeモジュールを使って計測します。msec".format(elapsed))cupyはcupy.cudaを使って計測する必要があります。end)の出力はmsecであることに注意。GitHubに置きました。基本的にGPUは並列して計算ができればできるほど(CPUと相対的には、)速く動作します。行列の要素数を変えながら計算時間調べました。0.1261561584さすがにElementwiseな計算は得意そうです。10000要素以上の行列では圧倒的にcupyが速い。11.64886713037.236550293さすがにreduce演算は苦手そうです。これらの演算が主体の計算はcupyではあまり速くならないでしょう。2.9332293701速くなるのは1000000要素を越えてからのようです。einsumは色々できるのですが、今回は'...i,...j->...ij'の計算をしました。残念ながら場合によってはnumpyよりも遅くなる演算もあります。0.01114368440.0131529605配列のコピーでしか無いので、GPUで劇的に速くなることはないでしょう。176.522305011830.7312646484sortとか苦手でしょ?と思ったら意外とcupyやりおる。88.9207128906eighは速くはならず、invはちょい速い程度。»プロフィールid:segafrederverilog書いたり、でもPythonが好きだったり、そんな人の日記。月別アーカイブはてなブログをはじめよう!segafrederさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。