Генетический алгоритм python DEAP многоядерная скорость
Я использую Python DEAP pacakge и хочу многоядерный код, и я использовал учебник по адресу http://deap.gel.ulaval.ca/doc/dev/tutorials/distribution.html чтобы успешно сделать это с помощью многопроцессорной обработки.
Мой вопрос заключается в следующем: используя 8 ядер, насколько я могу получить ускорение в теории? Причина, по которой я спрашиваю, состоит в том, что я хочу решить, сколько человек и поколений я могу запустить за то же время, что и у одноядерной версии. Мой код раньше занимал ~200 секунд для запуска и с 8 ядрами, теперь это занимает ~0,5 секунды (это ускорение в 400 раз). Могу ли я предположить, что что-нибудь ускорится в 400 раз? Я знаю, что это сложно, но ваша помощь будет очень признательна.
В общем, если кто-то может помочь, я хотел понять, как многоядерность меняет поток вычислений. Это просто отображает оценку каждого человека по различным ядрам для каждого поколения? Или он запускает поколения параллельно? Если вы знаете какую-либо документацию, которую я мог бы прочитать об этом, пожалуйста, дайте мне знать.
Я не привел пример кода, так как он не нужен, потому что это вопрос очень высокого уровня.
1 ответ
Это просто отображает оценку каждого человека по разным ядрам для каждого поколения, или он запускает поколения параллельно?
Пример отображает evaluate
операция таким образом...
fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)
Одинокий бегущий процесс попадает на карту: все invalid_ind
's маршалируются в одну очередь, и, когда ядро становится доступным, следующее лицо в очереди назначается этому ядру для запуска evaluate
рутина. Когда очередь пуста, все результаты собираются в список и присваиваются fitnesses
, Отсюда процесс продолжается в одиночестве.
Так:
- "Да" это отображает оценку каждого человека по различным ядрам и,
- "Нет" не запускает поколения
По крайней мере, это то, что я догадываюсь, когда я задал этот вопрос. Конечно, в зависимости от вашего приложения, исходя из моего опыта работы с DEAP и cProfile, два главных потребителя процессорного времени занимались оценкой отдельных пользователей и копированием.