在TBB中实现MapReduce

时间:2014-05-09 21:40:38

标签: c++ parallel-processing mapreduce tbb

我想"模拟" mapreduce用于使用TBB进行软件分配,管道范例似乎是一种很好的方式来看待它,因为串行滤波器可能是I / O,而并行滤波器可能是Map和Reduce实现,但是这个函数实现接收和返回单个元素(如果通过输入只生成一个元组,那么这对于map是可以的,但是如何计算需要多个输出的字数?),并简单地在全局hashmap上聚合而不实际返回"某些东西"

有没有办法为此目的使用管道,或者我应该使用parallel_while / for?

谢谢!

1 个答案:

答案 0 :(得分:2)

并行管道通常不像parallel_for那样扩展,所以我倾向于尝试使用parallel_for或某些并行递归方案。我建议查看并行排序算法以获得指导,因为map-reduce与排序非常相似,只是合并了重复键。对于小核心数量,类似于并行样本排序的东西似乎是很好的灵感。 (有关TBB中的实施,请参阅http://parallelbook.com/sites/parallelbook.com/files/code20131121.zip)。对于大型核心数,类似于并行合并排序的东西可能更好(有关讨论和代码,请参阅https://software.intel.com/en-us/articles/a-parallel-stable-sort-using-c11-for-tbb-cilk-plus-and-openmp)。