Монте-Карло PI на кластере

Итак, я разрабатываю симуляцию Монте-Карло PI на кластере GPU.

В настоящее время я выбираю один алгоритм генератора случайных чисел, скажем, XorShift7. И из-за ограничения алгоритма для одного начального числа он может генерировать только 2 ^ 32 числа, поскольку это 32-битный алгоритм, и последовательность будет повторяться после 2 ^ 32 чисел. Я позволяю каждому работнику кластера вычислять часть всей последовательности, а затем уменьшаю их.

Вопрос в том, я хочу увеличить случайные числа. Моя идея заключается в том, что я хочу использовать несколько последовательностей случайных чисел с другим алгоритмом и другим начальным числом, например:

cluster worker1: calc XorShift7(seed=0) from number0 to number2^31
cluster worker2: calc XorShift7(seed=0) from number2^31 to number2^32
cluster worker3: calc XorShift7(seed=1) from number0 to number2^31
cluster worker4: calc XorShift7(seed=1) from number2^31 to number2^32
cluster worker5: calc Mrg32k3a(seed=0) from number0 to number2^31
cluster worker6: calc Mrg32k3a(seed=0) from number2^31 to number2^32
cluster worker7: calc Mrg32k3a(seed=1) from number0 to number2^31
cluster worker8: calc Mrg32k3a(seed=1) from number2^31 to number2^32

Затем я усредняю ​​значение 8 результатов от 8 рабочих.

Мой вопрос в том, нарушит ли это свойства случайных чисел со статистической точки зрения?


person Xiang Zhang    schedule 16.06.2015    source источник
comment
Я бы рекомендовал прочитать обсуждение stackoverflow.com/ вопросы/28991299/   -  person Severin Pappadeux    schedule 16.06.2015
comment
@SeverinPappadeux, спасибо, и я проверил это обсуждение, поэтому я думаю, что вы предлагаете использовать один тип ГСЧ и одно семя в одной симуляции. таким образом, максимальные числа, которые я могу использовать для одного моделирования PI, - это период ГСЧ. Чтобы увеличить случайные числа, которые я могу использовать для большей мощности кластера, мне нужно найти лучший ГСЧ с большим периодом.   -  person Xiang Zhang    schedule 16.06.2015
comment
Что ж, оба ГСЧ, упомянутые в обсуждении, имеют период НАМНОГО больше, чем 2 ^ 32. Наименьший период RNG составляет 2 ^ 63 или около 10 ^ 18. Таким образом, вы устанавливаете начальное начальное значение в 1, а затем для каждого узла вы делаете быстрый пропуск вперед, скажем, i * 10 ^ 12. Таким образом, у каждого узла достаточно случайных чисел для запуска, и у вас может быть как минимум 10 ^ 6 (один миллион!) узлов. И ваше 2 ^ 32 составляет около 4 * 10 ^ 9 для сравнения.   -  person Severin Pappadeux    schedule 16.06.2015
comment
@SeverinPappadeux, спасибо, да, период используемого мной генератора слишком мал, потому что они реализованы на графическом процессоре, поэтому мне нужно найти хотя бы 64-битный ГСЧ на графическом процессоре. Кстати, поскольку для расчета PI нужны x и y, поэтому я думаю, что могу настроить 2 ГСЧ и с 2 разными начальными значениями для точки x и y, поэтому я получаю полный период, иначе у меня есть только половина периода для точек .   -  person Xiang Zhang    schedule 16.06.2015
comment
Что ж, CUDA поддерживает 64-битные целые числа (long long), поэтому вы можете просто портировать RNG по ссылке и использовать его.   -  person Severin Pappadeux    schedule 16.06.2015