并行化串行算法

时间:2012-05-02 15:11:05

标签: algorithm mapreduce parallel-processing distributed-computing text-mining

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);
    }
}

每次迭代都取决于前一次(种类)的结果。无法确定此循环必须执行的迭代次数。

有没有一种方法可以并行化这样的串行算法?我试图想出一个能够提供自己输入的反馈机制,但是如何进行并行化?

感谢您的任何帮助/评论

2 个答案:

答案 0 :(得分:2)

也许你可以将calculateResultSet分成几个不同的函数来操作整个集合。这样,您可以为整个集提供所有功能,并让每个功能执行单独的操作。完成所有功能后,您可以将所有结果提供给另一个功能以创建最终输出。这将允许您将数据发送到不同的节点,执行操作,最后使用分布式架构收集结果。

您还可以研究共享的概念。一个典型的例子是斐波纳契数列,其中xn依赖于xn-1和xn-2。以下是使用OpenMP的并行化版本的示例:http://myxman.org/dp/node/182

答案 1 :(得分:1)

Mstoeckli的建议很好。或者,如果您的数据非常大,也许可以将数据集分开并对集合的各个部分进行循环,然后在预定的迭代次数(或在某种停止标准之后)重新组合数据。

你需要进行一些实验 - 一些问题往往很好,即使有很多近似值,其他问题根本没有。