【问题标题】:Possible to distribute or parallel process a sequential program?可以分发或并行处理顺序程序吗?
【发布时间】:2011-01-28 17:00:16
【问题描述】:
【问题讨论】:
标签:
c++
distributed
parallel-processing
【解决方案1】:
如果你的算法基本上是顺序的,你就不能让它基本上不是那个。
你使用的是什么算法?
编辑:谷歌搜索“扩散受限聚合算法并行”引导我 here,引用以下内容:
另一方面,DLA 已显示
[9,10] 属于
本质上是顺序的,或者更多
正式地,P-完全问题。
因此,DLA 不太可能
集群可以并行采样
限制为 a 时的 polylog 时间
处理器多项式中的数量
系统大小。
所以你的问题的答案是“所有迹象都指向否”。
【解决方案2】:
大概吧。大多数顺序算法都有并行版本,对于那些不能立即并行化的顺序算法,通常有并行替代品。这看起来像是在选择算法之前需要考虑并行化或可并行性的情况之一。但是,除非您告诉我们一些(很多?)更多关于您的算法的信息,否则我们无法提供太多具体的指导。如果您在没有硬数据的情况下观看 SO 人员争论很有趣,请坐下来观看,但如果您想要答案,请编辑您的问题。
toxiclibs 网站提供了一些关于如何完成 DLA 实施的有用见解
【解决方案3】:
cilk,它是对 C 语言(不幸的是,还不是 C++)的增强,它允许您在代码中添加一些额外的信息。只需几个小提示,编译器就可以自动并行化部分代码,例如并行而不是串行运行 for 循环的多次迭代。
【解决方案5】:
你提到每一步都依赖于前面所有步骤的结果,这使得这样的程序很难并行化。
我不知道您使用的是哪种算法,但您可以使用多线程来加速。每个线程将处理一个步骤,但必须等待尚未计算的结果(尽管如果它们不随时间改变值,它可以与已经计算的结果一起工作)。这实质上意味着您必须使用锁定/等待机制来等待尚未计算但某个工作线程当前需要继续执行的结果。