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

Intel® Compiler Options for Intel® SSE cannot support AVX on windowss XP

FPT_S_
Beginner
796 Views

I build an project with Intel® Compiler C++ but I have error when setting Intel Processor-Specific Optimization = AVX. Run on windows 7 ok
/arch:AVX /QaxAVX /QxAVX
Please help me!
CPU : Core i3-2100 3.10Ghz 
Windows XP SP3

https://software.intel.com/en-us/articles/performance-tools-for-software-developers-intel-compiler-options-for-sse-generation-and-processor-specific-optimizations

 

 

0 Kudos
1 Solution
TimP
Honored Contributor III
796 Views

Microsoft had withdrawn XP support before XE2015 was released, and had announced this move before ifort 14.0 was in development.  One of the reasons may have been the lack of motivation to retrofit AVX into XP.  With so many Windows versions, this would have reduced priority of testing on XP, so you take some risks with XP even if you avoid AVX, a combination which never could be tested.  The full automated test suite may require a Windows Server platform, so 2008r2 and 2012 might be expected to have run full testing.

If you want to run on XP in spite of the cautions, I don't think the deprecated status should deter you from using a late 14.0 version or even trying 15.0, but that won't solve the AVX problem.

In several cases I've tested, AVX hardware features work nearly as well with older compile options like SSE4, which don't run afoul of that problem with XP and tend not to depend on 32-byte alignment.

View solution in original post

0 Kudos
7 Replies
TimP
Honored Contributor III
796 Views
Avx support was introduced in win7 sp1 after heavy lobbying by intel. Without that the wide registers aren't handled in context switching so various obscure failures might occur.
0 Kudos
pbkenned1
Employee
796 Views

What version of the compiler are you using?  For the Parallel Studio XE2015 products (which include the v15.0 compiler), Windows XP is not supported.  The last version of the compiler for which XP was officially supported (although deprecated) is v14.0, part of Parallel Studio XE2013.

Patrick

0 Kudos
TimP
Honored Contributor III
797 Views

Microsoft had withdrawn XP support before XE2015 was released, and had announced this move before ifort 14.0 was in development.  One of the reasons may have been the lack of motivation to retrofit AVX into XP.  With so many Windows versions, this would have reduced priority of testing on XP, so you take some risks with XP even if you avoid AVX, a combination which never could be tested.  The full automated test suite may require a Windows Server platform, so 2008r2 and 2012 might be expected to have run full testing.

If you want to run on XP in spite of the cautions, I don't think the deprecated status should deter you from using a late 14.0 version or even trying 15.0, but that won't solve the AVX problem.

In several cases I've tested, AVX hardware features work nearly as well with older compile options like SSE4, which don't run afoul of that problem with XP and tend not to depend on 32-byte alignment.

0 Kudos
FPT_S_
Beginner
796 Views

Thank for your help.
I used  Intel Compiler C++  12.1 , Intel® Parallel Studio XE 2011 update 3.
Please suggest  for me how to setting for these property:   Enable Enhanced Instruction Set , Intel Processor-Specific Optimization , Add Processor-Optimized Code Path :
1. 
    + CPU : Core i3-2100 3.10Ghz  
    + OS: Windows XP
2.
    + CPU:Intel(R) Xeon(R) CPU E5-1620 0 @ 3.60GHz、3601 Mhz
    + OS:Microsoft Windows 7 Professional SP1 (64bit)

At present, I'm setting /arch:SSE3/QaxSSSE3 /QxSSSE3

Enable Enhanced Instruction Set = "Streaming SIMD Extensions 3 (/arch:SSE3)" 
Add Processor-Optimized Code Path =  "Intel(R)  Core(TM)2 processor family with Supplemental Streaming SIMD Extensions 3 (SSSE3) (/QaxSSSE3)"    
Intel Processor-Specific Optimization = "Intel(R)  Core(TM)2 processor family with Supplemental Streaming SIMD Extensions 3 (SSSE3) (/QxSSSE3)"    

 

 

0 Kudos
pbkenned1
Employee
796 Views

Both of those CPUs support AVX, as well as SSE4.1/SSE4.2.  The problem, as Tim said, is that AVX is not a good fit for Windows XP, so I'd suggest backing off to SSE4.2 or SSE4.1 for XP.

Unless you are planning to run your program on a CPU that doesn't support SSE4.2/SSE4.1, you won't need anything for 'Add Processor-Optimized Code Path', so I suggest you just use 'Intel Processor-Specific Optimization' by selecting either /QxSSE4.2 or /QxSSE4.1.

If you choose one of the /Qx switches, then don't set anything for 'Enable Enhanced Instruction Set' -- /arch and /Qx are mutually exclusive.

Patrick

0 Kudos
Phuc_B_
Beginner
796 Views

Patrick Kennedy (Intel) wrote:

Both of those CPUs support AVX, as well as SSE4.1/SSE4.2.  The problem, as Tim said, is that AVX is not a good fit for Windows XP, so I'd suggest backing off to SSE4.2 or SSE4.1 for XP.

Unless you are planning to run your program on a CPU that doesn't support SSE4.2/SSE4.1, you won't need anything for 'Add Processor-Optimized Code Path', so I suggest you just use 'Intel Processor-Specific Optimization' by selecting either /QxSSE4.2 or /QxSSE4.1.

If you choose one of the /Qx switches, then don't set anything for 'Enable Enhanced Instruction Set' -- /arch and /Qx are mutually exclusive.

Patrick

Excuse me sir, I have the same problem.

But I can't search official document about "/arch and /Qx are mutually exclusive". So can you give me document (or official link) about that.

Regards,

PhucBNH.

0 Kudos
pbkenned1
Employee
796 Views

>>>But I can't search official document about "/arch and /Qx are mutually exclusive".

Read the compiler documentation regarding /arch:

Description

This option tells the compiler which features it may target, including which instruction sets it may generate.

Code generated with these options should execute on any compatible, non-Intel processor with support for the corresponding instruction set.

Options /arch and /Qx are mutually exclusive. If both are specified, the compiler uses the last one specified and generates a warning.

If you specify both the /Qax and /arch options, the compiler will not generate Intel-specific instructions.

Patrick

0 Kudos
Reply