Liczby losowe i pakiet wielordzeniowy

15

Podczas programowania w R kilkakrotnie korzystałem z pakietu wielordzeniowego . Jednak nigdy nie widziałem oświadczenia o tym, jak radzi sobie z liczbami losowymi. Kiedy używam openMP z C, ostrożnie używam odpowiedniego równoległego RNG, ale z R zakładam, że dzieje się coś sensownego. Czy ktoś może potwierdzić, że dzieje się coś sensownego?

Przykład

Z dokumentacji mamy

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

Jak są rnormgenerowane `s?

csgillespie
źródło

Odpowiedzi:

8

Nie jestem pewien, w jaki sposób foreachdziała (z pakietu doMC, chyba), ale w wielordzeniowych jeśli zrobił coś podobnego mclapplydo mc.set.seeddomyślnych parametrów do TRUEco daje każdy proces inny materiał siewny (np mclapply(1:1000, rnorm)). Zakładam, że twój kod jest przetłumaczony na coś podobnego, tzn. Sprowadza się do wywołań, do parallelktórych obowiązuje ta sama konwencja.

Ale patrz także strona 16 slajdów Charliego Geyera, który zaleca pakiet rlecuyer dla równoległych niezależnych strumieni z teoretycznymi gwarancjami. Strona Geyera ma również przykładowy kod w R dla różnych konfiguracji.

ars
źródło
7

Możesz zajrzeć na stronę 5 tego dokumentu i tego dokumentu . Domyślnie, w R, każdy zestaw podstawowy jest własnym ziarnem (wydaje mi się, że pamiętam, używając czasu o wysokiej precyzji).

Uwaga: jeśli użyjesz foreach () z Revolution-computing pod Windows, podejrzewam, że coś sensownego się nie wydarzy. Windows nie jest zgodny z POSIX i powinno to stwarzać problemy, gdy każdy rdzeń potrzebuje innego wysokiego poziomu wstępnego. czas rozpoczęcia, aby ustawić to seed (niestety nie mam pod ręką okien, więc nie mogę tego sprawdzić empirycznie).

użytkownik603
źródło