Chinaunix首页 | 论坛 | 博客
  • 博客访问: 467833
  • 博文数量: 143
  • 博客积分: 6159
  • 博客等级: 准将
  • 技术积分: 1667
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-25 23:08
文章分类

全部博文(143)

文章存档

2013年(1)

2012年(11)

2011年(55)

2010年(76)

分类:

2010-11-27 10:19:37

第一课:parallel_for

比如要做一个工作:

void serial_apply_foo (int a[], int n)
{
    for (int i = 0; i < n; ++i)
        foo(a[i]);
}



利用paralle_for可以将整个a[]分解为多个block,每个block一个thread来完成,如下:
首先实现functor:

class ApplyFoo {
    int *const my_a;
public:
    void operator() (const blocked_range<size_t>& r) {
        int *a = my_a;
        for (int i = r.begin(); i != r.end(); ++i) {
            foo(a[i]);
        }
    }

    ApplyFoo(int a[]) : my_a(a) {}
};


利用parallel_for完成工作:

void parallel_apply_foo (int a[], int n)
{
    parallel_for(blocked_range<size_t>(0, n), ApplyFoo(a));
}

在parallel_for中,将把blocked_range分为很多份,[0,j)[j,...)...,然后每个线程完成自己的[i,j)。

parallel_for的定义为:

template<typename Range, typename Body>
void parallel_for (const Range& range, const Body& body,
                   const simple_partitioner& partitioner = simple_partitioner());


阅读(667) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~