The vectorization report can provide information about loops that could take advantage of Intel® Streaming SIMD Extensions (Intel® SSE3, SSE2, and SSE) vectorization, and it is available on systems based on IA-32 and Intel® 64 architectures.
See Using Parallelism for information on other vectorization options.
The -vec-report (Linux* and Mac OS* X) or /Qvec-report (Windows*) option directs the compiler to generate the vectorization reports with different levels of information. Specify a value of 3 to generate the maximum diagnostic details.
Operating System |
Command |
---|---|
Linux and Mac OS X |
ifort -c -xSSSE3 -vec-report3 sample.f90 |
Windows |
ifort /c /QxSSSE3 /Qvec-report:3 sample.f90 |
where -c (Linux and Mac OS X) or /c (Windows) instructs the compiler to compile the example without generating an executable.
Linux and Mac OS X: The space between the option and the phase is optional.
Windows: The colon between the option and phase is optional.
Some vectorization report messages and their explanations are provided below:
The following example results illustrate the type of information generated by the vectorization report:
Example results |
---|
sample.f90(27) : (col. 9) remark: loop was not vectorized: not inner loop. sample.f90(28) : (col. 11) remark: LOOP WAS VECTORIZED. sample.f90(31) : (col. 9) remark: loop was not vectorized: not inner loop. sample.f90(32) : (col. 11) remark: LOOP WAS VECTORIZED. sample.f90(37) : (col. 10) remark: loop was not vectorized: not inner loop. sample.f90(38) : (col. 12) remark: loop was not vectorized: not inner loop. sample.f90(40) : (col. 14) remark: loop was not vectorized: vectorization possible but seems inefficient. sample.f90(46) : (col. 10) remark: loop was not vectorized: not inner loop. sample.f90(47) : (col. 12) remark: loop was not vectorized: contains unvectorizable statement at line 48. |
If the compiler reports "remark: loop was not vectorized" because of the existence of vector dependence, then you should analyze the loop for vector dependence. If you determine there is no legitimate vector dependence, then the message indicates that the compiler was assuming the pointers or arrays in the loop were dependent, which implies the pointers or arrays were aliased. Use memory disambiguation techniques to resolve these cases.
There are three major types of vector dependence: FLOW, ANTI, and OUTPUT.
There are a number of situations where the vectorization report may indicate vector dependencies. The following situations will sometimes be reported as vector dependencies, non-unit stride, low trip count, and complex subscript expression.
Non-Unit Stride
The report might indicate that a loop could not be vectorized when the memory is accessed in a non-Unit Stride manner. This means that nonconsecutive memory locations are being accessed in the loop. In such cases, see if loop interchange can help or if it is practical. If not then you can force vectorization sometimes through vector always directive; however, you should verify improvement.
Copyright © 1996-2010, Intel Corporation. All rights reserved.