Arrays OpenMP阵列转换

Arrays OpenMP阵列转换,arrays,openmp,nested-loops,Arrays,Openmp,Nested Loops,我需要在嵌套循环中执行数组操作。函数dosomething()要求使用这种方式。如何才能正确地执行此操作 #pragma omp parallel { #pragma omp for ordered for (int i = 1; i < iter; i++) { #pragma omp ordered for (int j = 0; j < rows; j++) { info2[j][0] = info[j];

我需要在嵌套循环中执行数组操作。函数
dosomething()
要求使用这种方式。如何才能正确地执行此操作

#pragma omp parallel
{
#pragma omp for ordered
for (int i = 1; i < iter; i++)
{

       #pragma omp ordered
        for (int j = 0; j < rows; j++)
        {
            info2[j][0] = info[j];
        }

        dosomething(info2);
}
}
#pragma omp并行
{
#已订购的pragma omp
对于(int i=1;i

这就是我的问题:如果没有有序指令,数组
info2
每次都是不正确的。然而,使用有序指令要比使用串行指令花费更多的时间。有什么更好的方法

这听起来像是比赛条件。使
info2
私有化
(您可以称之为
info3
)应该注意这一点。您可能需要在并行区域之后执行某种缩减,以便从所有这些
info3
中获得正确的
info2
。顺便问一下,您为什么不能执行
info2[0:rows-1][0]=info[0:rows-1](我不确定正确的C语法,我使用Fortran)完全避免循环?现代CPU使用其硬件支持自动并行执行此类操作,可能比使用OpenMP更快。@PetrH不,C没有。@PetrH基本上是这样的#pragma omp parallel{#pragma omp for private(info3)for(inti=1;ij
上并行内部循环如何?行的大小是多少?无论如何,阅读
info2[j][0]
都是非常不友好的。