AVX
AVX(Advanced Vector Extensions,進階向量擴充)增加了一種具備 YMM 暫存器和 VEX 編碼指令的向量程式設計模型,包括 256 位元浮點運算。這需要處理器支援以及作業系統狀態管理。
您需要瞭解的資訊
AVX(Advanced Vector Extensions,進階向量擴充)增加了一種具備 YMM 暫存器和 VEX 編碼指令的向量程式設計模型,包括 256 位元浮點運算。這需要處理器支援以及作業系統狀態管理。
運作方式
AVX 將向量暫存器擴充至 256 位元,每個 YMM 暫存器的低 128 位元與其 XMM 暫存器重疊。許多指令採用三運算元形式,允許目的端與輸入端不同。256 位元向量可容納 8 個單精度或 4 個雙精度浮點數值,但指令在運算元類型和行為上有所不同。
適用場景
數值迴圈可以透過單條向量指令將多個獨立的浮點數值相加。編譯器或函式庫必須正確產生該程式碼並妥善安排載入、對齊、結尾處理和相依性。AVX 不會自動跨核心平行化任意程式,且進行 256 位元整數運算時需要檢查相關擴充,而非直接假設為 AVX2。
如何檢查支援與啟用狀態
檢查 CPUID.01H:ECX AVX 位元 28、XSAVE 位元 26 和 OSXSAVE 位元 27。只有在確認 OSXSAVE 之後,軟體才可以使用 ECX=0 的 XGETBV,並驗證 XCR0 位元 1 和 2 是否啟用了 XMM 與 YMM 狀態。請使用維護良好的執行階段分派器,而非將執行 AVX 作為偵測實驗。
程式本身必須包含適當的實作,並在執行階段選擇該實作。硬體列舉、OS 啟用的暫存器狀態以及二進位檔編譯的基準版本是各自獨立的檢查項目。虛擬機器可以刻意公開比其主機更少的功能,且容器不會為宿主 CPU 增加指令。
該功能未涵蓋的範疇
僅支援 AVX 並不代表支援 AVX2、FMA、F16C、AVX-VNNI 或 AVX-512。向量寬度並不能說明指令需要多少週期。虛擬機器所公開的指令集可能會小於實體主機。
實務中的相容性與效能
使用具代表性的資料測量完整工作負載。較寬的向量可以減少指令數量,但記憶體傳輸、同步或轉換成本保持不變。指令延遲、輸送量和功耗行為取決於確切的微架構和操作條件。
實用驗證檢查清單
- 記錄所涉及的確切處理器或平台型號,以及應用程式、OS 和執行階段版本。保留實際錯誤或需求的確切措辭。
- 檢查該確切型號的原廠參考資料,然後在程式執行的環境中檢查有效功能和啟用狀態。
- 比對所選二進位檔或後端的所有需求。僅憑名稱相似的功能、別名或廣泛的技術標籤是不夠的。
- 確認應用程式已選擇預期的實作方式。當需求未獲滿足時,請使用其記載的診斷工具和受支援的後備機制。
- 一次進行一項受支援的變更,並重複執行相同的負載。隨時保留原始設定和復原途徑。
如果列出該功能但軟體無法使用
從確切發生失敗的元件著手。硬體資料庫描述的是記錄的硬體能力;作業系統或 Hypervisor 可能呈現不同的有效環境。非法指令錯誤同樣需要調查實際出錯的指令和二進位建置版本,因為損毀或無關的不受支援指令也可能產生類似的症狀。
安裝適用於該確切平台的受支援應用程式、驅動程式或執行階段版本,並在需要時使用廠商記載的基準建置版本或後備建置版本。軟體更新無法無中生有地創造處理器所缺乏的指令。韌體與安全性原則的變更應遵循系統製造商的程序和復原計劃,而非泛用的最佳化偏方。
本說明的來源與範圍
Intel 64 和 IA-32 架構軟體開發者手冊 · Linux 核心:在使用者空間中使用 XSTATE 功能
這些參考資料確立了架構行為和軟體需求。它們不會獨立驗證連結硬體型號頁面上的每個功能數值。有關型號支援,請使用該頁面的製造商實證並檢查有效系統組態。本文不提供效能基準測試、認證或獨立審查日期。
來源與驗證
編輯權限:Feex。未記錄獨立審查日期。 我們的研究方式.
- Intel 64 和 IA-32 架構軟體開發者手冊 · 第 1 卷和第 2 卷描述具名指令系列及 CPUID;第 3 卷描述狀態、分頁、VMX 和保護控制。架構說明文件並不構成對特定型號提供支援的依據。
- Linux 核心:在使用者空間中使用 XSTATE 功能 · OS 啟用的向量狀態、動態啟用的圖塊狀態、信號堆疊需求與 AMX 權限流程。Linux 專屬行為並非對其他 OS 的保證。
這篇文章實用嗎?
只要回答「是」或「否」即可。您也可以依意願選擇原因,或附上簡短說明。
感謝您。這有助於我們改進此頁面。