Випадкові числа та багатоядерний пакет


15

Під час програмування в R я кілька разів використовував багатоядерний пакет. Однак я ніколи не бачив твердження про те, як це обробляє випадкові числа. Коли я використовую openMP з C, я обережно використовую правильний паралельний RNG, але з R я припускаю, що трапляється щось розумне. Чи може хтось підтвердити, що щось розумне відбувається?

Приклад

З документації у нас є

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

Як rnormгенеруються `s?

Відповіді:


8

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

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


7

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

Примітка: якщо ви використовуєте foreach () від Revolution-обчислень під windows, то я підозрюю, що щось розумне буде не станеться. Windows не сумісний з POSIX, і це може створювати проблеми, коли для кожного ядра потрібна різна висока точність. час початку встановити його насіння (на жаль, у мене немає вікон під рукою, тому я не можу перевірити це емпірично).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.