RNG, R, mclapply и кластер компьютеров

10

Я запускаю симуляцию на R и кластере компьютеров и имею следующую проблему. На каждом из компьютеров X я запускаю:

fxT2 <- function(i) runif(10)
nessay <- 100
c(mclapply(1:nessay, fxT2), recursive=TRUE)

Есть 32 компьютера, каждый с 16 ядрами. Тем не менее, около 2% случайных чисел идентичны. Какие стратегии вы бы приняли, чтобы избежать этого?

Мне удалось избежать этой проблемы для fxT2, установив задержку (т.е. задержка на секунду времени, в течение которого каждое задание отправляется на каждый из компьютеров X). Но это похоже на ad-hoc для fxt2.

Проблема в том, что в действительности fxT2 - это длинная задача, включающая псевдослучайные числа. В конце процесса я ожидаю получить X * nessay воспроизводство того же статистического эксперимента, а не nessay воспроизведение. Как убедиться, что это действительно так, и есть ли способ проверить это?

user603
источник
Хороший вопрос. Посмотрите на этот вопрос о случайных числах и многоядерном пакете
csgillespie
@CSgillepsie:> спасибо за указатель, но я не уверен, что это та же самая проблема: как я понимаю вопрос, на который вы указали, все процессы порождаются mclapply. Здесь все немного по-другому: на каждой машине все процессы запускаются mclapply, но это не относится к разным машинам.
user603

Ответы:

6

Снег имеет явную поддержку инициализации заданного числа ГСЧА потоков в вычислительном кластере.

Он может использовать одну из двух реализаций RNG:

В противном случае вы должны выполнить координацию вручную.

Дирк Эддельбюттель
источник
3

Вам необходимо использовать RNG, специально разработанный для параллельных вычислений. См. Раздел «Параллельные вычисления: случайные числа» в представлении « Высокопроизводительные вычисления» .

Джошуа Ульрих
источник
Вам также необходимо координировать между потоками ГСЧ. Снег делает это, многоядерный может сейчас.
Дирк Эддельбюттель