HEJ人,并行化串行算法
我上移植从单核文本挖掘/自然语言应用到地图,减少风格系统的工作。其中一个步骤涉及一个类似于此的while循环:
Queue<Element>;
while (!queue.empty()) {
Element e = queue.next();
Set<Element> result = calculateResultSet(e);
if (!result.empty()) {
queue.addAll(result);
}
}
每次迭代都取决于之前(种类)的结果。没有办法确定这个循环必须执行的迭代次数。
有没有一种方法来并行化一个串行算法,比如这个?我试图想到一个反馈机制,它可以提供自己的输入,但是如何去平行化呢?
感谢所有帮助/附注
是否有任何理由不能根据原始队列对工作进行分区?例如。排序很重要,原始队列很短,在最短和最长的运行时间之间会有很大的差异吗? –
Edvard,函数calculateResultSet()查看整个输入集,在此步骤开始之前需要完整计算。 –
所以,按照字母顺序添加元素,并用'[a,b,c]'初始列表,'a'将评估'[b,c]','b'评估'[b,c,d ,e]'(例如)等? 'calculateResultSet'可以用不完整的数据开始处理(即它可以处理队列直到下一个部分准备好)?我不确定它如何适合MapReduce范例,但似乎所有初始元素都可以开始处理它们的部分列表,直到'a'结束,然后处理'a'直到'b'结束,等等。 –