/arch (Architettura minima della CPU)
Aggiornamento: novembre 2007
Specifica l'architettura per la generazione di codice mediante le istruzioni Streaming SIMD Extensions (SSE) e Streaming SIMD Extensions 2 (SSE2).
/arch:[SSE|SSE2]
Note
Nota: |
---|
/arch è disponibile solo quando si esegue la compilazione per piattaforme x86. Questa opzione del compilatore non è disponibile quando si esegue la compilazione per x64 o Itanium. |
Le istruzioni SSE sono disponibili in vari processori Pentium e AMD Athlon, mentre le istruzioni SSE2 sono disponibili solo sul processore Pentium 4.
/arch:SSE consente al compilatore di utilizzare istruzioni SSE, mentre /arch:SSE2 di utilizzare istruzioni SSE2.
_M_IX86_FP indica l'opzione del compilatore /arch eventualmente utilizzata. Per ulteriori informazioni, vedere Predefined Macros.
Quando viene specificato /arch, l'utilità di ottimizzazione decide quando e come utilizzare le istruzioni SSE e SSE2. Le istruzioni SSE ed SSE2 verranno 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 valori integer a 64 bit.
Oltre alle istruzioni SSE e SSE2, il compilatore utilizzerà 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 effettua la compilazione con /clr (Compilazione Common Language Runtime), l'opzione /arch non ha effetto sulla generazione di codice per le funzioni gestite, ma solo sulla generazione di codice per le funzioni native.
Non è possibile utilizzare /arch e /QIfist (Elimina _ftol) sullo stesso modulo.
In particolare, se non si utilizza _controlfp per modificare la parola di controllo FP, il campo di controllo di precisione della parola di controllo FPU x87 verrà impostato su 53 bit nel codice di avvio di runtime, in modo che tutte le operazioni float e double all'interno di un'espressione verranno eseguite con significando a 53 bit ed esponente a 15 bit. Tutte le operazioni SSE a precisione singola utilizzeranno tuttavia 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 all'interno di una struttura di espressione singola, 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.
Poiché controlfp non modifica i bit del controllo MXCSR, con /arch:SSE2 qualsiasi funzionalità dipendente dall'utilizzo di controlfp verrà interrotta.
Per impostare l'opzione del compilatore nell'ambiente di sviluppo di Visual Studio
Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, 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 a livello di codice
- Vedere la proprietà EnableEnhancedInstructionSet.