Numeri casuali e pacchetto multicore


15

Durante la programmazione in R, ho usato il pacchetto multicore alcune volte. Tuttavia, non ho mai visto un'affermazione su come gestisce i suoi numeri casuali. Quando uso openMP con C, sto attento a usare un corretto RNG parallelo, ma con R presumo che accada qualcosa di sensato. Qualcuno può confermare che succede qualcosa di sensato?

Esempio

Dalla documentazione, abbiamo

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

Come vengono rnormgenerati gli `s?

Risposte:


8

Non sono sicuro di come foreachfunzioni (dal pacchetto doMC, immagino), ma in multicore se hai fatto qualcosa di simile mclapplyal mc.set.seedparametro predefinito a TRUEcui ogni processo ha un seme diverso (ad es mclapply(1:1000, rnorm).). Presumo che il tuo codice sia tradotto in qualcosa di simile, cioè si riduce a chiamate a parallelcui ha la stessa convenzione.

Ma vedi anche la pagina 16 delle diapositive di Charlie Geyer, che raccomanda il pacchetto rlecuyer per flussi indipendenti paralleli con garanzie teoriche. La pagina di Geyer ha anche un codice di esempio in R per le diverse configurazioni.


7

Potresti voler consultare la pagina 5 di questo documento e di questo documento . Di default, sotto R, ogni set di core è il proprio seed (mi sembra di ricordare usando un tempo di alta precisione).

NB: se usi foreach () da Revolution-computing sotto Windows, sospetto che non accadrà qualcosa di sensato . Windows non è conforme a POSIX e questo dovrebbe comportare problemi quando ogni core necessita di un diverso prec. ora di inizio per impostare il seed (purtroppo non ho Windows a portata di mano, quindi non posso verificarlo empiricamente).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.