Проблема OpenMP: вложенные циклы в фортране - PullRequest
1 голос
/ 03 мая 2019

У меня проблема со следующим кодом на фортране. Я просто хочу перенести 4-мерный массив в 3-й и не могу изменить порядок циклов по другим причинам. Я хочу, чтобы 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

Компиляция в порядке. Но во время выполнения появляется следующее сообщение об ошибке: «Ошибка времени выполнения Fortran: переменная цикла была изменена» * .

Кажется, что существует проблема между ii, которая появляется в tab4 (ii, i, j, k), и OpenMP. Для информации, эта проблема исчезает, когда я компилирую без -fopenmp.

У вас есть представление о том, что происходит в этих простых вложенных циклах?

...