/arch (Arquitectura de CPU mínima)
Especifica la arquitectura para la generación de código utilizando las instrucciones de Extensiones SIMD de transmisión por secuencias (SSE), Extensiones SIMD de transmisión por secuencias 2 (SSE2) y Extensión de vector avanzada (AVX).
/arch:[SSE|SSE2|AVX]
Comentarios
Nota
/arch:SSE y /arch:SSE2 solo están disponibles al compilar para la plataforma x86. /arch:AVX solo está disponible para las plataformas x86 y x64. Esta opción del compilador no está disponible al compilar para Itanium.
Las instrucciones SSE2 y SSE existen en varios procesadores de AMD e Intel. Las instrucciones AVX existen en los procesadores Intel Sandy Bridge y AMD Bulldozer.
/arch:SSE permite al compilador utilizar las instrucciones SSE. /arch:SSE2 permite al compilador utilizar las instrucciones SSE2. /arch:AVX dirige el compilador para utilizar las codificaciones de la instrucción AVX.
_M_IX86_FP indica que, si existe, se utilizó la opción del compilador /arch. Para obtener más información, vea Predefined Macros.
El optimizador elige cuándo y cómo se utilizan las instrucciones SSE2 y SSE cuando se especifica /arch. Las instrucciones de SSE y SSE2 se utilizan en algunos cálculos escalares de punto flotante, cuando se determina que es más rápido utilizar las instrucciones y los registros de SSE/SSE2 en lugar de la pila de registros de punto flotante x87. En consecuencia, el código utilizará realmente una combinación de instrucciones y registros de x87 y de SSE/SSE2 para las operaciones de punto flotante. Además, con /arch:SSE2, se pueden utilizar instrucciones de SSE2 para algunas operaciones con enteros de 64 bits.
Además de utilizar las instrucciones de SSE y SSE2, el compilador también hace uso de otras instrucciones que se incluyen en las revisiones de procesadores que admiten SSE y SSE2. Un ejemplo es la instrucción CMOV, que apareció por primera vez en la revisión Pentium Pro de los procesadores Intel.
Al compilar utilizando /clr, /arch no tiene ningún efecto en la generación de código para las funciones administradas. /arch solo afecta a la generación de código de las funciones nativas.
/arch y /QIfist no pueden utilizarse en la misma operación de compilación.
En particular, si el usuario no utiliza _controlfp para modificar la palabra de control de FP, el código de inicio en tiempo de ejecución establecerá el campo de control de precisión control de la palabra de control de FPU x87 en 53 bits. Por consiguiente, cada operación de tipo float y double en una expresión se produce con un significado de 53 bits y un exponente de 15 bits. Sin embargo, cada operación SSE de precisión sencilla utiliza significados de 24 bits y exponentes de 8 bits, mientras que las operaciones SSE2 de doble precisión utilizan significados de 53 bits y exponentes de 11 bits. Para obtener más información, vea _control87, _controlfp, __control87_2.
Estas diferencias son posibles en un árbol de expresión, pero no en los casos en los que se produce una asignación de usuario después de cada subexpresión.
r = f1 * f2 + d; // Different results are possible on SSE/SSE2.
Frente a:
t = f1 * f2; // Do f1 * f2, round to the type of t.
r = t + d; // This should produce the same overall result
// regardless whether x87 stack or SSE/SSE2 is used.
controlfp no cambia los bits de control de MXCSR. Por consiguiente, con /arch:SSE2, cualquier funcionalidad que dependa del uso de controlfp se interrumpirá.
Para establecer esta opción del compilador para SSE o SSE2 en Visual Studio
Abra el cuadro de diálogo Páginas de propiedades del proyecto. Para obtener más información, vea Cómo: Abrir páginas de propiedades del proyecto.
Haga clic en la carpeta C/C++.
Haga clic en la página de propiedades Generación de código.
Modifique la propiedad Habilitar conjunto de instrucciones mejoradas.
Para establecer la opción del compilador /arch:AVX en Visual Studio
Abra el cuadro de diálogo Páginas de propiedades del proyecto. Para obtener más información, vea Cómo: Abrir páginas de propiedades del proyecto.
Haga clic en la carpeta C/C++.
Haga clic en la página de propiedades Línea de comandos.
En el cuadro Opciones adicionales, agregue /arch:AVX.