/arch (x86)
Especifica a arquitetura para a geração de código no x86. Consulte também /arch (x64) e /arch (ARM).
/arch:[IA32|SSE|SSE2|AVX|AVX2]
Arguments
/arch:IA32
Não especifica instruções aprimoradas e especifica x87 para cálculos de ponto flutuante./arch:SSE
Habilita o uso de instruções SSE./arch:SSE2
Habilita o uso de instruções SSE2. Essa é a instrução padrão na plataforma x86 se nenhuma opção /arch for especificada./arch:AVX
Habilita o uso de instruções Intel Advanced Vector Extensions./arch:AVX2
Habilita o uso de instruções Intel Advanced Vector Extensions 2.
Comentários
As instruções SSE e SSE2 existem em diversos processadores Intel e AMD. As instruções AVX existem nos processadores Intel Sandy Bridge e AMD Bulldozer. As instruções AVX2 são compatíveis com processadores Intel Haswell e Broadwell, e em processadores AMD baseados em Excavator.
As macros _M_IX86_FP, __AVX__ e**__AVX2__** indicam que, se houve uma opção de compilador, a opção /arch foi usada. Para obter mais informações, consulte Macros predefinidas. A opção /arch:AVX2 e a macro __AVX2__ foram introduzidas na versão 12.0.34567.1 da atualização 2 do Visual Studio 2013.
O otimizador escolhe quando e como usar as instruções SSE e SSE2 quando a opção /arch é especificada. Ele usa as instruções SSE e SSE2 em alguns cálculos escalares de ponto flutuante quando determina que é mais rápido usar registros e instruções SSE/SSE2 em vez da pilha de registro de ponto flutuante do x87. Por isso, no momento, seu código pode combinar x87 e SSE/SSE2 nos cálculos de ponto flutuante. Além disso, com /arch:SSE2, as instruções SSE2 podem ser usadas em algumas operações de inteiros de 64 bits.
Além de usar as instruções SSE e SSE2, o compilador também usa outras instruções presentes nas revisões do processador, que são compatíveis com SSE e SSE2. Um exemplo disso é a instrução CMOV que apareceu pela primeira vez na revisão Pentium Pro dos processadores Intel.
Como o compilador do x86 gera códigos que usam as instruções SSE2 por padrão, você deve especificar a opção /arch:IA32 para desabilitar a geração de instruções SSE e SSE2 para processadores x86.
A opção /arch afeta somente a geração de código de funções nativas. Ao usar /clr para compilar, /arch não tem efeito sobre a geração de código para funções gerenciadas.
Não é possível usar as opções /arch e /QIfist no mesmo compiland. Isso é importante principalmente se você não estiver usando a opção _controlfp para modificar a palavra de controle de FP, e o código de inicialização do tempo de execução definir o campo de controle de precisão da palavra de controle de FPU do x87 como 53 bits. Portanto, todas as operações duplicadas e de flutuação das expressões usam significandos de 53 bits e expoentes de 15 bits. No entanto, todas as operações SSE de precisão simples usam significandos de 24 bits e expoentes de 8 bits. Já as operações SSE2 de precisão dupla usam significandos de 53 bits e expoentes de 11 bits. Para obter mais informações, consulte _control87, _controlfp, __control87_2. Essas diferenças podem ser usadas em árvores de expressões, mas não quando há uma atribuição de usuário após cada subexpressão. Considere o seguinte:
r = f1 * f2 + d; // Different results are possible on SSE/SSE2.
Em comparação a:
t = f1 * f2; // Do f1 * f2, round to the type of t.
r = t + d; // This should produce the same overall result
// whether x87 stack is used or SSE/SSE2 is used.
Para definir essa opção de compilador para AVX, AVX2, IA32, SSE ou SSE2 no Visual Studio
Abra a caixa de diálogo Páginas de Propriedades do projeto. Para obter mais informações, consulte Como abrir páginas de propriedade do projeto.
Selecione a pasta Propriedades de Configuração, C/C++.
Selecione a página de propriedades Geração de Código.
Modifique a propriedade Habilitar Conjunto de Instruções Avançadas.
Para definir essa opção do compilador via programação
- Consulte EnableEnhancedInstructionSet.