2

ラムダ式を使用しない tbb "parallel_for" の例を教えてください。Ubuntu システムの C++ コンパイラではラムダ式を実行できないため、その理由はわかりません。簡単に言うと、この for ループを parallel_for に変えてください。

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

ところで、Linux システムで C++ ラムダ式を実行する方法を教えてくれる人がいれば、その方がいいでしょう。ありがとう。

4

3 に答える 3

4

parallel_forは、ラムダ、ファンクタークラス、または単純な古い関数である任意のファンクターを取ります。以下も問題なく動作するはずです。

#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 );
}
于 2013-01-25T12:44:40.057 に答える
1

ラムダを使用するには、gcc バージョン 4.7 以降をダウンロードして、オプションを指定します-std=c++11

于 2013-01-24T07:39:06.727 に答える
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));
}

ソース

于 2013-01-24T07:43:34.417 に答える