Product Version: Intel® Fortran Compiler 15.0 and above
When using Intel® Fortran Compiler's optimization and vectorization report options /O2 /Qopt-report:2 /Qopt-report-phase:vec the vectorization report generated states that loop was not vectorized due to vector dependence which prevents vectorization.
An example below will generate the following remark in optimization report:
integer function foo(a, n) implicit none integer, intent(in) :: n real, intent(inout) :: a(n) real :: max integer :: inx, i max = a(0) do i=1,n if (max < a(i)) then max = a(i) inx = i*i endif end do foo = inx end function
ifort -c /O2 /Qopt-report:2 /Qopt-report-phase:vec /Qopt-report-file:stdout f15344.f90
Report from: Vector optimizations [vec]
LOOP BEGIN at f15344.f90(9,5)
remark #15344: loop was not vectorized: vector dependence prevents vectorization. First dependence is shown below. Use level 5 report for details [ f15344.f90(12,13) ]
remark #15346: vector dependence: assumed ANTI dependence between line 10 and line 11 [ f15344.f90(12,13) ]
Rewriting the code as in the following example will resolve vector dependence and the loop will be vectorized
integer function foo(a, n) implicit none integer, intent(in) :: n real, intent(inout) :: a(n) real :: max integer :: inx, i max = a(0) do i=1,n if (max < a(i)) then max = a(i) inx = i endif end do foo = inx*inx end function
Product and Performance Information
Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex.