MATLAB: генерация случайных чисел в parfor или параллельные вычисления

#matlab #random

#matlab #Случайный

Вопрос:

В одном цикле for я использую одно случайное начальное значение для генерации всех «случайных чисел». Они очень случайны, поскольку я беру по одному из потока за раз, без какого-либо промежутка.

Однако в parfor каждый рабочий использует разные случайные начальные значения, поэтому полученные числа могут мешать друг другу. Следовательно, они на самом деле не случайны, поскольку они не происходят из одного начального числа.

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

Комментарии:

1. Вау. это будет сложно. Что бы я сделал: Заставил всех workers использовать одно и то же начальное значение, но использовать разные числа в большом массиве, который создается. Представьте, что им нужно всего по 1 каждому, затем заставьте всех, например, 80 работников создать по 80 случайных чисел и использовать только одно. Или передайте рабочим переменную со случайными числами. Да, оба метода имеют ограничения, но вы имеете дело с проблемой, которая может оказаться неразрешимой

2. Посмотрите распределенное заполнение. Существует много способов. Используйте MT с различными конфигурациями (их примерно ~ 600); для этого есть дополнительный документ (с убедительными аргументами о невмешательстве) (и настроенный код). Используйте PRNG с возможностью перехода (например, переход на 2 ^ 40 выборок). Скачкообразный переход и многое другое.

3. @Ander Biguri Спасибо. но каждый рабочий использует не только 1 случайное число. Я не знаю, сколько случайных чисел нужно каждому работнику заранее.

4. @sascha имеешь ли ты в виду, что при использовании МНОЖЕСТВА разных конфигураций для каждого рабочего, случайные числа одного рабочего не будут мешать числам другого?

5. @kww Да. В этом и заключается идея. Вот подход, о котором я упоминал 4, и другие, основанные на прыжках .

Ответ №1:

В parfor workers используют разные потоки от генератора случайных чисел, который специально разработан для параллельного использования. Таким образом, вы можете положиться на случайные числа, сгенерированные внутри parfor , обладающие разумными статистическими качествами. Подробнее здесь:http://www.mathworks.com/help/distcomp/control-random-number-streams.html