/arch (最小 CPU 架構)
更新:2007 年 11 月
使用 Streaming SIMD Extensions (SSE) 和 Streaming SIMD Extensions 2 (SSE2) 指令,指定產生程式碼的架構。
/arch:[SSE|SSE2]
備註
注意事項: |
---|
/arch 只能在為 x86 平台編譯時使用,這個編譯器選項在針對 x64 或 Itanium 編譯時無法使用。 |
在各種不同的 Pentium 和 AMD Athlon 處理器中都有 SSE 指令,而 SSE2 指令目前則只有 Pentium 4 處理器才有。
/arch:SSE 可以讓編譯器使用 SSE 指令,而 /arch:SSE2 可以讓編譯器使用 SSE2 指令。
_M_IX86_FP 表示所使用的 /arch 編譯器選項 (若有任何選項的話)。如需詳細資訊,請參閱Predefined Macros。
最佳化程式可在指定 /arch 時,選擇何時以及如何使用 SSE 與 SSE2 指令。當判斷使用 SSE/SSE2 指令和暫存器會比 x87 浮點暫存器堆疊要快時,SSE 和 SSE2 指令就會用於一些純量浮點計算之中。因此,您的程式碼實際上將混用 x87 和 SSE/SSE2 進行浮點計算。此外,有了 /arch:SSE2,SSE2 指令就可用於一些 64 位元整數運算上。
除了使用 SSE 和 SSE2 指令以外,編譯器也會使用處理器修訂內支援 SSE 和 SSE2 的其他指令。此狀況的範例之一是:為最先出現在 Intel 處理器之 PentiumPro 修訂內的 CMOV 指令。
在以 /clr (Common Language Runtime 編譯) 編譯時,/arch 對於 Managed 函式程式碼的產生將沒有任何作用;/arch 只會影響原生函式的程式碼產生。
/arch 和 /QIfist (抑制 _ftol) 不能用於同一個編譯中。
尤其是,若使用者不使用 _controlfp 修改 FP 控制字,則執行階段啟始程式碼 (Startup Code) 會將 x87 FPU 控制字精確控制欄位設成 53 位元,因此運算式內的所有浮點數和雙精度浮點數運算將包含 53 位元的有效數字與 15 位元的指數。但是所有的 SSE 單精度運算會使用 24 位元的有效數字/8 位元的指數,而 SSE2 雙精度運算則會使用 53 位元的有效數字/11 位元的指數。如需詳細資訊,請參閱 _control87, _controlfp, __control87_2。
進一步地說明,這些差異可能會發生於單精度的運算式樹狀架構內,而並不會發生於每個子運算式之後所包含的使用者作業:
r = f1 * f2 + d; // Different results are possible on SSE/SSE2.
對照:
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 並不會變更 MXCSR 控制位元,因此有了 /arch:SSE2,依賴使用 controlfp 的任何功能都會遭到中斷。
若要在 Visual Studio 開發環境中設定這個編譯器選項
開啟專案的 [屬性頁] 對話方塊。如需詳細資訊,請參閱 HOW TO:開啟專案屬性頁。
按一下 [C/C++] 資料夾。
按一下 [程式碼產生] 屬性頁。
修改 [啟用進階指令集] 屬性。