Quantcast
Channel: Intel® Fortran Compiler for Linux* and macOS*
Viewing all articles
Browse latest Browse all 2583

Possible OpenMP SIMD compiler bug

$
0
0

We encountered a possible problem with OpenMP SIMD vectorization.

 

Here is the simplest piece of code which generates the error:
 

program test
implicit none
integer, parameter :: n=4
integer i,j,k,iv(2)
real(8) a(n*n)

a(:)=0.d0

do j=1,n
  k=(j-1)*n
!$OMP SIMD PRIVATE(iv)
  do i=1,n
    k=k+1
    a(k)=1
    iv(:)=1
  end do
end do

print *,a

end program

 

The program should fill the matrix a with ones. Instead the variable k is corrupted by the assignment iv(:)=1 even though iv is not used.

If iv has dimension 1 then the problem disappears. Removing the PRIVATE clause also fixes the problem.

 

(Do I understand correctly that any variable not declared as PRIVATE in a SIMD loop is automatically shared and updated atomically? In other words, does the OpenMP SIMD standard ensure that the variable k is incremented correctly?)

 

The problem occurs with Intel Fortran versions 17 and 18. GNU Fortran version 8.2.1 works fine.

 


Viewing all articles
Browse latest Browse all 2583

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>