Hej伙计,
我正致力于将Text mining / Natural语言应用程序从单核移植到Map-Reduce风格系统。其中一个步骤涉及类似于此的while循环:
Queue<Element>;
while (!queue.empty()) {
Element e = queue.next();
Set<Element> result = calculateResultSet(e);
if (!result.empty()) {
queue.addAll(result);
}
}
每次迭代都取决于前一次(种类)的结果。无法确定此循环必须执行的迭代次数。
有没有一种方法可以并行化这样的串行算法?我试图想出一个能够提供自己输入的反馈机制,但是如何进行并行化?
感谢您的任何帮助/评论
答案 0 :(得分:2)
也许你可以将calculateResultSet
分成几个不同的函数来操作整个集合。这样,您可以为整个集提供所有功能,并让每个功能执行单独的操作。完成所有功能后,您可以将所有结果提供给另一个功能以创建最终输出。这将允许您将数据发送到不同的节点,执行操作,最后使用分布式架构收集结果。
您还可以研究共享的概念。一个典型的例子是斐波纳契数列,其中xn依赖于xn-1和xn-2。以下是使用OpenMP的并行化版本的示例:http://myxman.org/dp/node/182
答案 1 :(得分:1)
Mstoeckli的建议很好。或者,如果您的数据非常大,也许可以将数据集分开并对集合的各个部分进行循环,然后在预定的迭代次数(或在某种停止标准之后)重新组合数据。
你需要进行一些实验 - 一些问题往往很好,即使有很多近似值,其他问题根本没有。