A vectorization report shows what loops in your code were vectorized and explains why other loops were not vectorized. To generate a vectorization report, use the -vec-report1 or the -vec-report2 compiler options. These options generate reports that show the loops in your code that were vectorized and the reason why other loops were not vectorized.
The -vect-report1 option generates a report with the loops in your code that were vectorized while the -vec-report2 option generates a report with both the loops in your code that were vectorized and the reason why other loops were not vectorized.
Because vectorization is off with the -O1 option, the compiler does not generate a vectorization report. To generate a vectorization report, compile your project with the -O2 and -vec-report1 options:
ifort -real-size 64 -O2 -vec-report1 matvec.f90 driver.f90 -o MatVector
Recompile the program and then execute MatVector. Record the new execution time. The reduction in time is mostly due to auto-vectorization of the inner loop at line 32 noted in the vectorization report:
matvec.f90(32) (col. 3): remark: LOOP WAS VECTORIZED. matvec.f90(38) (col. 6): remark: LOOP WAS VECTORIZED. driver.f90(59) (col. 5): remark: LOOP WAS VECTORIZED. driver.f90(61) (col. 5): remark: LOOP WAS VECTORIZED. driver.f90(80) (col. 29): remark: LOOP WAS VECTORIZED.
The -vec-report2 option returns a list that also includes loops that were not vectorized, along with the reason why the compiler did not vectorize them.
Recompile your project with the -vec-report2 option.
ifort -real-size 64 -O2 -vec-report2 matvec.f90 driver.f90 -o MatVector
The vectorization report indicates that the loop at line 33 in matvec.f90 did not vectorize because it is not the innermost loop of the loop nest..
matvec.f90(32) (col. 3): remark: LOOP WAS VECTORIZED. matvec.f90(33) (col. 3): remark: loop was not vectorized: not inner loop. matvec.f90(38) (col. 6): remark: LOOP WAS VECTORIZED. driver.f90(59) (col. 5): remark: loop was not vectorized: not inner loop. driver.f90(59) (col. 5): remark: loop was not vectorized: vectorization possible but seems inefficient. driver.f90(59) (col. 5): remark: loop was not vectorized: not inner loop. driver.f90(59) (col. 5): remark: loop was not vectorized: subscript too complex. driver.f90(59) (col. 5): remark: loop was not vectorized: not inner loop. driver.f90(59) (col. 5): remark: LOOP WAS VECTORIZED. driver.f90(61) (col. 5): remark: loop was not vectorized: vectorization possible but seems inefficient. driver.f90(61) (col. 5): remark: LOOP WAS VECTORIZED. driver.f90(80) (col. 29): remark: LOOP WAS VECTORIZED. driver.f90(74) (col. 7): remark: loop was not vectorized: nonstandard loop is not a vectorization candidate.
Your line and column numbers may be different.
For more information on the -vec-report compiler option, see the Compiler Options section in the Compiler User and Reference Guide.