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:
66,397
Status Points:
66,397
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,855
Status Points:
10,855
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:
66,397
Status Points:
66,397
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

8286 users have contributed to 31231 threads and 99107 posts to date.
In the past 24 hours, we have 7 new thread(s) 31 new posts(s), and 43 new user(s).

In the past 3 days, the most popular thread for everyone has been comparison cilk++, openmp, pthreads first results The most posts were made to comparison cilk++, openmp, pthreads first results The post with the most views is Very amusing...  Escalated as

Please welcome our newest member titanius.anglesmith