https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82471
--- Comment #2 from Chinoune <chinoune.mehdi at hotmail dot com> --- (In reply to Thomas Koenig from comment #1) > There is a subtle problem with your test case, it is the > ordering of the variables in the DO concurrent statement. > > > 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 > > This is probably not what you meant to write; this > will fail (with the variable bounds you gave above in > > ALLOCATE( A(L,M,N), B(L,M,N), C(L,M,N) ) > > if any of L, M or N has a different value. Why will it fail ?!. Could you please explain. > > If you write > > DO CONCURRENT( I=1:L, K=1:N, J=1:M) > > things are much faster. I know that DO CONCURRENT( I=1:L, J=1:M, K=1:N) is the fastest but I expected that do-concurrent work like ordinary-do by varying the last index in nested loops. And since the do-concurrent can run in any order I expected that the compiler will choose the best order. but it turns that do-concurrent is not portable at all. Intel Fortran Compiler works as I expected. So which order should I use!