Случайные числа и пафосная многопроцессорность - PullRequest
0 голосов
/ 20 января 2020

Мне было интересно, есть ли рекомендуемый способ использования функции параллельной карты в pathos.multiprocessing.ProcessPool для функций, которые включают генерацию случайных чисел, т.е. ,

def f(x):
    return x*np.random.rand()

pool = pathos.multiprocessing.ProcessPool(nodes=4)

results = pool.map(f,np.linspace(0,1,11))

Я подозреваю, что я можно было бы сделать что-то простое, например, добавить np.random.seed() к функции f, но в идеале мне бы хотелось немного воспроизвести. Есть ли способ просто назначить разное, известное начальное число каждому рабочему в пуле, а затем выполнить сопоставление?

1 Ответ

0 голосов
/ 20 января 2020

Документация NumPy содержит пример того, как можно использовать несколько процессов для сокращения времени генерации случайных чисел.

Многопоточное поколение .

По существу, Вы назначаете каждому процессу свой PRNG, инициализированный на основе общего начального числа, делите массив на части, назначаете каждому фрагменту процесс, и каждый процесс заполняет свой назначенный кусок случайными числами. Пример (на момент написания этой статьи) использует PCG и перемещает PRNG вперед для формирования различных потоков чисел для каждого процесса. (См. « Параллельная генерация случайных чисел », чтобы узнать о различных способах поддержки потоков случайных чисел в NumPy. См. Также мой раздел « Заполнение нескольких процессов ».)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...