Я ищу способ выполнить разделы кода параллельно, используя несколько потоков для каждого раздела. Например, если у меня есть 16 потоков и две задачи, я хочу, чтобы 8 ниток каждый для одновременного выполнения этих двух задач. OpenMP имеет несколько конструкций ( раздел
, задача
), которые выполняют общий код параллельно, но они являются однопоточными. В моем сценарии используют раздел
или или
приведут к одному потоку, выполняющей каждую из двух задач, в то время как 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();
}