我有两种工作要做,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();
}
}
答案 0 :(得分:1)
这是一种完全绕过问题的(干净)方法:
#pragma omp parallel for num_threads(8)
for(i = 0; i < 8; i++)
{
if (i < 3){
foobar1();
}else{
foobar2();
}
}
如果这不合适,那么我想到的另一个解决方案是使用嵌套并行性。但那太乱了。