- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个遗传算法,为了优化其性能,我决定对个人的健康测试进行并行化。为了了解这对我的算法造成了什么样的改变,我重新进行了一次我在并行化之前完成的测试运行,测试了 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/
如何将 solr 与 heritrix 集成? 我想使用 heritrix 归档一个站点,然后使用 solr 在本地索引和搜索该文件。 谢谢 最佳答案 使用 Solr 进行索引的问题在于它是一个纯文本
我的任务: 创建一个程序来仅使用基元(如三角形或其他东西)复制图片(作为输入给出)。该程序应使用进化算法来创建输出图片。 我的问题: 我需要发明一种算法来创建种群并检查它们(它们与输入图片的匹配程度
我看过几篇文章和文章,建议使用模拟退火等方法来避免局部最小值/最大值问题。 我不明白为什么如果您从足够大的随机人口开始,这将是必要的。 这只是确保初始人口实际上足够大和随机的另一项检查吗?或者这些技术
我是一名优秀的程序员,十分优秀!