共用方式為


/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 開發環境中設定這個編譯器選項

  1. 開啟專案的 [屬性頁] 對話方塊。如需詳細資訊,請參閱 HOW TO:開啟專案屬性頁

  2. 按一下 [C/C++] 資料夾。

  3. 按一下 [程式碼產生] 屬性頁。

  4. 修改 [啟用進階指令集] 屬性。

若要以程式方式設定這個編譯器選項

請參閱

參考

編譯器選項

設定編譯器選項