我有这样的场景:
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
for (k = 0; k < x; k++)
{
val = 2*i + j + 4*k
if (val != 0)
{
for(t = 0; t < l; t++)
{
someFunction((i + t) + someFunction(j + t) + k*t)
}
}
}
}
}
考虑到这是块 A,现在我的代码中有两个类似的块。我想将它们并行放置,所以我使用了 OpenMP 编译指示。但是我无法并行化它,因为在这种情况下我有点困惑哪些变量将是共享的和私有的。如果内部循环中的函数调用是 sum += x 之类的操作,那么我可以添加一个归约子句。一般来说,当我们有一个嵌套的 for 循环,然后另一个内部 for 循环执行主要操作时,如何使用 OpenMP 并行化代码。我尝试声明一个并行区域,然后简单地将 pragma fors 放在块之前,但我肯定错过了一点!
谢谢,萨扬