gpt4 book ai didi

java - 遗传算法的并行化显着减慢了算法速度。为什么会这样?

转载 作者:行者123 更新时间:2023-11-30 06:29:55 26 4
gpt4 key购买 nike

我编写了一个遗传算法,为了优化其性能,我决定对个人的健康测试进行并行化。为了了解这对我的算法造成了什么样的改变,我重新进行了一次我在并行化之前完成的测试运行,测试了 GA 在不断增长的人口规模下的性能。

并行版本的 GA 实际上比原始版本多花费了大约 50%。我意识到有时并行化的开销实际上花费的时间多于节省的时间,但我怀疑这是否适用于这种情况 - 我的适应性测试正在寻找 Sheckel 的 Foxholes 函数(http://extreme.adorio-research.org/download/mvf/html/node51.html)的全局最小值,而我的人口规模从 10 到 1000 不等。我预计在并行执行 1000 次 sheckel 的散兵坑时,节省的时间将大大超过并行化的开销。

所以我的问题是:为什么并行化会减慢算法速度(而且如此显着)?

郑重声明,我使用 Java 进行编码,并使用 CountDownLatch 进行并行化,该 CountDownLatch 会在继续之前等待所有线程(适应性测试)执行完毕。

最佳答案

根据您的评论,您似乎做事相当合理,线程数可能除外。但是你提到你正在使用 CountDownLatch 让我想到......

我强烈建议您不要使用自己的代码,而是使用 ExecutorService/Executors 进行并行化。使您的类成为 Callable,创建一组它们,然后调用 invokeAll()。这样训练有素(不确定他们是否高薪)的专家完成了大部分编码。

有了Executors,控制最大线程数就很简单了。您可以调用 Runtime.availableProcessors() 来初步了解一次要运行的线程数,然后进行一些测试和调整。

编辑:刚刚发布了一个 introduction to converting an algorithm to use ExecutorService.享受,欢迎评论/反馈。

关于java - 遗传算法的并行化显着减慢了算法速度。为什么会这样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11039862/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com