Intel® Fortran Compiler 17.0 Developer Guide and Reference

GAP Message (Diagnostic ID 30513)

Message

Insert a "%s ivdep" statement right before the loop at line %d to vectorize the loop.

Advice

Add "!DIR$ IVDEP" before the specified loop. This directive enables the vectorization of the loop at the specified line by ignoring some of the assumed cross-iteration data dependencies.

Example

Consider the following:

subroutine foo(a, m, n)
  integer m, n
		real a(n)
  do i=1,n
    a(i) = a(i+m) + 1
  enddo 
end

In this case, the compiler is unable to vectorize the loop because m could be -1, where each iteration is dependent on the previous iteration. If m is known to be positive, you can vectorize this loop.

If you determine it is safe to do so, you can add the directive as follows:

subroutine foo(a, m, n)
  integer m, n
		real a(n) 
!dir$ ivdep
  do i=1,n
    a(i) = a(i+m) + 1
  enddo 
end

Verify

Confirm that any arrays in the loop do not have unsafe cross-iteration dependencies. A cross-iteration dependency exists if a memory location is modified in an iteration of the loop and accessed by a fetch or store operation in another iteration of the loop. Make sure that there are no such dependencies, or that any cross-iteration dependencies can be safely ignored.