第六课:parallel_do
前面介绍的方法都是针对于固定的dataset,在整个处理过程中dataset没有变化,所以可以利用Range来作spliter进行任务分解,但是,现实总是意料之外的。这里我们介绍parallel_do,是基于iterator的并行化方法,并且在处理过程中可以动态添加dataset里面的内容。
class Body {
public:
Body() {}
void operator(arg_type x, parallel_do_feeder<arg_type>& feeder) const {
foo(x);
if (need successor) {
feeder.add(get_successor());
}
}
};
parallel_do(data_set.begin(); data_set.end(), Body());
|
parallel_do的定义如下:
template<typename Body, typename Item>
class parallel_do_feeder_imple : public parallel_do_feeder<Item> {
void internal_add (const Item& item) {
... new iteration_type t <--- item
... task.spawn(t);
}
}
|
阅读(953) | 评论(0) | 转发(0) |