第一课: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());
|
阅读(673) | 评论(0) | 转发(0) |