Случайные числа и многоядерный пакет


15

При программировании на R я использовал многоядерный пакет несколько раз. Тем не менее, я никогда не видел заявления о том, как он обрабатывает случайные числа. Когда я использую openMP с C, я осторожно использую правильный параллельный RNG, но с R я предполагаю, что происходит что-то разумное. Кто-нибудь может подтвердить, что происходит что-то разумное?

пример

Из документации мы имеем

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

Как создаются rnorm`ы?

Ответы:


8

Я не уверен , как foreachработает (из пакета DoMC, я думаю), но в многоядерной , если вы сделали что - то вроде mclapplyтех mc.set.seedпараметров по умолчанию для TRUEкоторых дает каждому процессу различные семена (например mclapply(1:1000, rnorm)). Я предполагаю, что ваш код переведен во что-то похожее, то есть сводится к вызовам, к parallelкоторым применяется то же соглашение.

Но также смотрите страницу 16 слайдов Чарли Гейера, который рекомендует пакет rlecuyer для параллельных независимых потоков с теоретическими гарантиями. На странице гейера также есть пример кода в R для различных настроек.


7

Возможно, вы захотите взглянуть на страницу 5 этого документа и этого документа . По умолчанию в R каждый набор ядер является собственным начальным числом (я помню, что использовал время высокой точности).

NB: если вы используете foreach () из Revolution-computing под windows, то я подозреваю, что чего-то разумного не произойдет. Windows не совместима с POSIX, и это должно создавать проблемы, когда каждому ядру нужна отдельная высокая точность. время начала установки семян (к сожалению, у меня нет удобных окон, поэтому я не могу проверить это эмпирически).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.