/arch (x86)
為程式碼產生指定結構在 x86。 請參閱 /arch (x64) 和 /arch (ARM)。
/arch:[IA32|SSE|SSE2|AVX]
引數
/arch:IA32
未指定增強指示同時為浮點計算指定 x87。/arch:SSE
啟用使用 SSE 指令。/arch:SSE2
啟用使用 SSE2 指令。 如果在 /arch 選項未指定,這是在 x86 平台上的預設值。/arch:AVX
啟用使用高 Intel Advanced Vector Extensions 指令。
備註
SSE 和 SSE2 指示存在於各種 Intel 及 AMD 處理器上。 AVX 指示存在於 Intel Sandy Bridge 處理器及 AMD Bulldozer 處理器。
如果有的話,請使用 /arch 編譯器選項的 _M_IX86_FP 巨集表示。 如需詳細資訊,請參閱預先定義巨集。
指定 /arch 時,最佳化工具會選擇使用 SSE 和 SSE2 指示的時機和方式。 它提供一些純量浮點計算使用 SSE 和 SSE2 指令時,它會判斷時更快速的使用 SSE/SSE2 指令和暫存器而非 x87 浮點暫存器堆疊。 因此,您的程式碼實際上將混用 x87 和 SSE/SSE2 進行浮點計算。 此外,與 /arch:SSE2, SSE2 指令只能用於一些 64 位元整數作業。
除了使用 SSE 和 SSE2 指令以外,編譯器也會使用處理器修訂內支援 SSE 和 SSE2 的其他指令。 此狀況的範例之一是:為最先出現在 Intel 處理器之 Pentium Pro 修訂內的 CMOV 指令。
當您使用 /clr 編譯時, /arch 會產生程式碼的無效 Managed 函式的。 /arch 只會影響到原生函式的程式碼產生。
/arch 和 /QIfist 不能用於同一次編譯。 特別是,因此,如果您不使用 _controlfp 修改 FP 控制字,然後 Runtime 啟始程式碼會將 53 位元的 x87 FPU 控制字精確控制欄位。 因此,每個浮點數和雙精度浮點數運算使用 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
// whether x87 stack is used or SSE/SSE2 is used.
controlfp 並不會變更 MXCSR 控制項位元。 因此,等於 /arch:SSE2,取決於使用 controlfp 的所有功能會中斷。
若要在 Visual Studio 中設定 SSE 或 SSE2 的這個編譯器選項
開啟專案的 [屬性頁] 對話方塊。 如需詳細資訊,請參閱HOW TO:開啟專案屬性頁。
選取 [C/C++] 資料夾。
選取 [程式碼產生] 屬性頁。
修改 [啟用進階指令集] 屬性。
若要在 Visual Studio 中設定 /arch:AVX 編譯器選項
開啟專案的 [屬性頁] 對話方塊。 如需詳細資訊,請參閱HOW TO:開啟專案屬性頁。
選取 [C/C++] 資料夾。
選取 [命令列] 屬性頁。
在 [其他選項] 方塊中加入 /arch:AVX。