Compiling
CPU之間的實際編譯差異
對於一個項目,我打算用不同的 CPU 編譯各種 *NIX 作業系統及其相關軟體包,以便最大限度地優化特定係統的性能和性能。為了節省時間和金錢,我想知道用類似架構編譯程式碼之間是否真的有區別。
例如:如果我使用 Intel Core i7-8700 編譯Debian GNU/Linux + 預設 repos 的所有包,並在帶有 Intel Core i7-8650U的系統上使用作業系統*,它的執行是否與我編譯所有內容一樣使用i7-8650U*還是會失去一些性能?(我不在乎百分比,即使是1%我也想知道)
簡而言之,在同一代的不同 CPU 型號上編譯程式碼是否有比零 ( **0 ) 更有價值的數量?**因為如果不是這種情況,我只會從每個製造商的每一代中取出一個 CPU,然後對所有其他型號進行收工。
如果您真的打算最大化優化,那麼您將使用特定於目標的優化,包括那些依賴於了解處理器記憶體大小的優化。這意味著您幾乎可以肯定每個處理器都需要一個編譯器,儘管您可以在最快的可用處理器上為任何其他具有適當
-march
和-mtune
設置的處理器進行編譯。
您似乎將兩個不同的問題混為一談。編譯程式碼的架構並不一定意味著編譯器生成的程式碼。例如,考慮:
$ gcc -o hello hello.c
對於給定版本的
gcc
,無論您擁有什麼底層 CPU,這都可能為給定的硬體架構生成相同的程式碼。有一些例外。例如,該
-march=native
標誌將導致編譯器發出可能利用本地電腦 CPU 上的功能的程式碼。但即便如此,您也可以顯式指定march
與您機器的 CPU 架構不同的值,編譯器將發出可能無法在您的機器上執行的程式碼。