簡體   English   中英

對於 gcc 編譯器,gcc 在不使用任何標志與 -O2 進行編譯時針對哪個 x86-64 指令集?

[英]For gcc compiler, what x86-64 instruction set does gcc target when you compile without any flags versus -O2?

對於 x86-64,有很多指令集可以加速代碼執行。 這是來自 gcc wiki https://gcc.gnu.org/wiki/FunctionMultiVersioning的列表:

  • MMX
  • 上交所
  • SSE2
  • 上證3
  • SSSE3
  • SSE4.1
  • SSE4.2
  • 流行音樂網絡
  • AVX
  • AVX2

對於 gcc 編譯器,gcc 在編譯時不帶任何標志與-O2對應的 x86-64 指令集是什么?

為了簡單起見,我們只說問題是關於 gcc 版本 12(最近的主要版本)。 但我想知道我需要做什么 gcc 命令開關/選項,以便我可以看到我的 gcc 版本的功能。

我假設 gcc 選擇了“便攜”的東西,所以這可能意味着速度很慢。 但這只是我的假設……我想知道這意味着像 SSE4.2 還是沒有?

如果您不傳遞命令行-march選項,那么您將獲得編譯 gcc 時選擇的任何內容。 默認值為-march=x86-64但它可能已被編譯您的 gcc 的人覆蓋(例如您的二進制 package 分發者)。 請參閱https://gcc.gnu.org/install/configure.html並注意--with-arch選項。

您可以使用-v -Q進行編譯以查看正在使用的選項。 查找options passed行。

使用-march=x86-64可以獲得“最小公分母”代碼,該代碼將在每個已知的 x86-64 CPU 上運行,一直追溯到 AMD K8。 這包括 SSE2,它是原始 AMD64 規范的一部分,但不包括 SSE3 或任何更高版本。 popcnt也不會包括在內。

-march選項與-O2-f...標志(例如-funroll-loops )等優化選項正交。 無論使用什么優化選項,您始終會獲得與-march選擇的任何內容兼容的代碼。 但是-m標志(如-mavx )可以允許使用超出-march暗示的其他 CPU 功能,在這種情況下,您的代碼只能保證在具有這些功能的 CPU 上運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM