ICC / ICPC Vectorization problems: routine skipped: no vectorization candidates

ICC / ICPC Vectorization problems: routine skipped: no vectorization candidates

I have a routine which I expect to be heavily vectorizable, it has many counting loops of what should be vectorizable code.

But I get the following message:

sgp4only.cpp(117): (col. 75) remark: routine skipped: no vectorization candidates.

This message is not helpful to me, it doesn't point me where to look so I'm trying to find things in the documentation to try and no luck so far.

I'm running: Version 10.1 of the compiler.

Before I start posting code for people to analyse I'd like to know if there is a way to get better diagnostics or what this remark really means. I'd think in ANY routine that had a loop I ought to get a more specific remark than this.

7 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

Which compiler options did you set to get this report? vec-report level has to be increased to 2 or 3 to get the compiler to report on loops which are considered, or opt-report may have to be set.
Which loop syntax? I frequently have to turn loops into a for(;iThe compiler will not attempt loop interchange and the like, so as to make stride 1 loops inner, unless -O3 is set. icpc also is more dependent on the restrict extension than some others, in the case where it is not a reduction operation (such as inner_product).

Quoting - matthewng
I have a routine which I expect to be heavily vectorizable, it has many counting loops of what should be vectorizable code.

But I get the following message:

sgp4only.cpp(117): (col. 75) remark: routine skipped: no vectorization candidates.

This message is not helpful to me, it doesn't point me where to look so I'm trying to find things in the documentation to try and no luck so far.

I'm running: Version 10.1 of the compiler.

Before I start posting code for people to analyse I'd like to know if there is a way to get better diagnostics or what this remark really means. I'd think in ANY routine that had a loop I ought to get a more specific remark than this.

Probably, non of the Intel C++ Compiler v10.0/v11.0 documentation can help. These documentation simply explains some sinerio of vectorization problems with simple examples but not with big lines of code. After analysing these examples one has o co-relate the same with problem you have with given program of multi C++ file section of a code.

Since, you havn't posted the code,do check few keythings in your code -
- dependency of any counting loops something here I mean dependency like RAW, WAR & WAR. Vectorization fails when any of this dependency arises through it's pipeline, try resolving any of these dependency by modifying your code. Use Intel Vtune to analyse the assembly of instructions pipeline behaviour.
- there may be some unsupported loop structure which would be preventing vectorization to happen, try to analyze the format of this unsupported loop structure
- ICC-v10.0/11.0 at -O2 & -O3 level supports vectorization by default, simply one has to check with vec-report [n] diagnostic level of report needed to analyze vectorization report, try n=3 as vec-report3.

Please paste the section of code alongwith asm if you still have any problem in vectorizing.

Happy Learning....

~BR
Mukkaysh Srivastav

Quoting - matthewng
I have a routine which I expect to be heavily vectorizable, it has many counting loops of what should be vectorizable code.

But I get the following message:

sgp4only.cpp(117): (col. 75) remark: routine skipped: no vectorization candidates.

This message is not helpful to me, it doesn't point me where to look so I'm trying to find things in the documentation to try and no luck so far.

I'm running: Version 10.1 of the compiler.

Before I start posting code for people to analyse I'd like to know if there is a way to get better diagnostics or what this remark really means. I'd think in ANY routine that had a loop I ought to get a more specific remark than this.

That message usually means that your code really cannot be vectorized -- having a loop is not a guarantee that the compiler will be able to vectorize it. For more detailed vectorization diagnostics use -Qvec_report:2 or -Qvec_report:3. You might also consider version 11 of the compiler which should be able to vectorize more code than version 10.1.

Regards,
Igor Levicki

Quoting - Igor Levicki

That message usually means that your code really cannot be vectorized -- having a loop is not a guarantee that the compiler will be able to vectorize it. For more detailed vectorization diagnostics use -Qvec_report:2 or -Qvec_report:3. You might also consider version 11 of the compiler which should be able to vectorize more code than version 10.1.

You may learn more on "Requirements for loop vectorization" in articlehttp://software.intel.com/en-us/articles/requirements-for-vectorizable-loops/.

Quoting - Om Sachan (Intel)

You may learn more on "Requirements for loop vectorization" in articlehttp://software.intel.com/en-us/articles/requirements-for-vectorizable-loops/.

The "Loop independence" is required for a loop to be vectorized. Reading the Intel C++ document topic "Loop independence" may you further.

Quoting - Om Sachan (Intel)

You may learn more on "Requirements for loop vectorization" in articlehttp://software.intel.com/en-us/articles/requirements-for-vectorizable-loops/.

That's a good article, even though it uses terminology that Intel compiler people disagree with.

Leave a Comment

Please sign in to add a comment. Not a member? Join today