Rは、多くの計算を必要とする私のプログラムの1つを実行するときに1つのコアしか使用しないことに気付きました。マルチコアプロセッサを活用して、プログラムの実行速度を上げたいと思います。質問の詳細な調査はまだ行っていませんが、コンピューターサイエンスの知識が乏しく、その主題に関する情報を簡単に理解することは難しいので、コメントをいただければ幸いです。
Rが必要なときにいくつかのコアを自動的に使用できるようにするパッケージはありますか?
そんなに簡単ではないと思います。
Rは、アドオンパッケージを使用して複数のコアを使用できるのは、一部の種類の操作のみです。オプションについては、CRANの High Performance Computing Task View で詳しく説明しています。
更新:Rバージョン2.14.0以降では、parallelが含まれているため、アドオンパッケージは必ずしも必要ではありませんRに同梱される推奨パッケージとしてのパッケージ。parallelには、の機能が含まれます。 multicoreおよびsnowパッケージ、ほとんど変更なし。
マルチプロセッサを利用する最も簡単な方法は、関数mclapply()を含むmulticore
パッケージです。 mclapply()は、lapply()のマルチコアバージョンです。そのため、lapply()を使用できるプロセスは、mclapply()プロセスに簡単に変換できます。ただし、マルチコアはWindowsでは機能しません。これについてのブログ投稿を書きました 昨年 これは役に立つかもしれません。 Revolution Analyticsが作成したパッケージ doSMP は、Rのマルチスレッドバージョンではありません。事実上、マルチコアのWindowsバージョンです。
作業が 恥ずかしいほどに平行 の場合、lapply()タイプの構造化に慣れることをお勧めします。これにより、同じ抽象化を使用してmclapply()および分散コンピューティングに簡単に移行できます。
「恥ずかしいほど平行」ではない操作では、事態はさらに難しくなります。
[編集]
補足として、RstudioはRのフロントエンドとしてますます人気が高まっています。私はRstudioが大好きで、毎日使用しています。ただし、RstudioはMulticoreでNiceをプレイしないことに注意する必要があります(少なくとも2011年10月現在... RStudioチームがこれを修正することを理解しています)。これは、Rstudioがバックグラウンドでフォークを行い、これらのフォークがMulticoreのフォークの試みと競合するためです。したがって、マルチコアが必要な場合は、Rstuidoでコードを記述できますが、プレーンジェーンRセッションで実行できます。
この質問では、常に非常に短い回答が得られます。私によると、最も簡単な解決策は、雪に基づくパッケージ snowfall です。つまり、複数のコアを備えたWindows単一コンピューター上。こちらも参照してください Knaus et alの記事 簡単な例。 Snowfallはsnowパッケージのラッパーであり、いくつかのコマンドでマルチコアをセットアップできます。他のほとんどのパッケージよりも間違いなく簡単です(すべてを試したわけではありません)。
サイドノートでは、並列化できるタスクは実際には数個しかありません。これは、マルチコア計算が理にかなっている前にタスクを分割できる必要があるという非常に簡単な理由からです。 apply
ファミリは明らかにこれに対する論理的な選択です。複数のindependent計算は、マルチコアの使用に不可欠です。それ以外のものは、必ずしも簡単にマルチコア化できるとは限りません。
sfApplyおよびカスタム関数 に関するこの説明もお読みください。
Microsoft R Openにはマルチスレッドの数学ライブラリが含まれており、Rのパフォーマンスを向上させます。Windows/ Unix/MacすべてのOSタイプで動作します。これはオープンソースであり、既存のR(from CRAN)インストールがある場合は別のディレクトリにインストールできます。人気のあるIDE Rstudioもこれと一緒に使用できます。当初から、Rは一度に1つのスレッド(プロセッサ)のみを使用するように設計されていました。スレッドBLAS/LAPACKライブラリ。
今日のマルチコアマシンは、並列処理能力を提供します。これを利用するために、Microsoft R Openにはマルチスレッドの数学ライブラリが含まれています。これらのライブラリにより、行列乗算/逆行列、行列分解、一部の高レベルの行列演算など、非常に多くの一般的なR演算を並列に計算し、利用可能なすべての処理能力を使用して計算時間を短縮できます。
以下のリンクを確認してください:
https://mran.revolutionanalytics.com/rro/#about-rro
http://www.r-bloggers.com/using-Microsoft-r-open-with-rstudio/
デビッド・ヘファーナンが言ったように、革命分析のブログをご覧ください。ただし、ほとんどのパッケージはLinux用であることを知っておく必要があります。そのため、Windowsを使用する場合ははるかに困難になります。とにかく、これらのサイトを見てください:
革命 。ここで、Rでのパラレリゼーションに関する講義を見つけることができます。この講義は実際には非常に優れていますが、先ほど述べたように、ほとんどのヒントはLinuxに関するものです。
そして、このスレッド Stackoverflow では、Windowsでの実装について議論します。
パッケージfuture
により、並列処理および分散処理を使用してR
での作業が非常に簡単になります。 詳細はこちら 。関数を要素に並列に適用したい場合、 _future.apply
_ パッケージは「適用」ファミリー関数(例えばapply()
、lapply()
、およびvapply()
)。
例:
_library("future.apply")
library("stats")
x <- 1:10
# Single core
y <- lapply(x, FUN = quantile, probs = 1:3/4)
# Multicore in parallel
plan(multiprocess)
y <- future_lapply(x, FUN = quantile, probs = 1:3/4)
_