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 /Qvec-report1 or the /Qvec-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 /Qvec-report1 option generates a report with the loops in your code that were vectorized while the /Qvec-report2 option generates a report with both the loops in your code that were vectorized and the reason why other loops were not vectorized.
To use the /Qvec-report1 option, select Project > Properties > C/C++ > Diagnostics > Intel Specific - General > Vectorizer Diagnostic Level > Loops Successfully Vectorized (1)(/Qvec-report1).
Because vectorization is off with the /O1 option, the compiler does not generate a vectorization report. To generate a vectorization report, build your project with the /O2 option:
To set the /O2 option, select Project > Properties > C/C++ > Optimization > General > Optimization > Maximize Speed (/O2).
Rebuild your project and then run the executable (Debug > Start Without Debugging). Record the new execution time. The reduction in time is mostly due to auto-vectorization of the inner loop at line 150 noted in the vectorization report:
Driver.c(150) (col. 4): remark: LOOP WAS VECTORIZED. Driver.c(164) (col. 2): remark: LOOP WAS VECTORIZED. Driver.c(81) (col. 2): remark: LOOP WAS VECTORIZED.
The /Qvec-report2 option returns a list that also includes loops that were not vectorized, along with the reason why the compiler did not vectorize them. Add the /Qvec-report2 option by selecting Project > Properties > C/C++ > Diagnostics > Intel Specific - General > Vectorizer Diagnostic Level > Loops Successfully and Unsuccessfully Vectorized (2)(/Qvec-report2)
Rebuild your project with the /Qvec-report2 option.
The vectorization report indicates that the loop at line 45 in Multiply.c did not vectorize because it is not the innermost loop of the loop nest. Two versions of the innermost loop at line 55 were generated, but neither version was vectorized.
Multiply.c(45) (col. 2): remark: loop was not vectorized: not inner loop. Multiply.c(55) (col. 3): remark: loop was not vectorized: existence of vector dependence. Multiply.c(55) (col. 3): remark: loop skipped: multiversioned. Driver.c(140) (col. 2): remark: loop was not vectorized: not inner loop. Driver.c(140) (col. 2): remark: loop was not vectorized: vectorization possible but seems inefficient. Driver.c(141) (col. 2): remark: loop was not vectorized: vectorization possible but seems inefficient. Driver.c(145) (col. 2): remark: loop was not vectorized: not inner loop. Driver.c(148) (col. 3): remark: loop was not vectorized: not inner loop. Driver.c(150) (col. 4): remark: LOOP WAS VECTORIZED. Driver.c(164) (col. 2): remark: LOOP WAS VECTORIZED. Driver.c(81) (col. 2): remark: LOOP WAS VECTORIZED. Driver.c(69) (col. 2): remark: loop was not vectorized: vectorization possible but seems inefficient. Driver.c(54) (col. 2): remark: loop was not vectorized: not inner loop. Driver.c(55) (col. 3): remark: loop was not vectorized: vectorization possible but seems inefficient.
Your line and column numbers may be different.
For more information on the /Qvec-report compiler option, see the Compiler Options section in the Compiler User and Reference Guide.