英特尔tbb parallel_for:带参数传递类成员函数

Intel tbb parallel_for: pass class member function with parameters?

本文关键字:参数传递 成员 函数 tbb parallel for 英特尔      更新时间:2023-10-16

是否可以将类成员函数(带参数)传递到parallel_fo?大致如下:

void classT::A(const tbb::blocked_range<std::size_t>& r,b) {}
void classT::B(e,f,g) { 
   tbb::parallel_for( blocked_range<size_t>(0,n), <need to call A with parameter b, 
                                                                       along with r> ) 
}

看看这个例子。

他们创建了一个类,并为该类提供所需的所有参数。在该类中还有一个operator(),它对数据进行运算。然后用该类的一个实例调用parallel_fo。

parallel_for(blocked_range<int>(0, nElements, 100), ArraySummer( p_A, p_B, p_SUM_TBB ) ); 
//The class is arraysummer

如何做到:

class ClassTACaller
{
   int* m_parameter;
   ClassT* m_Tinstance
public:
   ClassTACaller(ClassT* tinstance, int* param):m_parameter(param), m_Tinstance(tinstance){}
   void operator() ( const blocked_range<int>& r ) const 
   {
      m_Tinstance->A(r, param);
   }
};
parallel_for(blocked_range<int>(0, nElements, 100), ClassTACaller(&classTinstance, &x));