Debian

Debian:x86-64 二進製文件使用什麼指令?

  • December 15, 2015

我想知道二進製文件是否使用(編譯為)特殊指令集,如 SSE 4.1/4.2、AVX、F16C。如何確定包中的二進製文件是否使用某些指令集?

我知道我可以configure在手動編譯包時使用開關啟用此類指令,但是當使用來自 Debian 儲存庫的預編譯包時,必須有一個預設值。

可能二進製文件沒有用太具體的指令集編譯,因為它們不能在任何系統上使用,或者根據二進製文件,它們是用替代子程序編譯的,這些子程序用基本指令“模擬”處理以支持缺乏這些功能的 CPU。

我知道我可以查看rulesDebian 原始碼包的文件,但如果有更簡單的方法可以做到這一點,我很感興趣。

  • x86-64 二進製文件使用的 CPU 指令是否非常有限?
  • 包可以使用非常特定的指令集,它們是否可以使用更原始的指令進行備份?

為了一般地回答您的問題,https://superuser.com/questions/726395/how-to-check-if-a-binary-requires-sse4-or-avx-on-linux提供了一個可以反彙編的腳本二進制(的輸出objdump),並將嘗試找出所需的最小指令集。這種技術必然是近似的,因為給定的二進製文件可能具有不同的執行路徑,具體取決於可用的指令集,並且這樣的二進製文件似乎需要它支持的“最佳”指令集,即使它實際上可以在沒有它的情況下執行。

特別是關於 Debian 軟體包,任何為amd64(64 位“PC”指令集)打包的東西都必須能夠在任何 AMD64 或 x86-64 兼容的 CPU 上執行;這意味著它可以使用完整的標準 64 位指令集,其中包括 SSE2,但如果它為不支持它們的 CPU 提供備份功能,它只能使用其他功能(包括您列出的那些)。有例外,但包裝應在包裝說明中註明(參見範例rr)。

Linux 核心本身可以調整其特性以適應它發現自己執行的 CPU 的特性。如果它是為 x86-64 編譯的,它假定X86_64它可以使用 TSC、CMPXCHG64、CMOV(在那個連結上查找任何依賴的東西)。但可以編譯它以在執行時檢查 AES-NI、AVX、AVX2 等功能是否可用,並特別使用它們來加速加密計算。這可能會使任何使用這些特性的程序受益(儘管代價是上下文切換到核心)。

在某些情況下,動態連結器還可以幫助根據 CPU 提供替代方案:因此為體系結構libc6-i686提供了一組庫,這些庫將自動使用,而不是與指令集i386兼容(並支持 CMOV)的 CPU 上的準系統等效項。i686

引用自:https://unix.stackexchange.com/questions/249380