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.