昨日ある方からRのマルチコアでの処理について質問を受けたのでちょっと調べてみました。
その時のメモですので想定読者は未来の自分です。ほとんど資料紹介で終わってます。ご了解ください。
並列処理について
要するに大量の処理を一人でやってたら時間かかるんで、複数人で同時並行でやってしまいましょう、というイメージです。このあたりについては、このスライドの32枚目あたりから の説明がわかりやすいかと思います。結局はマルチコアCPUで、それぞれのコアにジョブを割り当てようってことになります。
Rの基本的なデータ処理について
Rは基本的にシングルコアでデータ処理するようです。しかしこれだと大規模データやシミュレーションをRで分析すると大変です。そこでこれまでいろんなパッケージで並列処理(マルチコアで分散処理)対応してきたようです。
並列処理のためのパッケージ
ぐぐってみたとろこ、snowパッケージやmulticoreパッケージ等があがってきました。これら並列処理をするためのパッケージについてまとめてあるドキュメントは こちら です。英語かつ量が多めできついですが、非常に新しいパッケージ情報がまとめられています。
また、 アート・オブ・Rプログラミング の16章にsnowパッケージなどを用いたRによる並列処理についての説明がありますし、multicoreパッケージについてはR言語上級ハンドブックに簡単な説明があります。
R2.14以降では、Rの本体にparallelパッケージが組み込まれました。これはRのコアメンバーがメンテをしているパッケージで、最新版のRでも組み込まれているはずです。このパッケージの説明としてはこちら をご覧ください(英語かつpdfなので注意)。具体的な使い方が記載してあるものとしては、 改訂2版 R言語逆引きハンドブック にサンプルコードと共に簡単な説明があります。
いずれにしても使うにあたりちょっと癖があり、色々と覚えることが多くなりそうです。また並列処理すれば何でも速くなるわけではなく、場合によってはかえって遅くなることもあるようです。
内部で並列処理しているパッケージ
上述のparallelパッケージは始めから組み込まれているので、他のパッケージの内部で呼び出しやすい方かと思います。なので、内部でparallelパッケージ内の関数を使って並列処理を行うことで高速化しようというパッケージもあるようです。
ちらっと探したところ、処理が速いと聞いているパッケージ内でそれっぽいのを見かけました(例えば これとか )。たぶん他にも利用しているものはあるんじゃないかと思います。
さいごに
あまり時間をかけてませんし、何より自分がそこまでコードを理解していないので、この程度しかまとめられてません…。必要に迫られて、自分のレベルがあがってきたら、再度調べてみたいと思います。頼みますよ未来の自分。