Tutorial: Using Auto Vectorization with Intel® C++ Compiler

ID 758493
Date 4/11/2022
Public

Improving Performance with Interprocedural Optimization

The compiler may be able to perform additional optimizations if it is able to optimize across source line boundaries. These may include, but are not limited to, function inlining. This is enabled with the -ipo option.

Recompile the program using the -ipo option to enable interprocedural optimization.

icc -std=c99 -qopt-report=2 -qopt-report-phase=vec -D NOALIAS -D ALIGNED -ipo Multiply.c Driver.c -o MatVector

Note that the vectorization messages now appear at the point of inlining in Driver.c (line 150) and this is found in the file ipo_out.optrpt.

LOOP BEGIN at Driver.c(152,16)
   remark #15542: loop was not vectorized: inner loop was already vectorized

   LOOP BEGIN at Multiply.c(37,5) inlined into Driver.c(150,9)
      remark #15542: loop was not vectorized: inner loop was already vectorized

      LOOP BEGIN at Multiply.c(49,9) inlined into Driver.c(150,9)
         remark #15300: LOOP WAS VECTORIZED
      LOOP END

      LOOP BEGIN at Multiply.c(49,9) inlined into Driver.c(150,9)
      <Remainder loop for vectorization>
         remark #15335: remainder loop was not vectorized: vectorization possible but seems inefficient. Use vector always directive or -vec-threshold0 to override
      LOOP END
   LOOP END
LOOP END

LOOP BEGIN at Driver.c(74,5) inlined into Driver.c(159,5)
   remark #15300: LOOP WAS VECTORIZED
LOOP END 

NOTE:
Your line and column numbers may be different.

Now, run the executable and record the execution time.

Did you find the information on this page useful?

Characters remaining:

Feedback Message