/arch (Minimale CPU-Architektur)
Gibt die Architektur für die Codegenerierung unter Verwendung von SSE-Anweisungen (Streaming-SIMD-Erweiterungen) und SSE2-Anweisungen (Streaming-SIMD-Erweiterungen 2) und AVX-Anweisungen (Advanced Vector-Erweiterung) an.
/arch:[SSE|SSE2|AVX]
Hinweise
Tipp
/arch:SSE und /arch:SSE2 sind nur verfügbar, wenn für die x86-Plattform kompiliert wird. /arch:AVX ist nur für x86- und x64-Plattformen verfügbar. Diese Compileroption ist nicht verfügbar, wenn Sie für Itanium kompilieren.
Die SSE- und SSE2-Anweisungen werden in verschiedenen Intel- und AMD-Prozessoren verwendet. Die AVX-Anweisungen gibt es bei Intel Sandy Bridge- und AMD Bulldozer-Prozessoren.
/arch:SSE ermöglicht dem Compiler, die SSE-Anweisungen zu verwenden. /arch:SSE2 ermöglicht dem Compiler, die SSE2-Anweisungen zu verwenden. /arch:AVX weist den Compiler an, die AVX-Anweisungscodierungen zu verwenden.
_M_IX86_FP gibt an, welche /arch-Compileroption ggf. verwendet wurde. Weitere Informationen finden Sie unter Predefined Macros.
Der Optimierer wählt aus, wann und wie die SSE- und SSE2-Anweisungen bei Angabe von /arch verwendet werden. SSE- und SSE2-Anweisungen werden für einige skalare Gleitkommaberechnungen verwendet, und zwar in Fällen, in denen die Verwendung der SSE/SSE2-Anweisungen und -Register Leistungsvorteile gegenüber dem x87-Gleitkomma-Registerstapel bietet. Dies bedeutet, dass im Code für Gleitkommaberechnungen tatsächlich eine Kombination aus x87 und SSE/SSE2 verwendet wird. Darüber hinaus können mit /arch:SSE2 SSE2-Anweisungen für einige 64-Bit-Ganzzahloperationen verwendet werden.
Neben den SSE- und SSE2-Anweisungen verwendet der Compiler weitere Anweisungen, die in den jeweiligen Prozessorrevisionen mit SSE- und SSE2-Unterstützung verfügbar sind. Die CMOV-Anweisung, die zuerst in der PentiumPro-Revision der Intel-Prozessoren verwendet wurde, ist ein Beispiel hierfür.
Wenn Sie Kompilierungsvorgänge mit /clr ausführen, hat /arch keine Auswirkungen auf die Codegenerierung für verwaltete Funktionen. /arch wirkt sich nur auf Codegenerierung für systemeigene Funktionen aus.
/arch und /QIfist können nicht für dieselbe Kompiliereinheit verwendet werden.
Besonders, wenn der Benutzer das FP-Steuerwort nicht mithilfe von _controlfp ändert, legt der Laufzeitstartcode das x87 FPU-Steuerwort-Genauigkeitskontrollfeld auf 53 Bits fest. Daher tritt jeder Vorgang vom Typ "float" und "double" in einem Ausdruck mit einem 53-Bit-Signifikand und einem 15-Bit-Exponenten auf. Alle SSE-Operationen mit einfacher Genauigkeit verwenden jedoch 24-Bit-Signifikanden/8-Bit-Exponenten, und SSE2-Operationen mit doppelter Genauigkeit verwenden 53-Bit-Signifikanden/11-Bit-Exponenten. Weitere Informationen finden Sie unter _control87, _controlfp, __control87_2.
Diese Unterschiede können in einer Ausdrucksbaumstruktur auftreten. Dies gilt jedoch nicht, wenn nach jedem untergeordneten Ausdruck eine Benutzerzuordnung stattfindet:
r = f1 * f2 + d; // Different results are possible on SSE/SSE2.
Gegenüber:
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 ändert nicht die MXCSR-Steuerelementbits. Daher wird mit /arch:SSE2 jede Funktion, die von der Verwendung von controlfp abhängt, unterbrochen.
So legen Sie diese Compileroption für SSE oder SSE2 in Visual Studio fest
Öffnen Sie das Dialogfeld Eigenschaftenseiten für das Projekt. Weitere Informationen finden Sie unter Gewusst wie: Öffnen von Projekteigenschaftenseiten.
Klicken Sie auf den Ordner C/C++.
Klicken Sie auf die Eigenschaftenseite Codegenerierung.
Ändern Sie die Eigenschaft Erweitertes Anweisungsset aktivieren.
So legen Sie die /arch:AVX-Compileroption in Visual Studio fest
Öffnen Sie das Dialogfeld Eigenschaftenseiten für das Projekt. Weitere Informationen finden Sie unter Gewusst wie: Öffnen von Projekteigenschaftenseiten.
Klicken Sie auf den Ordner C/C++.
Klicken Sie auf die Eigenschaftenseite für die Befehlszeile.
Fügen Sie im Feld Zusätzliche Optionen /arch:AVX hinzu.
So legen Sie diese Compileroption programmgesteuert fest
- Weitere Informationen finden Sie unter EnableEnhancedInstructionSet.