/arch
(x86)
Určuje architekturu pro generování kódu v x86. Další informace o /arch
dalších cílových architekturách najdete v tématech/arch
(ARM64), /arch
(x64) a /arch
(ARM).
Syntaxe
/arch:
[IA32
AVX10.1
|AVX512
|AVX2
|||AVX
|SSE
SSE2
]
Argumenty
/arch:IA32
Určuje žádné rozšířené instrukce a také určuje x87 pro výpočty s plovoucí desetinou čárkou.
/arch:SSE
Povolí rozšíření Intel Streaming SIMD.
/arch:SSE2
Povolí rozšíření Intel Streaming SIMD 2. Výchozí sada instrukcí je SSE2, pokud není zadána žádná /arch
možnost.
/arch:AVX
Povolí rozšíření Intel Advanced Vector Extensions.
/arch:AVX2
Povolí rozšíření Intel Advanced Vector Extensions 2.
/arch:AVX512
Povolí rozšíření Intel Advanced Vector Extensions 512.
/arch:AVX10.1
Povolí rozšíření Intel Advanced Vector Extensions 10 verze 1.
Poznámky
Možnost /arch
povolí nebo zakáže použití určitých rozšíření sady instrukcí, zejména pro výpočet vektoru, dostupné v procesorech od Intel a AMD. Obecně platí, že novější zavedené procesory můžou podporovat rozšíření nad rámec těch, které starší procesory podporují. Před spuštěním kódu pomocí rozšíření instrukční sady byste se měli podívat do dokumentace k určitému procesoru nebo testu podpory rozšíření __cpuid
sady instrukcí. Vnitřní funkce __check_isa_support
můžete také použít ke kontrole častěji používaných funkcí procesoru.
/arch
má vliv pouze na generování kódu pro nativní funkce. /clr
Při kompilaci /arch
nemá žádný vliv na generování kódu pro spravované funkce.
Možnosti /arch
odkazují na rozšíření sady instrukcí s následujícími vlastnostmi:
IA32
je starší 32bitová instrukční sada x86 bez jakýchkoli vektorových operací a použití x87 pro výpočty s plovoucí desetinou čárkou.SSE
umožňuje výpočet s vektory až čtyř hodnot s plovoucí desetinnou čárkou s jednoduchou přesností. Byly přidány také odpovídající skalární instrukce s plovoucí desetinou čárkou.SSE2
umožňuje výpočet s 128bitovými vektory s jednoduchou přesností, dvojitou přesností a 1, 2, 4 nebo 8babajtů celočíselnou hodnotou. Byly přidány také skalární instrukce s dvojitou přesností.AVX
zavedli alternativní kódování instrukcí pro vektorové a skalární instrukce s plovoucí desetinou čárkou. Umožňuje vektory 128 bitů nebo 256 bitů a nula rozšiřuje všechny výsledky vektorů na celou velikost vektoru. (Pro starší kompatibilitu zachová vektorové instrukce ve stylu SSE všechny bity nad rámec 127.) Většina operací s plovoucí desetinou čárkou se rozšiřuje na 256 bitů.AVX2
rozšiřuje většinu celočíselné operace na 256bitové vektory a umožňuje používat instrukce Násobení-Add (FMA).AVX512
zavedl další formát kódování instrukcí, který umožňuje 512bitové vektory, maskování, vložené zaokrouhlování/vysílání a nové pokyny. Výchozí délkaAVX512
vektoru je 512 bitů a lze ji změnit na 256 bitů pomocí příznaku/vlen
.AVX10.1
přidá další pokyny nad .AVX-512
Výchozí délkaAVX10.1
vektoru je 256 bitů a lze ji změnit na 512 bitů pomocí příznaku/vlen
.
Optimalizátor zvolí, kdy a jak používat vektorové instrukce v závislosti na tom, který /arch
parametr je určen. Skalární výpočty s plovoucí desetinou čárkou se obvykle provádějí s pokyny SSE nebo AVX, pokud jsou k dispozici. Některé konvence volání určují předávání argumentů s plovoucí desetinou čárkou v zásobníku x87 a v důsledku toho může kód použít kombinaci instrukcí x87 a SSE/AVX pro výpočty s plovoucí desetinou čárkou. Integer vector instructions can be used for some 64-bit integer operations when available.
Kromě vektorových a skalárních instrukcí s plovoucí desetinou čárkou může každá /arch
možnost také povolit použití jiných ne vektorových instrukcí, které jsou k této možnosti přidruženy. Příkladem je řada instrukcí CMOVcc, která se poprvé objevila na procesorech Intel Pentium Pro. Vzhledem k tomu, že instrukce SSE byly zavedeny s následným procesorem Intel Pentium III, mohou být instrukce CMOVcc generovány s výjimkou případů, kdy /arch:IA32
je zadán.
Operace s plovoucí desetinnou čárkou se obvykle zaokrouhlují na dvojitou přesnost (64bitovou) v kódu x87, ale můžete použít _controlfp
ke změně ovládacího prvku FP, včetně nastavení ovládacího prvku přesnosti na rozšířenou přesnost (80 bitů) nebo na jednu přesnost (32 bitů). Další informace naleznete v tématu _control87
, _controlfp
, __control87_2
. SSE a AVX mají pro každou operaci samostatné instrukce s jednoduchou přesností a dvojitou přesností, takže neexistuje žádný ekvivalent pro kód SSE/AVX. Může změnit způsob zaokrouhlení výsledků při použití výsledku operace s plovoucí desetinou čárkou přímo ve výpočtu místo přiřazení k proměnné uživatele. Zvažte následující operace:
r = f1 * f2 + d; // Different results are possible on SSE/SSE2.
S explicitním přiřazením:
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
a /QIfist
nedá se používat společně. Tato /QIfist
možnost změní chování zaokrouhlení plovoucí deseti čárky na celočíselné převody. Výchozí chování je zkrácení (zaokrouhlení směrem k nule), zatímco /QIfist
možnost určuje použití režimu zaokrouhlování prostředí s plovoucí desetinou čárkou. Vzhledem k tomu, že možnost změní chování všech převodů s plovoucí deseti čárkou na celočíselné převody, /QIfist
je zastaralá. Při kompilaci pro SSE nebo AVX můžete hodnotu s plovoucí deseti čárkou zaokrouhlit na celé číslo pomocí režimu zaokrouhlování prostředí s plovoucí deseti čárkou pomocí vnitřní sekvence funkcí:
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));
}
Možnost kompilátoru _M_IX86_FP
, , __AVX__
, __AVX2__
, __AVX512F__
, __AVX512CD__
, __AVX512BW__
__AVX512VL__
__AVX512DQ__
, a __AVX10_VER__
makra označují, která, pokud existuje, /arch
byla použita možnost kompilátoru. Další informace najdete v předdefinovaných makrech. Možnost /arch:AVX2
a __AVX2__
makro byly zavedeny v sadě Visual Studio 2013 Update 2 verze 12.0.34567.1. V sadě Visual Studio 2017 byla přidána omezená podpora /arch:AVX512
a byla rozšířena v sadě Visual Studio 2019. V sadě Visual Studio 2022 byla přidána podpora pro /arch:AVX10.1
.
Nastavení možnosti kompilátoru /arch
v sadě Visual Studio
Otevřete dialogové okno Stránky vlastností projektu. Další informace naleznete v tématu Nastavení kompilátoru jazyka C++ a vlastností sestavení v sadě Visual Studio.
Vyberte stránku vlastností vlastnosti konfigurace>C/C++>Generování kódu.
Upravte vlastnost Povolit rozšířenou sadu instrukcí .
Programové nastavení tohoto parametru kompilátoru
- Viz třída EnableEnhancedInstructionSet.
Viz také
/arch
(Minimální architektura procesoru)
Možnosti kompilátoru MSVC
Syntaxe příkazového řádku kompilátoru MSVC