Можете ли вы привести пример tbb «parallel_for» без использования лямбда-выражения? Потому что я не могу запустить лямбда-выражение в компиляторе C ++ системы Ubuntu, и я не знаю почему.
чтобы быть кратким: превратите этот цикл for в parallel_for, пожалуйста.
void print(int n)
{
cout<<n<<endl;
}
for(int i=0; i<100; i++)
{
print(i);
}
Кстати, если кто подскажет, как запустить лямбда-выражение C ++ в системе Linux, это было бы лучше для меня. Благодарю.
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 );
}
Чтобы использовать lambdas, скачайте gcc версии 4.7 или новее и дайте ему возможность -std=c++11
#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));
}