/arch (Arquitectura de CPU mínima)
Actualización: noviembre 2007
Especifica la arquitectura para generación de código mediante instrucciones de Extensiones SIMD de transmisión (SSE) y Extensiones SIMD de transmisión 2 (SSE2).
/arch:[SSE|SSE2]
Comentarios
Nota: |
---|
/arch sólo está disponible al compilar para la plataforma x86. Esta opción del compilador no está disponible al compilar para x64 o Itanium. |
Las instrucciones de SSE existen en diversos procesadores Pentium y AMD Athlon. Las instrucciones SSE2 sólo se existen en el procesador Pentium 4.
/arch:SSE permite al compilador utilizar las instrucciones de SSE y /arch:SSE2 permite al compilador utilizar las instrucciones de SSE2.
_M_IX86_FP indica qué opción del compilador /arch se ha utilizado, si es que es alguna. Vea Predefined Macros para obtener más información.
El optimizador elige cuándo y cómo hacer uso de las instrucciones de SSE o SSE2 cuando se especifica la opción /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.
Cuando se compila con /clr (Compilación de Common Language Runtime), la opción /arch no tendrá ningún efecto sobre la generación de código para funciones administradas. /arch sólo afecta a la generación de código para funciones nativas.
Las opciones /arch y /QIfist (Suprimir _ftol) no se pueden utilizar en la misma operación de compilación.
En particular, si el usuario no utiliza _controlfp para modificar la palabra de control de punto flotante (FP), el código de inicio en tiempo de ejecución asignará 53 bits al campo de control de precisión de la palabra de control de la unidad de punto flotante de x87, de modo que todas las operaciones de tipo float y double dentro de una expresión se realizarán con significados de 53 bits y exponentes de 15 bits. Todas las operaciones SSE de precisión simple utilizarán, sin embargo, significados de 24 bits y exponentes de 8 bits, mientras que las operaciones SSE2 de doble precisión utilizarán significados de 53 bits y exponentes de 11 bits. Para obtener más información, vea _control87, _controlfp, __control87_2.
Como ejemplo, estas diferencias son posibles dentro de un árbol de expresiones, no en casos en los que hay una asignación de usuario para 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 tanto, con /arch:SSE2, cualquier funcionalidad que dependa del uso de controlfp resultará afectada.
Para establecer esta opción del compilador en el entorno de desarrollo de Visual Studio
Abra el cuadro de diálogo Páginas de propiedades del proyecto. Para obtener información detallada, 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.