Introduction to High-Performance Computing with Rを聞いてきた

Rユーザー会の英語でのチュートリアル講演を聞いてきました。初立川でした。統数研が10月に立川に移転したということで、タクシーの運転手の人も警察官も「統数研」という言葉にぽかんとされてしまいました。12/5のほうに参加される方は時間にかなり余裕を持って行ったほうがよいと思います。

そんなわけで英語の発表を5時間くらい聞いていたので大分疲れましたが、とてもためになりました。個人的に知っていることが割りとあったのですが、知らないパッケージや関数とかも結構ありました。最後の"Extending memory limits using packages biglm, ff and bigmemory"は全然知らないところだったので、おーおー言いながら聞いておりました。

スライドの英語は読める&Rは分かるけど、英語はかなり聞き取れなかった(自分の能力的に)のでかなりやばいなーと。。。

会場に電源確保できるところが限られていたため、メモはあんまり取れてません。あと、今日の発表資料もどこかに公開されていると思うのですが、僕がまだ把握してません。しかし、use R!2009での彼の発表とほとんど同じ内容なのでこれを見れば大体おkだと思います。

追記。今年のはこっちらしいです。surgさんありがとうございます。

これだけだとあれなので、アウトラインにちょっと解説入れた感じのことを書いてみます。

  • Tools for automation and scripting
  • Measuring and profiling
    • あとあと高速化とかの話が出てくるので、Rでのprofilingの方法について
    • Rprofとか基本的なやつから、valgrind、google-pprofのようなものまで
    • profilingの結果をRgraphvizを使って可視化みたいなのが結構上げられていた
    • Rのメモリの使用状況を調べるRprofmemは知らなかったので、個人的にメモ
  • Speeding up
    • 基本のベクトル化のところから
    • 'just-in-time compilation'してくれるlibrary(jit)やRaなど
    • BLASとかAtlasも取り上げられていたけど、'From Blas to GPUs.'というスライドもあるなどして、時代は次に向かっているのか
      • CUDAとかOpenCLなど
    • RのためのGPU計算のパッケージとしてはgputoolsとcudaBayesregの2つがいまのところあるらしい
    • ただ、パフォーマンスの改善は望めるけど、'With GPU, this abstraction goes away and we have to worry (again) about memor y layout, access, ...'ということで、'No Free Lunch'と書かれていた
  • Compiled Code
    • R拡張の基本的な話から入る
    • inlineパッケージやRcppパッケージの紹介
      • inlineは'R CMD SHLIB'とやるのが面倒だからRにCのコード埋め込みましょうというようなパッケージ
      • RcppはC++とRの使いやすいインターフェイスを目指したようなパッケージ。stlについて結構考えられているっぽいです
  • Explicitly and Implicitly Parallel
  • Out-of-memor y processing
    • メモリ乗り切らないデータをどうやって扱うか
    • ff、bigmemoryパッケージ
      • 'ff won the UseR! 2007 ’large datasets’ competition.'
      • データはdiskに置いておく。データをchunkingしながら扱う
      • bigmemoryはRの外にデータを置いておく(ただしメモリには乗っている((optionでdiskもいけるらしい)))。それとmappingさせることでRで使えるようにする
      • diskとメモリではアクセスするスピードに随分な差があるので、その辺で使いわけるのかしら

あとは電源が生きていたときに取ったメモですが、たぶん役に立たないと思われる。。。

高速化

  • ベクトル化(Vectorization)は基本
  • pre-allocation space helps will performance
    • val <- double(10000)
    • vectorをappendしていくような例とか
  • library(jit) && library(Ra)
    • this can be used ot obtain speedups os standard R operations.
    • outer使わなくても遜色なくなっていたり
  • Optimised BLAS
    • The spped gains can be noticeable. For Debian/Ubuntu, one can simply install on of the atlas=base-* packages.
  • Atlasを使うとでかい行列生成の積の例で7倍は違う
  • From Blas to GPUs.
    • optimised for I/O and floating point operations
  • key development environments that are avaiable are
    • Nvidia CUDA
    • OpenCL
  • CUDAの例
    • multithreadで動かせる
    • forを書かない(?)
    • kerne function
  • gputools by Josh Buckner and Mark Seligman provides a number of basic routines.
    • gpuCorなどの関数

Compiled Code

  • inline packageはRの中にCとかfortranを埋め込む
    • Cのファイルとかに分けなくても、コンパイル、リンクなどをやってくれる
  • .Cと.Callがより簡単に

その他

  • replicateがいっぱい使われていた
    • sapplyとかよりこっちがよいかも