Saturday, 8 June 2013

openmp issues when three do-loops are involved (fortran)

openmp issues when three do-loops are involved (fortran)

I am very confused about this problem regarding openmp in fortran. Specifically, when I write the program like this:
PROGRAM TEST

  IMPLICIT NONE

  INTEGER :: i,j,l
  INTEGER :: M(2,2)
  i=2
  j=2
  l=41


  !$OMP PARALLEL SHARED(M),PRIVATE(l,i,j)
  !$OMP DO

    DO i=1,2
      DO j=1,2
       DO l=0,41
      M(i,j)=M(i,j)+1
    ENDDO
    ENDDO
    ENDDO     
    !$OMP END DO
    !$OMP END PARALLEL


    END PROGRAM TEST
After compiling by: ifort -openmp test.f90, it works well, and the results of M(1,1) is 42 as expected.
However, when I only adjust the order of sum over l and {i,j}, like the following:
PROGRAM TEST

  IMPLICIT NONE

  INTEGER :: i,j,l
  INTEGER :: M(2,2)
  i=2
  j=2
  l=41


  !$OMP PARALLEL SHARED(M),PRIVATE(l,i,j)
  !$OMP DO

  DO l=0,41
    DO i=1,2
      DO j=1,2
      M(i,j)=M(i,j)+1
    ENDDO
    ENDDO
    ENDDO     
    !$OMP END DO
    !$OMP END PARALLEL


    END PROGRAM TEST
After compiling by: ifort -openmp test.f90, it doesn't work well. In fact, when you run a.out several times, the results of M(1,1) seems to be random. Does anyone know what's the problem? Also, if I want to obtain the right results, under the summing order:
DO l=0,41
    DO i=1,2
      DO j=1,2
what part should I modify this code?
Many thanks for any help.

No comments:

Post a Comment