Nomor acak dan paket multicore

15

Saat pemrograman dalam R, saya telah menggunakan multicore paket beberapa kali. Namun, saya belum pernah melihat pernyataan tentang bagaimana menangani angka acak itu. Ketika saya menggunakan openMP dengan C, saya berhati-hati untuk menggunakan RNG paralel yang tepat, tetapi dengan R saya berasumsi bahwa sesuatu yang masuk akal terjadi. Adakah yang bisa memastikan bahwa sesuatu yang masuk akal memang terjadi?

Contoh

Dari dokumentasi, kami punya

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

Bagaimana rnorm`s dihasilkan?

csgillespie
sumber

Jawaban:

8

Saya tidak yakin bagaimana foreachkarya (dari paket doMC, saya kira), tetapi dalam multicore jika Anda melakukan sesuatu seperti mclapplyyang mc.set.seeddefault parameter untuk TRUEyang memberikan setiap proses benih yang berbeda (misalnya mclapply(1:1000, rnorm)). Saya berasumsi bahwa kode Anda diterjemahkan ke dalam sesuatu yang serupa, yaitu kode itu bermuara pada panggilan parallelyang memiliki konvensi yang sama.

Tetapi juga lihat halaman 16 slide oleh Charlie Geyer, yang merekomendasikan paket rlecuyer untuk stream independen paralel dengan jaminan teoretis. Halaman Geyer juga memiliki kode sampel dalam R untuk pengaturan yang berbeda.

ars
sumber
7

Anda mungkin ingin melihat halaman 5 dokumen ini dan dokumen ini . Secara default, di bawah R, setiap set inti adalah seed sendiri (sepertinya saya ingat menggunakan waktu presisi tinggi).

NB: jika Anda menggunakan foreach () dari Revolution-computing di bawah windows maka saya menduga sesuatu yang masuk akal tidak akan terjadi. Windows tidak kompatibel dengan POSIX, dan ini akan menimbulkan masalah ketika masing-masing inti membutuhkan prakiraan tinggi yang berbeda. mulai waktu untuk mengatur seed-nya (sayangnya saya tidak memiliki windows berguna jadi saya tidak dapat memeriksa ini secara empiris).

pengguna603
sumber