Generating a Vectorization Report

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:

icc -std=c99 -DNOFUNCCALL -O2 -vec-report1 Multiply.c Driver.c -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 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.

Note

Your line and column numbers may be different.

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.

icc -std=c99 -DNOFUNCCALL -O2 -vec-report2 Multiply.c Driver.c -o MatVector

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.

Note

Previous: Establishing a Performance Baseline Next: Improving Performance by Pointer Disambiguation


Submit feedback on this help topic