как параллельный GADriver поддерживает распределенную память - PullRequest
1 голос
/ 08 октября 2019

Когда я устанавливаю run_parallel = True для SimpleGADriver, как обрабатывается память? Делает ли это что-нибудь с распределенной памятью? Отправляет ли каждая точка поколения в одну память (в случае, если у меня есть установка, которая соединяет несколько узлов (у каждого своя память))?

1 Ответ

1 голос
/ 08 октября 2019

Я не уверен, что полностью понимаю ваш вопрос, но я могу дать общее представление о том, как он работает.

Когда «run_parallel» равен True, и вы работаете под MPI с n процессорами,SimpleGADriver будет использовать эти процедуры для оценки вновь созданных расчетных значений населения. Для начала GA работает на каждом процессоре с локальными значениями в локальной памяти. Когда генерируется новый набор точек, значения ранга 0 транслируются во все ранги и помещаются в список. Затем эти точки оцениваются на основе ранга процессора, так что каждый процесс оценивает разные точки. После завершения все значения собраны, после чего каждый процессор имеет все объективные значения для нового поколения. Этот процесс продолжается до тех пор, пока не будут достигнуты критерии завершения.

Таким образом, по сути, мы просто используем несколько процессоров для ускорения оценки целевой функции (т. Е. Запуска модели), что может быть важно для более медленных моделей. 1007 * Одно предостережение заключается в том, что общая численность населения должна делиться на число процессоров, иначе будет повышено исключение.

Выбор для широковещания населения с ранга 0 (а не любого другого ранга) является произвольным, но эти значения происходят из процесса, который включает в себя случайный кроссовер и выбор турнира, поэтому каждый процессор генерирует новую действительную уникальную популяцию, и мы просто выбираем одну.

...