/arch
(x86)
Specifica l'architettura per la generazione del codice su piattaforme x86. Per altre informazioni su altre architetture di destinazione, vedere (ARM64), (x64) e (ARM).For more information on /arch
for other target architectures, see /arch
(ARM64), /arch
(x64), and /arch
(ARM).
Sintassi
/arch:
[IA32
AVX512
|AVX2
|||AVX
|SSE
SSE2
]
Argomenti
/arch:IA32
Non specifica istruzioni avanzate e specifica x87 per i calcoli a virgola mobile.
/arch:SSE
Abilita l'uso delle istruzioni SSE.
/arch:SSE2
Abilita l'uso delle istruzioni SSE2. Questa opzione è l'istruzione predefinita impostata sulle piattaforme x86 se non è specificata alcuna /arch
opzione.
/arch:AVX
Abilita l'uso di istruzioni Intel Advanced Vector Extensions.
/arch:AVX2
Abilita l'uso di istruzioni Intel Advanced Vector Extensions 2.
/arch:AVX512
Abilita l'uso delle istruzioni Intel Advanced Vector Extensions 512.
Osservazioni:
L'opzione /arch
abilita o disabilita l'uso di determinate estensioni del set di istruzioni, in particolare per il calcolo vettoriale, disponibile nei processori intel e AMD. In generale, i processori introdotti più di recente possono supportare estensioni oltre quelle supportate dai processori meno recenti. È consigliabile consultare la documentazione relativa a un particolare processore o test per il supporto dell'estensione del set di istruzioni usando __cpuid
prima di eseguire il codice usando un'estensione del set di istruzioni.
/arch
influisce solo sulla generazione del codice per le funzioni native. Quando si usa /clr
per la compilazione, /arch
non ha alcun effetto sulla generazione di codice per le funzioni gestite.
Le /arch
opzioni fanno riferimento alle estensioni del set di istruzioni con le caratteristiche seguenti:
IA32
è l'istruzione x86 a 32 bit legacy senza operazioni vettoriali e l'uso di x87 per i calcoli a virgola mobile.SSE
consente il calcolo con vettori fino a quattro valori a virgola mobile e precisione singola. Sono state aggiunte anche le istruzioni scalari a virgola mobile corrispondenti.SSE2
consente il calcolo con vettori a 128 bit di valori integer a precisione singola, precisione doppia e 1, 2, 4 o integer a 8 byte. Sono state aggiunte anche istruzioni scalari a precisione doppia.AVX
è stata introdotta una codifica di istruzioni alternative per istruzioni scalari vettoriali e a virgola mobile. Consente vettori di 128 bit o 256 bit ed estende tutti i risultati del vettore alla dimensione del vettore completa. Per la compatibilità legacy, le istruzioni del vettore in stile SSE mantengono tutti i bit oltre il bit 127. La maggior parte delle operazioni a virgola mobile viene estesa a 256 bit.AVX2
estende la maggior parte delle operazioni integer a vettori a 256 bit e consente l'uso delle istruzioni Fused Multiply-Add (FMA).AVX512
è stato introdotto un altro modulo di codifica delle istruzioni che consente vettori a 512 bit, oltre ad altre funzionalità facoltative. Sono state aggiunte anche le istruzioni per altre operazioni.
L'utilità di ottimizzazione sceglie quando e come usare le istruzioni vettoriali in base a quanto /arch
specificato. I calcoli a virgola mobile scalari vengono eseguiti con istruzioni SSE o AVX, se disponibili. Alcune convenzioni di chiamata specificano il passaggio di argomenti a virgola mobile nello stack x87 e, di conseguenza, il codice può usare una combinazione di istruzioni x87 e SSE/AVX per i calcoli a virgola mobile. Le istruzioni del vettore integer possono essere usate anche per alcune operazioni integer a 64 bit, se disponibili.
Oltre alle istruzioni scalari a virgola mobile e vettoriale, ogni /arch
opzione può anche abilitare l'uso di altre istruzioni non vettoriali associate a tale opzione. Un esempio è la famiglia di istruzioni CMOVcc che è apparsa per la prima volta sui processori Intel Pentium Pro. Poiché le istruzioni SSE sono state introdotte con il processore Intel Pentium III successivo, le istruzioni CMOVcc possono essere generate tranne quando /arch:IA32
viene specificato.
Le operazioni a virgola mobile vengono in genere arrotondate a precisione doppia (64 bit) nel codice x87, ma è possibile usare _controlfp
per modificare la parola di controllo FP, inclusa l'impostazione del controllo precisione su precisione estesa (80 bit) o precisione singola (a 32 bit). Per altre informazioni, vedere , , __control87_2
_controlfp
._control87
SSE e AVX dispongono di istruzioni separate a precisione singola e a precisione doppia per ogni operazione, quindi non esiste un equivalente per il codice SSE/AVX. Può modificare il modo in cui i risultati vengono arrotondati quando il risultato di un'operazione a virgola mobile viene usato direttamente in un ulteriore calcolo anziché assegnarlo a una variabile utente. Considerare le operazioni seguenti:
r = f1 * f2 + d; // Different results are possible on SSE/SSE2.
Con assegnazione esplicita:
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.
/arch
e /QIfist
non possono essere usati nello stesso compiland. L'opzione /QIfist
modifica il comportamento di arrotondamento della conversione a virgola mobile in integer. Il comportamento predefinito consiste nel troncamento (arrotondamento verso zero), mentre l'opzione /QIfist
specifica l'uso della modalità di arrotondamento dell'ambiente a virgola mobile. Poiché l'opzione modifica il comportamento di tutte le conversioni a virgola mobile in integer, /QIfist
è stato deprecato. Durante la compilazione per SSE o AVX, è possibile arrotondare un valore a virgola mobile a un intero usando la modalità di arrotondamento dell'ambiente a virgola mobile usando una sequenza di funzioni intrinseche:
int convert_float_to_int(float x) {
return _mm_cvtss_si32(_mm_set_ss(x));
}
int convert_double_to_int(double x) {
return _mm_cvtsd_si32(_mm_set_sd(x));
}
Le _M_IX86_FP
macro , __AVX2__
__AVX__
, __AVX512F__
__AVX512CD__
, __AVX512BW__
__AVX512DQ__
e __AVX512VL__
indicano quale opzione del compilatore, se presente, /arch
è stata usata. Per altre informazioni, vedere Macro predefinite. L'opzione /arch:AVX2
e __AVX2__
la macro sono state introdotte in Visual Studio 2013 Update 2, versione 12.0.34567.1. È stato aggiunto un supporto limitato per /arch:AVX512
in Visual Studio 2017 ed è stato espanso in Visual Studio 2019.
Per impostare questa opzione del compilatore per AVX, AVX2, AVX512, IA32, SSE o SSE2 in Visual Studio
Aprire la finestra di dialogo Pagine delle proprietà per il progetto. Per altre informazioni, vedere Impostare il compilatore e le proprietà di compilazione.
Selezionare la pagina delle proprietà Proprietà>di configurazione C/C++>Generazione codice.
Modificare la proprietà Enable Enhanced Instruction Set .
Per impostare l'opzione del compilatore a livello di codice
- Vedere EnableEnhancedInstructionSet.
Vedi anche
/arch
(Architettura cpu minima)
Opzioni del compilatore MSVC
Sintassi della riga di comando del compilatore MSVC