我正在寻找一种使用多个线程并行执行代码段的方法。例如,如果我有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();
}