Могу ли я назначить несколько потоков к разделу кода в OpenMP?

Я ищу способ выполнить разделы кода параллельно, используя несколько потоков для каждого раздела. Например, если у меня есть 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();
}
6
задан Mysticial 6 March 2013 в 17:40
поделиться