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.