Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Beginner
46 Views

Auto-dispatch setting

I'm a little confused about how to specify generation of cpu-dispatched code with ICC. I need a baseline code targeted to NetBurst architecture, so to specify auto-dispatch with NetBurst baseline do I do the following?:
Project -> Properties -> C/C++ -> Code Generation -> "Add Processor-Optimized Code Path" = "Intel NetBurst..."
and
Project -> Properties -> C/C++ -> Code Generation -> "Intel Processor-Specific Optimization" = "None"
Thanks.
0 Kudos
4 Replies
Highlighted
Black Belt
46 Views

If I understand what you want, you would set Intel Processor-Specific Optimization to NetBurst SSE2 (if you are covering early 32-bit NetBurst). This would forbid execution on CPUs prior to NetBurst, such as P-III.
If you are covering only NetBurst from the time SSE3 and EM64T were introduced, the SSE3 option would work as the baseline. The SSE3 option is most valuable for complex vectorizable floating point, so it relates to a fairly specialized group of applications.
You would set Add Processor-optimized Code Path to the more recent architecture for which you wish to maximize performance. You might have to test your application to find out whether there is value in any of those options, and how high is worth while.
0 Kudos
Highlighted
Beginner
46 Views

I see. I was under the impression that the compiler could generate code paths for multiple generations of CPU that would be invoked transparently. Let's see if I've got this right - by following your directions I will generate binaries that require a minimum of SSE3 (or SSE2 depending on my selection), and also would include an optimized path for a more modern CPU (say, SSE4 for example, again depending on my selection). Correct?
-L
0 Kudos
Highlighted
Black Belt
46 Views

Yes, I think we're in agreement.
0 Kudos
Highlighted
Moderator
46 Views

Quoting lkeene
I see. I was under the impression that the compiler could generate code paths for multiple generations of CPU that would be invoked transparently.

Yes, it is supported.
But it is done through the "C/C++ -> Command line -> Additional options", adding "/QaxSSE3,SSE4.....". You can set the "/arch:SSE3" or /QxSSE3 through "Code Generation" page. The default is "/arch:SSE2" with 11.1.
Check the code size though to be sure it's in the range you want.

Jennifer

0 Kudos