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

CPUID feature bits for -xSSE3

areid2
New Contributor I
453 Views

Hi,

I'm targeting my App only for hardware that supports SSE3 or later and am using the -xSSE3 compiler option. When I run my App on an AMD Opteron 6100 series processor it indicates the processor doesn't have the required instructions:

Please verify that both the operating system and the processor support Intel(R) X87, CMOV, MMX, FXSAVE, SSE, SSE2 and SSE3 instructions.

The processor is a number of years old, but it supports SSE3. In fact, I checked the cpuid instruction and it supported all the instructions listed in the message:

cpuid(EAX=1):
ECX: 0x802009
EDX: 0x178bfbff

Does anyone know exactly which cpuid flags are checked when compiling with -xSSE3? I'm using C++ compiler 2016.2.181

Thanks,

Adam

 

0 Kudos
1 Solution
Anoop_M_Intel
Employee
453 Views

Please refer to the following URL: https://software.intel.com/en-us/node/581749#260BF03D-0E6C-462F-A087-98512013B489 in Intel C++ Compiler 16.0 User's guide and you can see the following documented:

"Compiler options m and arch produce binaries that should run on processors not made by Intel that implement the same capabilities as the corresponding Intel® processors.

The -x and /Qx options enable additional optimizations not enabled with options -m or /arch (nor with options –ax and/Qax)."

Could you please try using /arch:SSE3 compiler option instead -xSSE3. The documentation for this option is available at https://software.intel.com/en-us/node/581724

Thanks and Regards
Anoop

View solution in original post

0 Kudos
3 Replies
Anoop_M_Intel
Employee
454 Views

Please refer to the following URL: https://software.intel.com/en-us/node/581749#260BF03D-0E6C-462F-A087-98512013B489 in Intel C++ Compiler 16.0 User's guide and you can see the following documented:

"Compiler options m and arch produce binaries that should run on processors not made by Intel that implement the same capabilities as the corresponding Intel® processors.

The -x and /Qx options enable additional optimizations not enabled with options -m or /arch (nor with options –ax and/Qax)."

Could you please try using /arch:SSE3 compiler option instead -xSSE3. The documentation for this option is available at https://software.intel.com/en-us/node/581724

Thanks and Regards
Anoop

0 Kudos
areid2
New Contributor I
453 Views

Thanks Anoop, that solves my problem. The -msse3 works fine on an AMD processor. I guess I didn't read far enough into the details of the docs for -x. Seems like this detail is important enough that it could be mentioned in the brief description for for the -x option. 

Also seems like the error message that is added to the cpu check could be a little more clear. I now understand that the "Intel" in the error message is supposed to apply to all the instructions, ie  Intel X87, Intel CMOV ...Intel SSE3, and that Intel SSE3 is not the same as SSE3. It'd be a lot clearer to just say "you need an Intel brand processor that supports the mentioned instruction sets". 

0 Kudos
TimP
Honored Contributor III
453 Views

There are only a few minor differences between intel and amd sse3, but there have been major problems in the past with detection of isa support on amd.  On the other hand, if no cpus have been made without full sse3 support in a decade, the msse3 option is fairly safe. You have additional options to avoid use of the instructions which differ, such as prec-div prec-sqrt imf-arch-consistency.  As you began to see, there are opportunities for study and reading between the lines.

0 Kudos
Reply