我是OpenMP的新手,我无法在每个线程循环迭代中创建线程。我的问题可能听起来很幼稚,请耐心等待。
#pragma omp parallel private(a,b) shared(f)
{
#pragma omp for
for(...)
{
//some operations
// I want to parallelize the code in italics along within in the multi threaded for loop
*int x=func1(a,b);*
*int val1=validate(x);*
*int y=func2(a,b);*
*int val2=validate(y);*
}
}
答案 0 :(得分:0)
在for循环中,所有线程都忙于循环迭代,因此没有资源可以并行执行迭代。如果工作得到很好的平衡,你将无法获得更好的表现。
如果很难/不可能平衡工作与平行。您可以尝试在循环中生成任务,然后进行后续工作。但请注意任务生成的开销。
#pragma omp parallel private(a,b) shared(f)
{
#pragma omp for nowait
for(...)
{
//some operations
#pragma omp task
{
int x=func1(a,b);
int val1=validate(x);
}
#pragma omp task
{
int y=func2(a,b);
int val2=validate(y);
}
}
// wait for all tasks to be finished (implicit at the end of the parallel region (here))
#pragma omp taskwait
}