https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82471

            Bug ID: 82471
           Summary: do concurrent is much slower the ordinary do!
           Product: gcc
           Version: 7.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: chinoune.mehdi at hotmail dot com
  Target Milestone: ---

in this example do-concurrent is much slower than ordinary-do :

PROGRAM TEST_DO_SPEED
  IMPLICIT NONE

  REAL, ALLOCATABLE :: A(:,:,:), B(:,:,:), C(:,:,:)
  REAL :: TIC
  INTEGER :: T0, T1, T2
  INTEGER :: I, J, K
  INTEGER, PARAMETER :: L = 512, M = 512, N = 512

  ALLOCATE( A(L,M,N), B(L,M,N), C(L,M,N) )
  CALL RANDOM_NUMBER(A)
  CALL RANDOM_NUMBER(B)

  CALL SYSTEM_CLOCK( T0, TIC)

  DO CONCURRENT( K=1:N, J=1:M, I=1:L)
    C(I,J,K) = A(I,J,K) +B(I,J,K)
  END DO 

  CALL SYSTEM_CLOCK(T1)

  DO K=1,N
    DO J=1,M
      DO I=1,L
        C(I,J,K) = A(I,J,K) +B(I,J,K)
      END DO
    END DO
  END DO

  CALL SYSTEM_CLOCK(T2)

  PRINT*,"DO CONCURRENT : ",(T1-T0)/TIC
  PRINT*,"ORDINARY DO   : ",(T2-T1)/TIC

END PROGRAM

Compiled with : -Ofast
it gives Under MinGW-64 7.2.0 :
 DO CONCURRENT :    13.0620003
 ORDINARY DO   :   0.233999997
and under Ubuntu-16.04-64 7.2.0 :
 DO CONCURRENT :    11.6000004
 ORDINARY DO   :   0.208000004

It looks like with do-concurrent gfortran begin with the first index .
I know that there is no obligations in Standard-Fortran. but at least make it
act like the ordinary-do construct.

Reply via email to