tbb parallel_for例如没有lambda的c ++

时间:2013-01-24 07:15:05

标签: c++ lambda tbb parallel-for

你可以在没有使用lambda表达式的情况下给我一个关于tbb“parallel_for”的例子吗?因为我不能在Ubuntu系统的C ++编译器下运行lambda表达式,我不知道为什么。 简而言之:请将此循环转换为parallel_for please。

void print(int n)
{
    cout<<n<<endl;
}
for(int i=0; i<100; i++)
{
    print(i);
}

顺便说一下,如果谁能告诉我如何在linux系统中运行C ++ lambda表达式,那对我来说会更好。感谢。

3 个答案:

答案 0 :(得分:4)

parallel_for将采用任何函子,可以是lambda,functor类或普通旧函数;以下应该也可以正常工作:

#include "tbb/tbb.h"
using namespace tbb;
...
void print( size_t n) {
   printf("hellow world %d\n", n);
}
void print_range( const blocked_range<size_t> & r ){
     for( size_t i = r.begin(); i != r.end(); ++i )
         printf("hello from range: %d\n", i);
}
void doit() {
      parallel_for<size_t>( 1, 10, 1, print );
      parallel_for( blocked_range<size_t>(1,10), print_range );
}

答案 1 :(得分:1)

使用lambdas下载gcc 4.7或更高版本并给他选项-std=c++11

答案 2 :(得分:1)

#include "tbb/tbb.h"
using namespace tbb;
class ApplyFoo {
  float *const my_a;
  public:
    void operator()( const blocked_range<size_t>& r ) const {
      float *a = my_a;
      for( size_t i=r.begin(); i!=r.end(); ++i )
        Foo(a[i]);
    }
    ApplyFoo( float a[] ) :
      my_a(a) {}
  };
  void ParallelApplyFoo( float a[], size_t n ) {
  parallel_for(blocked_range<size_t>(0,n), ApplyFoo(a));
}

Source