Как вырваться из команды задания цикла? - PullRequest
1 голос
/ 01 ноября 2011

У меня есть два вида заданий: foobar1 - 3 раза параллельно и foobar2 - 5 раз параллельно. Моя идея состоит в том, чтобы заставить главный поток создать эти две команды работы. но я сталкиваюсь с одной трудностью.

Возможно ли сделать поток выходящим из параллельного цикла? Я имею в виду реализовать такой код, где основная задача может избежать первой команды работы, чтобы создать вторую команду

#pragma omp parallel num_threads(8)
{
    // first team of task which will execute the foobar1 function in parallel

    #pragma omp for schedule(static,1) nowait 
    for(i = 0; i < 3; i++)
    {
        #pragma omp master
        {
            //escape here to create a second team in parallel
        }

        foobar1();
    }

    // second team of task which will execute the foobar2
    #pragma omp for schedule(static,1) nowait
    for(j = 0; j < 5; j++)
    {
        foobar2();
    }
}

1 Ответ

1 голос
/ 01 ноября 2011

Вот один (чистый) подход, который полностью обходит вашу проблему:

#pragma omp parallel for num_threads(8)
for(i = 0; i < 8; i++)
{
    if (i < 3){
        foobar1();
    }else{
        foobar2();
    }
}

Если это не подходит, то я имею в виду другое решение - использовать вложенный параллелизм. Но это грязно.

...