Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.

Vectorization report

Tim_Gallagher
New Contributor II
582 Views
Hi,

I ran the compiler with the options:

-O2 -xhost -vec-report5

and I get some information, but it's not entirely useful. For example:

CompileOptions.f90(27): (col. 33) remark: vector dependence: assumed OUTPUT dependence between (unknown) line 27 and (unknown) line 27.

CompileOptions.f90(27): (col. 33) remark: vector dependence: assumed FLOW dependence between var$95 line 27 and var$95 line 27.

I have literally thousands of lines like that where they all refer to the same line number but have either (unknown) or var$ something. Did I miss a step somewhere?

Thanks,

Tim
0 Kudos
2 Replies
TimP
Honored Contributor III
582 Views
Perhaps if you would show an example you might get a more useful explanation. -vec-report2 would likely give you enough comments to get started. Usually, this means the compiler believes you have a part of an array left of = which may overlap part of the same array on the right side of =. The var$ hidden variables would be created by the compiler; it's hard to imagine what source code would give rise to this.
0 Kudos
Tim_Gallagher
New Contributor II
582 Views
This particular line corresponds to:

[fortran]DO i = 1, SIZE(compile_options,1) WRITE(fid,strfmt) '<', TRIM(compile_options(i,1)), '>', & TRIM(compile_options(i,2)), '' END DO[/fortran]

where

[fortran]CHARACTER(LEN=67), DIMENSION(4,2) :: compile_options [/fortran]
Now, I'm not worried about optimizing this loop. But I have 1174 lines of output from the vec-report that talks about var$ and 4100 lines that refer to (unknown).

It looks like, just from spot checking several, that the var$ messages are all about loops that have READ, WRITE, PRINT, or function calls in them.

The unknown references are more confusing. For instance,

viscous.F90(680): (col. 25) remark: vector dependence: assumed FLOW dependence between (unknown) line 680 and sx line 674.

where line 674 is:

[bash]diffVel = -RDIFT / iblk%Sc_t * rmwt(ns) & / iblk%average%MW(I,J,K) & * ( DMDX(NS,I)*SX(I,J,K) + & DMDY(NS,I)*SY(I,J,K) + & DMDZ(NS,I)*SZ(I,J,K) )[/bash]

and 680 is:
[fortran]iblk%FLUX(iblk%INCHE+NS,I,J,K) = iblk%FLUX(iblk%INCHE+NS,I,J,K) + diffVel[/fortran]

Those are the only two lines in the DO loop over NS (1 to NSPECI, which is a runtime constant). What is it trying to say here and why does it think SX would be a problem when the only thing in common between the two lines is diffVel? Why does it say (unknown) instead of one of the two variables on line 680?

Tim
0 Kudos
Reply