我有一个循环,它在一个并行结构中,如下所示
# pragma omp parallel ... //directives
{
// other loops ....
#pragma omp for
for (i=1; i<=nx; i++) for (j=1; j<=ny; j++) for (k=1; k<=nz; k++)
{
p_sparse_s[i][j][k] = RLL[i][j][k] + (riri_sparse2 / noemer_sparse) * p_sparse_s[i][j][k];
}
// other loops ....
}
在检查时,由于假定的依赖关系,此循环似乎未被矢量化。在进一步使用依赖性分析进行检查时,不存在依赖性(从代码中可以明显看出)。该如何更改指令,以便告诉编译器强制矢量化?
P、 如果我使用ivdep指令,那么编译器也不会对循环进行矢量化。
# pragma omp parallel ... //directives
{
// other loops ....
#pragma ivdep
#pragma omp for
for (i=1; i<=nx; i++) for (j=1; j<=ny; j++) for (k=1; k<=nz; k++)
{
p_sparse_s[i][j][k] = RLL[i][j][k] + (riri_sparse2 / noemer_sparse) * p_sparse_s[i][j][k];
}
// other loops ....
}