Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Beginner

do concurrent: Bug in code or in compiler?

Hi,

I've started to substitute "forall" statements with "do concurrent" loops and found an unexpected behavior when compiling with -Ox, x>1 and openMP and autoparallelization, i.e.

 ifort test.f90 -O2  -parallel -qopenmp

for the Intel compiler in versions 18.0.1 and 18.0.3. I seems like that the "do concurrent" loop is not executed at all. Is my code invalid or does the compiler makes a mistake when doing the optimization?

program test
  implicit none
  real, dimension(4) :: c
 
  c = [1.0,2.0,5.0,3.3]
  write(6,*) math_qToR(c)
  write(6,*) math_qToR2(c)

contains

function math_qToR(q)
 implicit none
 real, dimension(4), intent(in) :: q
 real, dimension(3,3) :: math_qToR
 integer :: i, j

 forall (i = 1:3, j = 1:3)
   math_qToR(i,j) = q(i+1) * q(j+1)
 end forall

end function math_qToR

function math_qToR2(q)
 implicit none
 real, dimension(4), intent(in) :: q
 real, dimension(3,3) :: math_qToR2
 integer :: i, j
 
 do concurrent (i = 1:3, j = 1:3)
   !write(6,*) i,j ! cures the behavior
   math_qToR2(i,j) = q(i+1) * q(j+1)
 enddo

end function math_qToR2


end program

 

0 Kudos