9

我正在使用 Python 的 DEAP pacakge,我想对我的代码进行多核处理,我使用http://deap.gel.ulaval.ca/doc/dev/tutorials/distribution.html上的教程使用多处理成功完成了它。

我的问题如下:使用 8 个内核,理论上我能获得多少加速?我问的原因是因为我想决定我可以在与单核版本相同的时间内运行多少个人和几代人。我的代码过去运行大约需要 200 秒,使用 8 个内核,现在需要大约 0.5 秒(这是 400 倍的加速)。我可以假设任何东西都会加速 400 倍吗?我知道这很复杂,但我们将非常感谢您的帮助。

一般来说,如果有人可以提供帮助,我想了解多核如何改变计算流程。它只是将每个人的评估映射到每一代不同的核心上吗?还是并行运行几代?如果您知道我可以阅读的任何文档,请告诉我。

我没有提供代码示例,因为它似乎没有必要,因为这是一个非常高级的问题。

4

1 回答 1

6

它只是将每个人的评估映射到每一代的不同核心上,还是并行运行几代?

该示例映射了evaluate操作,因此...

fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)

唯一运行的进程命中地图:所有的invalid_ind's 被编组到一个队列中,当一个核心可用时,队列中的下一个个体被分配给该核心以运行evaluate例程。当队列为空时,所有结果都组装成一个列表并分配回fitnesses. 然后这个过程继续它是孤独的。

所以:

  • “是的”它确实将每个人的评估映射到不同的核心上,并且,
  • “不”它不会并行运行几代

至少当我问这个问题时,我是这么推测的。当然,根据您的应用程序,根据我使用 DEAP 和 cProfile 的经验,CPU 时间的前两个消耗者是评估个人和复制。

于 2015-08-05T08:46:38.327 回答