我明白多线程程序和程序依靠机器间通信之间的区别。我的问题是,我已经写在“C”的作品,运行非常好8核机器上的一个不错的多线程程序。现在有机会来港这个程序的集群获取更多的内核。是否值得撕裂了的并行线程的东西和改造的MPI(我从来没有用过),或者是我们从头更好重新编码整个事情(或大部分)的努力?假设我们有“卡住”以C语言这样的批发变化是不是一个选项。

有帮助吗?

解决方案

根据您的软件是怎么写的,有可能是也可能不是优势,在保持你的并行线程的实现要MPI。

不幸的是(或幸运),消息传递是一种非常不同的野兽比pthreading - 的基本假设是完全不同的。我爱的由大师团队的约书亚菲利普斯的这句话:”消息传递和共享状态通信之间的区别相当于发送同事的电子邮件,要求她完成一个任务,开放的区别她组织者的任务,直接在她的待办事项列表写下来不仅仅是粗鲁,后者有可能混淆她 - 她可能会删除它,没有发觉,或意外错误优先为“

不幸的是,你共享数据的方式有很大的不同。没有直接访问其他线程数据(因为它可以在其他机器上),因此它可以是一个非常艰巨的任务迁移从并行线程到MPI。在另一方面,如果该代码被写入,以便每个线程是孤立的,它可以是一个简单的任务,绝对值得的。

为了确定如何有用,这将是,你需要明白的代码,你希望什么通过切换来实现的。它可以是值得的,因为学习的经验(你在MPI工作学习有关同步和线程LOT),但可能不实用,如果收益将是次要的。

其他提示

重新。里德您的评论 - 这听起来像一个简单的,低开销转换为MPI。只是要小心:并不是所有的MPI API的支持动态创建的过程,即,你开始用N流程程序(在启动时指定)和你坚持用N过程在程序的生命时间

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top