/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 的這個編譯器選項

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

  2. 選取 [C/C++] 資料夾。

  3. 選取 [程式碼產生] 屬性頁。

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

若要在 Visual Studio 中設定 /arch:AVX 編譯器選項

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

  2. 選取 [C/C++] 資料夾。

  3. 選取 [命令列] 屬性頁。

  4. 在 [其他選項] 方塊中加入 /arch:AVX。

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

請參閱

參考

/arch (最小 CPU 架構)

編譯器選項

設定編譯器選項