我希望在群集上实现“分支和绑定”(就像亚马逊的说法),因为我希望它可以横向扩展,而不仅限于单个CPU。 Judith Hippold和Gudula Runger撰写了一篇论文“任务池团队:SMP集群上不规则算法的混合编程环境”。它基本上是一个自下而上的,任务窃取框架,如英特尔的TBB,除了ad-hoc网络而不是共享内存。如果这个库可用,我会使用它(用TBB替换本地的线程部分)。不幸的是,他们似乎没有让它可以在任何我能找到的地方下载,所以我想知道是否还有其他实现或类似的库?
看起来微软的任务并行库也没有相应的东西来窃取。
(我试图在'threadpool'之后制作一个标签'taskpool',这是最常用的变种(在'线程池'之前),但是没有足够的积分。任何人都认为值得添加?)< / p>
编辑:
我还没有尝试过,但PEBBL(在这里:software.sandia.gov/trac/acro/wiki/Packages)声称规模非常高。应答者从Wiley出版的“并行分支和绑定算法”,Crainic,Le Cun和Roucairol,2006年的“并行组合优化”,2006年由El-Ghazali Talbi编辑的论文中提到的论文是我发现它的地方,还列出了其他图书馆;有些可能会更好,我保留更新此权限:)。有趣的是谷歌没有找到这些库,无论是我的谷歌搜索还是弱,或谷歌本身有时无法成为魔术。
答案 0 :(得分:2)
您可能会考虑的一件事是调查像RabbitMQ这样的共享消息队列。它是一个AMQP服务器(开发的消息传递协议,因此分布式应用程序可以相互发送消息)。
答案 1 :(得分:2)
当你说“通过集群”时,它听起来像是指分布式内存,并行分支和绑定是分布式内存的一个众所周知的难题 - 至少在保证可扩展性的方面。关于这个主题的开创性论文可以here,并且有关于该主题的{Wiley书籍的摘录here。
绑定共享内存分支是一个更容易解决的问题,因为您可以实现全局任务队列。有关如何同时执行共享内存和消息传递实现的高级描述here。如果不出意外,参考部分值得推荐创意和现有实施。
答案 2 :(得分:1)
你基本上需要某种分布式同步/队列
我建议将armci作为一个低级别的分布式内存接口,同步并在此基础上构建。
替代方案是将mpi进程分配为Master来分配工作分配。
http://www.cs.utk.edu/~dongarra/ccgsc2008/talks/Talk10-Lusk.pdf