/arch (Minimale CPU-Architektur)

Aktualisiert: November 2007

Gibt die Architektur für die Codegenerierung unter Verwendung von SSE-Anweisungen (Streaming-SIMD-Erweiterungen) und SSE2-Anweisungen (Streaming-SIMD-Erweiterungen 2) an.

/arch:[SSE|SSE2]

Hinweise

Hinweis:

/arch ist nur verfügbar, wenn für die x86-Plattform kompiliert wird. Diese Compileroption ist nicht verfügbar, wenn für x64 oder Itanium kompiliert wird.

Die SSE-Anweisungen werden in verschiedenen Pentium- und AMD Athlon-Prozessoren verwendet. SSE2-Anweisungen sind derzeit lediglich im Pentium 4-Prozessor vorhanden.

/arch:SSE ermöglicht dem Compiler, die SSE-Anweisungen zu verwenden, und /arch:SSE2 ermöglicht dem Compiler die Verwendung der SSE2-Anweisungen.

_M_IX86_FP gibt an, welche /arch-Compileroption verwendet wurde. Weitere Informationen finden Sie unter Predefined Macros.

Der Optimierer legt fest, wann und wie die SSE- und SSE2-Anweisungen bei Angabe von /arch genutzt werden. SSE- und SSE2-Anweisungen werden derzeit 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.

Bei der Kompilierung mit /clr (Common Language Runtime-Kompilierung) hat /arch keinen Einfluss auf die Codegenerierung für verwaltete Funktionen, da /arch lediglich Auswirkungen auf die Codegenerierung für systemeigene Funktionen hat.

/arch und /QIfist (_ftol unterdrücken) dürfen nicht in derselben Kompiliereinheit verwendet werden.

Insbesondere wird, wenn der Benutzer das FP-Steuerwort nicht mit _controlfp ändert, das Genauigkeitskontrollfeld des x87-FPU-Steuerworts durch den Laufzeit-Startcode auf 53 Bits festgelegt, sodass alle Operationen mit dem Typ float und double innerhalb eines Ausdrucks mit einem 53-Bit-Signifikanden und einem 15-Bit-Exponenten ausgeführt werden. 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.

Zur Veranschaulichung: Diese Unterschiede können in einer einzigen Ausdrucksbaumstruktur auftreten. Dies gilt 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.

Da die MXCSR-Steuerbits durch controlfp nicht geändert werden, werden Funktionen, die die Verwendung von controlfp voraussetzen, durch /arch:SSE2 außer Kraft gesetzt.

So legen Sie diese Compileroption in der Visual Studio-Entwicklungsumgebung fest

  1. Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Ausführliche Informationen finden Sie unter Gewusst wie: Öffnen von Projekteigenschaftenseiten.

  2. Klicken Sie auf den Ordner C/C++.

  3. Klicken Sie auf die Eigenschaftenseite Codegenerierung.

  4. Ändern Sie die Eigenschaft Erweitertes Anweisungsset aktivieren.

So legen Sie diese Compileroption programmgesteuert fest

Siehe auch

Referenz

Compileroptionen

Festlegen von Compileroptionen