Forum Jump

Select Group :
Select Forum :
Sorted By :
Sort Order :
From The :
 
Thread Tools  Search this thread 
matthewng
Total Points:
10
Registered User
April 3, 2009 5:09 PM PDT
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.

tim18
Total Points:
68,267
Status Points:
68,267
Black Belt
April 3, 2009 5:43 PM PDT
Rate
 
#1
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(;i<last;++i) form,  to get them considered as candidates.
The 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).


srimks
Total Points:
5,884
Status Points:
5,384
Brown Belt
April 4, 2009 3:45 AM PDT
Rate
 
#2
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 key things 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

Igor Levicki
Total Points:
10,865
Status Points:
10,865
Black Belt
April 4, 2009 7:05 AM PDT
Rate
 
#3
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.

--------
If you find my post helpfull, please rate it and/or select it as a best answer where applies. Thank you.


Om Sachan (Intel)
Total Points:
7,230
Status Points:
6,730
Brown Belt
April 6, 2009 1:50 AM PDT
Rate
 
#4 Reply to #3
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 article http://software.intel.com/en-us/articles/requirements-for-vectorizable-loops/.


Om Sachan (Intel)
Total Points:
7,230
Status Points:
6,730
Brown Belt
April 6, 2009 1:59 AM PDT
Rate
 
#5 Reply to #4

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

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

tim18
Total Points:
68,267
Status Points:
68,267
Black Belt
April 6, 2009 6:45 AM PDT
Rate
 
#6 Reply to #4

You may learn more on "Requirements for loop vectorization" in article http://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.




Intel Software Network Forums Statistics

8445 users have contributed to 31553 threads and 100400 posts to date.
In the past 24 hours, we have 10 new thread(s) 32 new posts(s), and 42 new user(s).

In the past 3 days, the most popular thread for everyone has been Lost in MKL The most posts were made to TBB on linux segfaulting The post with the most views is Hi,if you were using imsl yo

Please welcome our newest member nonamez