Share via


/arch (最小 CPU 架構)

使用 Streaming SIMD Extensions (SSE)、Streaming SIMD Extensions 2 (SSE2) 和 Advanced Vector Extension (AVX) 指示指定程式碼產生的架構。

/arch:[SSE|SSE2|AVX]

備註

注意事項注意事項

針對 x86 平台編譯時,才能使用 /arch:SSE/arch:SSE2/arch:AVX 僅適用於 x86 和 x64 平台。 編譯 Itanium時無法使用這個編譯器選項。

SSE 和 SSE2 指示存在於各種 Intel 及 AMD 處理器上。 AVX 指示存在於 Intel Sandy Bridge 處理器及 AMD Bulldozer 處理器。

/arch:SSE 可讓編譯器使用 SSE 指示。 /arch:SSE2 可讓編譯器使用 SSE2 指示。 /arch:AVX 會指示編譯器使用 AVX 指令編碼方式。

_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 處理器之 Pentium Pro 修訂內的 CMOV 指令。

當您使用 /clr 編譯時,/arch 不會影響 Managed 函式的程式碼產生。 /arch 只會影響到原生函式的程式碼產生。

/arch/QIfist 不能用於同一次編譯。

尤其是,如果使用者不使用 _controlfp 修改 FP 控制字組,則執行階段啟動碼會將 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 中設定 SSE 或 SSE2 的這個編譯器選項

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

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

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

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

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

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

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

  3. 按一下 [命令列] 屬性頁。

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

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

請參閱

參考

編譯器選項

設定編譯器選項