乱数とマルチコアパッケージ


15

Rでプログラミングするとき、マルチコアパッケージを数回使用しました。しかし、私はそれが乱数をどのように処理するかについてのステートメントを見たことはありません。CでopenMPを使用するときは、適切な並列RNGを使用するように注意しますが、Rでは、理にかなったことが起こると想定しています。誰でも賢明なことが起こることを確認できますか?

ドキュメントから、私たちは持っています

x <- foreach(icount(1000), .combine = "+") %do% rnorm(4)

rnorm`s はどのように生成されますか?

回答:


8

どのようにforeach動作するのかは分かりませんが(doMCパッケージから)、デフォルトmclapplymc.set.seedパラメーターのようなものをマルチコアでTRUE実行すると、各プロセスに異なるシードが与えられます(例:)mclapply(1:1000, rnorm)。あなたのコードは似たようなものに翻訳されていると思います。つまりparallel、同じ規約を持つ呼び出しに要約されます。

しかし、Charlie Geyerによるスライドの 16ページも参照してください。これは、理論的に保証された並列独立ストリーム用のrlecuyerパッケージを推奨してます。Geyerのページには、さまざまなセットアップ用のRのサンプルコードもあります。


7

あなたはこのページの5を見たいかもしれません文書とその文書。デフォルトでは、Rの下で、各コアセットは独自のシードです(高精度の時間を使用してリコールするようです)。

注:WindowsでRevolution-computingのforeach()を使用すると、賢明なこと起こらないと思われます。WindowsはPOSIXに準拠していないため、各コアに異なる高精度が必要な場合に問題が発生するはずです。シードを設定する時間を開始します(残念ながら、便利なウィンドウがないため、これを経験的に確認することはできません)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.