如果我有这样的循环
int main (){
....
for (i=0; i< N; i++)
{
/*Do some calculations*/
for (j=0; j<M; j++)
{
/*Do more calculations*/
compute_x( some pointers as args );
}
compute_y(some pointer as args);
}
...
return value;
}
and
void compute_x( some pointers as args )
{
/* some calculations*/
for (h=0; h<COUNT; h++)
{
...
}
}
}
和 compute_y() 类似。
我的问题是,如果我使用 OpenMP 指令并行化主循环中的外循环,
#pragma omp parallel for schedule (runtime) private ( ...)
for (i=0; i< N; i++)
{
...
}
函数的行为compute_x()
和compute_y()
?? 据我了解,它们将由每个线程执行,因此 for 循环compute_x()
将由每个线程从 0 执行到 COUNT 。
如果这是正确的,我还能做些什么来在函数的 for 循环中分担工作负载compute_x()
(假设没有数据依赖性)。我的第一个猜测是让函数 compute_x() 和 compute_y() 内联,但函数相当大,而且它们还调用其他函数,幸运的是,它们也可以并行执行。