![](/img/trans.png)
[英]Can't compile ruby extensions: CPU you selected does not support x86-64 instruction set
[英]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的列表:
-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.