我想知道在 OpenMP 的 private() 子句中可以定义的变量数量是否有任何限制。
我有一个代码,它有 4 个带有很多变量的循环。最外层的 for 循环可以使用 pragma 轻松并行化。此外,最里面的循环也可以使用 pragma 并行化。但我一次只使用一个编译指示。(无论是最外层还是最内层)当然,在最内层循环中使用 pragma 是不可取的,因为线程创建的开销很大,因为它上面有 3 个 for 循环。我只是将 pragma 用于正确性测试目的。
#pragma omp parallel for private(var1,var2,...i,k,l)
for(j = ...)
{
int var1;
int var2;
for (i = ... )
{
...
for(k = ... )
{
...
for(l = ... )
{
...
...
}
}
}
}
或者
for(j = ...)
{
int var1;
int var2;
for (i = ... )
{
...
for(k = ... )
{
...
#pragma omp parallel for private(var3,var4)
for(l = ... )
{
int var3;
int var4;
}
}
}
}
最外层 for 循环的正确性测试失败。与最内层循环相比,最外层循环的私有变量列表大约有 29 个,而最内层 pragma 包含大约 21 个私有变量列表中的变量。
我将 C 版本与 OpenMp 版本进行比较,打印数组中的值并进行排序和比较。