我正在寻找一种方法来为每个部分使用多个线程并行执行代码段.例如,如果我有16个线程和两个任务,我希望每个8个线程同时执行这两个任务.OpenMP有几个并行执行通用代码的构造(section,task),但它们是单线程的.在我的场景中,使用section或task将导致一个线程执行两个任务中的每一个,而14个线程闲置.
OpenMP甚至可以实现这样的功能吗?如果是这样,我该怎么做,如果没有,我可以为此目的使用什么?
谢谢你的时间!
编辑2:
让我用示例代码扩展这个问题:
class some_class{
void task(){
cout<<"Entering the task method"<<endl;
#pragma openmp parallel for
for(int i=0; i < large_matrix.rows(); i++){
perform_thread_safe_operation(large_matrix.getRow(i));
}
}
matrix large_matrix;
};
void main(){
//I have 16 cores, so I want to spawn 16 threads
some_class o1;
some_class o2;
// I want 8 of the 16 threads to execute this line:
o1.task();
// and 8 remaining threads to execute this line:
o2.task();
}
Run Code Online (Sandbox Code Playgroud) 我想基于一些共同特征将参考向量MyObject(即vector<MyObject*>)分割成2个或更多个子向量.
我有一个等价函数bool belongToSameGroup(MyObject *x, MyObject *y);,true如果某些数据字段MyObject是相等的,false否则.因为这种等价不是一般性的,仅用于特定目的,我宁愿不超载operator==.
我可以创建一个最好的方法,例如,一个<vector<MyObject*>'s(即vector< vector<MyObject*> >)的向量,以便元素根据它们在函数下的等价性进行分组belongToSameGroup?我不想做一堆for循环并尽可能地利用STL算法和容器.