Intel® C++ Compiler
Community support and assistance for creating C++ code that runs on platforms based on Intel® processors.

Auto-dispatch setting

lkeene
Beginner
545 Views
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
TimP
Honored Contributor III
545 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
lkeene
Beginner
545 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
TimP
Honored Contributor III
545 Views
Yes, I think we're in agreement.
0 Kudos
JenniferJ
Moderator
545 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
Reply