Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops OpenMP问题:fortran中的嵌套循环_Loops_Nested_Fortran_Openmp - Fatal编程技术网

Loops OpenMP问题:fortran中的嵌套循环

Loops OpenMP问题:fortran中的嵌套循环,loops,nested,fortran,openmp,Loops,Nested,Fortran,Openmp,我对以下fortran代码有一个问题。我只想把一个四维数组转换成一个三维数组,由于其他原因,我不能反转循环的顺序。我只希望这3个内部循环在OpenMP环境中是并行的 PROGRAM TEST USE ISO_FORTRAN_ENV IMPLICIT NONE INTEGER(INT32), SAVE :: ii,i,j,k,lx,ly,lz REAL(REAL64),DIMENSION(:,:,:,:),ALLOCATABLE,SAVE :: tab4 R

我对以下fortran代码有一个问题。我只想把一个四维数组转换成一个三维数组,由于其他原因,我不能反转循环的顺序。我只希望这3个内部循环在OpenMP环境中是并行的

 PROGRAM TEST

   USE ISO_FORTRAN_ENV

   IMPLICIT NONE

   INTEGER(INT32), SAVE :: ii,i,j,k,lx,ly,lz

   REAL(REAL64),DIMENSION(:,:,:,:),ALLOCATABLE,SAVE :: tab4
   REAL(REAL64),DIMENSION(  :,:,:),ALLOCATABLE,SAVE :: tab3 

   ALLOCATE(...)
   CALL INITIALIZE_TO_ZERO_ALL_TABS       

   $OMP PARALLEL
   DO ii=1,6

      !$OMP DO SCHEDULE(RUNTIME)
      DO k=0,lz-1
        DO j=0,ly-1
          DO i=0,lx-1                    !<-- flagged error lign
            tab3(i,j,k) = tab4(ii,i,j,k)
          END DO
        END DO
      END DO
      !$OMP END DO

      CALL SOME_SUBROUTINE(tab3)

    END DO

    !$OMP END PARALLEL

  END PROGRAM TEST
程序测试
使用ISO_FORTRAN_ENV
隐式无
整数(INT32),SAVE::ii,i,j,k,lx,ly,lz
实(REAL64)、维度(:,:,:,:,:)、可分配、保存::表4
实(REAL64)、维度(:,:,:)、可分配、保存::表3
分配(…)
调用初始化\u到\u零\u所有\u选项卡
$OMP并行
DO ii=1,6
!$OMP DO计划(运行时)
DO k=0,lz-1
DO j=0,ly-1

i=0,lx-1!你从哪里开始你的平行区域?变量的范围是什么?@francescalus eps_voigt是一个具有概要文件(6,lx,ly,lz)的四维表tab7是一个具有概要文件(lx,ly,lz)的三维表@IanBush在代码的其他地方,并行区域是在前面启动的。在这些嵌套循环之前,代码中的循环没有问题。我们真的需要看到一个。你给我们看的“代码”中不可能真的有问题,因为它不是真正的代码,而是伪代码。另外,你的系统没有告诉你运行时错误发生在哪一行吗?现在考虑OpenMP数据可访问性属性<代码>共享< /代码>和<代码>私有< /代码>,并考虑程序中的哪些变量应该具有一个或另一个属性,哪些属性实际上是这样做的。变量的范围是什么?@francescalus eps_voigt是一个具有概要文件(6,lx,ly,lz)的四维表tab7是一个具有概要文件(lx,ly,lz)的三维表@IanBush在代码的其他地方,并行区域是在前面启动的。在这些嵌套循环之前,代码中的循环没有问题。我们真的需要看到一个。你给我们看的“代码”中不可能真的有问题,因为它不是真正的代码,而是伪代码。另外,你的系统没有告诉你运行时错误发生在哪一行吗?现在考虑OpenMP数据可访问性属性<代码>共享< /代码>和<代码>私有< /代码>,并考虑程序中的哪些变量应该有一个或另一个属性,哪些是事实上的变量。