/arch (Architettura minima della CPU)
Specifica l'architettura per la generazione di codice mediante le istruzioni Streaming SIMD Extensions (SSE), Streaming SIMD Extensions 2 (SSE2) e Advanced Vector Extension (AVX).
/arch:[SSE|SSE2|AVX]
Note
Nota
/arch:SSE e /arch:SSE2 sono disponibili solo quando si esegue la compilazione per piattaforme x86. L'oggetto /arch:AVX è disponibile solo per le piattaforme x64 e x86. Questa opzione del compilatore non è disponibile quando si esegue la compilazione per Itanium.
Le istruzioni SSE e SSE2 sono disponibili in vari processori Intel e AMD. Le istruzioni AVX esistono nei processori Intel Sandy Bridge e AMD Bulldozer.
/arch:SSE abilita il compilatore ad utilizzare le istruzioni SSE. /arch:SSE2 abilita il compilatore ad utilizzare le istruzioni SSE2. /arch:AVX indica al compilatore di utilizzare le codifiche delle istruzioni AVX.
_M_IX86_FP indica l'opzione del compilatore /arch eventualmente utilizzata. Per ulteriori informazioni, vedere Predefined Macros.
L'utilità di ottimizzazione decide quando e come utilizzare le istruzioni SSE e SSE2 quando /arch è specificato. Le istruzioni SSE ed SSE2 vengono utilizzate per alcuni calcoli scalari a virgola mobile, quando l'utilizzo di tali istruzioni e registri è ritenuto più rapido rispetto allo stack di registro a virgola mobile x87. Di conseguenza, nel codice verrà utilizzata una combinazione di entrambe le istruzioni x87 e SSE/SSE2 per i calcoli a virgola mobile. Inoltre, con /arch:SSE2 le istruzioni SSE2 possono essere utilizzate per alcune operazioni con interi a 64 bit.
Oltre alle istruzioni SSE e SSE2, il compilatore utilizza anche altre istruzioni presenti nelle revisioni del processore che supportano SSE e SSE2. Un esempio è rappresentato dall'istruzione CMOV, introdotta per la prima volta nella revisione Pentium Pro dei processori Intel.
Quando si compila tramite /clr, /arch non ha effetto sulla generazione di codice per le funzioni gestite. /arch influisce solo sulla generazione di codice per le funzioni native.
/arch e /QIfist non possono essere utilizzati nello stesso modulo.
In particolare, se l'utente non utilizza _controlfp per modificare la parola di controllo FP, il codice di avvio di runtime imposterà il campo di controllo di precisione della parola di controllo FPU x87 su 53 bit. Pertanto, tutte le operazioni float e double in un'espressione vengono eseguite con un significando a 53 bit e un esponente a 15 bit. Tuttavia, ogni operazione SSE a precisione singola utilizza un significando a 24 bit e un esponente a 8 bit, mentre le operazioni SSE2 a precisione doppia utilizzeranno un significando a 53 bit e un esponente a 11 bit. Per ulteriori informazioni, vedere _control87, _controlfp, __control87_2.
Queste differenze sono possibili in una struttura ad albero dell'espressione, ma non nei casi in cui è presente un'assegnazione dell'utente dopo ciascuna sottoespressione.
r = f1 * f2 + d; // Different results are possible on SSE/SSE2.
invece di:
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 non modifica i bit di controllo MXCSR. Pertanto, con /arch:SSE2, qualsiasi funzionalità che dipende dall'utilizzo di controlfp sarà interrotta.
Per impostare questa opzione del compilatore per SSE o SSE2 in Visual Studio
Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per ulteriori informazioni, vedere Procedura: aprire le pagine delle proprietà dei progetti.
Fare clic sulla cartella C/C++.
Fare clic sulla pagina delle proprietà Generazione codice.
Modificare la proprietà Attiva set di istruzioni avanzate.
Per impostare l'opzione del compilatore /arch:AVX in Visual Studio
Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per ulteriori informazioni, vedere Procedura: aprire le pagine delle proprietà dei progetti.
Fare clic sulla cartella C/C++.
Fare clic sulla pagina delle proprietà Riga di comando.
Nella casella Opzioni aggiuntive, aggiungere /arch:AVX.
Per impostare l'opzione del compilatore a livello di codice
- Vedere EnableEnhancedInstructionSet.