openmp распределяет потоки по определенным блокам кода - PullRequest
0 голосов
/ 23 сентября 2018

В моей программе мне нужно разделить n потоков следующим образом:

1) Thread1 выполняет свою конкретную работу

2) n-1 другие потоки выполняют свою работу

Если number_of _threads == 1, то выполняется только действие 1).

Действия 1) и 2) вычисляются параллельно

void main(){
    int number_of_threads;
    std::cin>>number_of_threads;
    omp_set_num_threads(number_of_threads);

    #pragma omp parallel if (number_of_threads>1)
    {
        #pragma omp master // no barrier at the end of master block
            single_calc();

        #pragma omp ??(number_of_threads-1) //second block
            // this section of code is computed by n-1 processes

    }
}

Я пришел к следующим решениям

1) hardcode, чтобы поток с id == 1 не делал 't вычислить второй блок

2) поскольку главный поток имеет id = 0, я могу использовать #pragma omp for, начиная с i = 1 во втором блоке

3) вызывать single_calc () снаружи#pragma omp parallel (но я хочу контролировать количество потоков, вычисляющих этот блок)

Есть ли какое-нибудь элегантное решение для этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...