如何摆脱循环的任务团队?

时间:2011-11-01 04:50:26

标签: c loops parallel-processing openmp

我有两种工作要做,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 个答案:

答案 0 :(得分:1)

这是一种完全绕过问题的(干净)方法:

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

如果这不合适,那么我想到的另一个解决方案是使用嵌套并行性。但那太乱了。