【问题标题】:tbb parallel_for example c++ without lambdatbb parallel_for example c++ without lambda
【发布时间】:2013-01-24 07:15:04
【问题描述】:

你能给我一个不使用 lambda 表达式的关于 tbb "parallel_for" 的例子吗?因为我无法在 Ubuntu 系统的 C++ 编译器下运行 lambda 表达式,我也不知道为什么。 简而言之:请将此 for 循环转换为 parallel_for。

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

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

【问题讨论】:

标签: c++ lambda tbb parallel-for


【解决方案1】:

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

#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 );
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
      #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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 2012-12-30
        • 1970-01-01
        • 2011-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多