RubyKaigi 2018 で Cumo の話をしてきた

RubyKaigi 2018 で Ruby Association の助成を受けて開発していた(そして、現在も開発を継続している) Cumo という Ruby 用の CUDA を用いた行列演算ライブラリの話をしてきたので資料をおいておきます。

Ruby 界隈では Python 界隈ほど数値演算をしている人たちはいないので、なぜそもそも GPU が必要なのか、から CUDA プログラミングの基礎も含めて説明しているので、CUDA プログラミングをやったことがない人でも安心してご参照いただけます。





大きな成果としては Chainer の Ruby port 実装である red-chainer の mnist example において、Numo (Cumo の元となった CPUを使う行列演算ライブラリ)を使う場合と比較して75倍の速度向上が見られました。 Ruby 3 は3倍の速度を謳っていますが、Cumoは75倍でした。75倍でした。

Cumo の開発は個人で趣味の時間で行っており、まだまだ道半ばです。開発に興味がある人は自分にお声がけしてくれれば Contributor を増やしたいので開発方法から伝授します。また援助も募集しています。具体的には GPU の CI サーバ代金が欲しい。。。 よろしくお願いいたします。

https://github.com/sonots/cumo 

pybind11 に contribution した

最近業務で C++ のコードを書いて pybind11 で python binding を作っている。
バグにヒットしたので Issue 投げて、そのあと PR 送った。
2週間ぐらい反応がなくて pybind11 大丈夫なのか、と不安になったけど、マージされた。

https://github.com/pybind/pybind11/pull/1371

pybind11は黒魔術感が強くてアレゲなんだけど、C++ のコードに対してサクッと python binding を書くのには便利。
Ruby にはこういうのがなくて(あったら教えてください)、C++ のコードに binding を作るには一度 C でラップする必要があるので、何か似たようなものがあると便利そう。いつか。

valgrind --tool=callgrind で CPU profiling

とにかく gprof が使いにくいので他に何か、Mac なら Instruments があるんだけどな、と思ったら valgrind に callgrind があるのだった。


Install

Ubuntu:

$ sudo apt-get install valgrind kcachegrind

Mac:

$ brew install valgrind qcachegrind


How to run

$ valgrind --tool=callgrind ./a.out

callgrind.out.<PID> のようなファイルが生成される。

kcachegrind (or qcachegrind for mac) で可視化できる。

$ kcachegrind callgrind.out.26180

GUI環境が必要 (もしくは graphviz 出力)


How it looks like

Google it https://www.google.com/search?q=kcachegrind&tbm=isch

A Ruby and Fluentd committer working at DeNA. 記事本文および記事中のコード片は引用および特記あるものを除いてすべて修正BSDライセンスとします。 #ruby #fluentd #growthforecast #haikanko #yohoushi #specinfra #serverspec #focuslight
はてぶ人気エントリー

Google