AVX指令集是什麼?它的應用又有哪些?

2020-12-24 超能網

很多讀者朋友可能在閱讀我們的文章時經常會看到AVX指令集這個名詞,比如說在CPU評測中就往往能夠看到它的身影,一些新入坑的玩家可能會不明白這個名詞的含義,今天這篇文章就簡單介紹一下該指令集的來龍去脈,並且梳理一下它目前在實際中的應用情況。

從SIMD說起

要搞明白AVX指令集的作用,首先要講明白它是什麼。定義很簡單,它就是x86處理器上面的一套SIMD指令集,是經典的SSE系列指令集的直接繼承者。那麼SIMD又是什麼呢?

在計算機剛剛出現的早期階段,馮·諾伊曼式計算機每次輸入一個指令只能夠操作一對數據,比如說"+,a,b"可以讓ab進行相加,這就是單指令流單數據流(Single Instruction Stream, Single Data Stream)。顯然,在面對大量數據的時候,這種操作數據的方法效率較低,程式設計師想要讓一次操作就對多組數據生效,怎麼辦呢?單指令流多數據流操作(Single Instruction Stream, Multiple Data Stream)的思路就被引入了,它讓輸入一次指令就操作多組數據變成了可能。

更直觀的區別可以看上面的示意圖。

上世紀八九十年代,很多處理器開發商都意識到了SIMD的前景,他們開始往自家的處理器裡加入SIMD支持。1996年,Intel發布了基於新版P55C架構(最早一版Pentium處理器為P5架構)的Pentium MMX系列處理器,其中引入了新的MMX指令集,開始支持SIMD。

從MMX到SSE,再到AVX

Pentium MMX系列處理器上新引入的MMX指令集開創了x86處理器支持SIMD操作的先河,該指令集定義了8個64-bit寬度的寄存器,每個寄存器的64-bit容量中可以放入八個8-bit長度的整數或四個16-bit長度整數或兩個32-bit整數,CPU在識別到MMX指令集的新指令時會自動將寄存器中的數據進行分割計算,這樣一來,單個指令就成功操作了多個數據,實現了SIMD。

但MMX畢竟太嫩,它實際上是通過復用CPU內部x87浮點單元的寄存器來實現SIMD的,所以與運行浮點運算的x87指令集有衝突,兩者不能交叉使用,必須先進行切換。另外,由於上述的衝突,它只支持整數操作,在即將要到來的3D時代中顯得有些不夠用。

Intel當然很清楚MMX指令集的局限之處,而競爭對手新搗鼓出來的3DNow!指令集(1998年,AMD K6-2)已經支持了浮點SIMD運算,於是他們趕緊在經典的奔3處理器上面引入了新的SSE(Streaming SIMD Extensions)指令集,時間點為1999年2月份。

SSE指令集解決了MMX指令集身上存在的兩大問題,通過引入新的獨立寄存器解決了與浮點運算間的衝突問題,同時也就支持了浮點SIMD運算。當然它相對於MMX有很大加強,表現在它的寄存器寬度隨著處理器架構的進步而達到了128-bit,這樣一來一次SIMD指令能夠操作更多的數據,效率上有大幅度的提高。不過初代SSE指令集的單個寄存器只支持32-bit長度的浮點數,還是有很大的局限性,這個問題在Pentium 4(Willamette,2000年)上面引入的SSE2中被解決了,SIMD操作的靈活度高了很多。

隨後在約莫8年的時間裡,Intel一直在更新SSE指令集,從SSE出到SSE4,AMD方面則是一直在跟進,到了SSE4.2,AMD開始想要在指令集上面尋找自己的翻身點,於是推出了只有自家支持的SSE4a子集,隨後更是提前於Intel提出了SSE5。

但Intel不幹,我是x86的老大,我不能跟著你來。他們另起爐灶,準備在未來的Sandy Bridge架構中引入一套新的SIMD指令集,這套新指令集在2008年公布,被命名為高級向量擴展(Advanced Vector Extensions)。

革新的AVX,越來越寬的寄存器

相比起迭代了多年的SSE系列指令集,AVX指令集帶來了巨大的革新,其中最為主要的是,它在兼容SSE指令集性的同時,將SSE時代最大寬度為128-bit的寄存器拓寬到了256-bit。

不過初代AVX指令集還是比較保守的,它沒有將所有指令寬度拓寬到256-bit,而是選擇停留在128-bit上面。全面進入256-bit時代這個任務,還是交給了隨後的Haswell架構來完成(2013年6月份)。

同處理器用不同指令集的能效對比

但如果以為Intel會就此停下腳步的話,那就大錯特錯了,他們很快搗鼓出了更寬的AVX-512指令集,顧名思義,其寄存器寬度再次加倍,來到512-bit。

首個支持AVX-512指令集的處理器其實是Intel的Xeon Phi加速卡,首次跑到CPU上已經是Skylake-X系列了。而AVX-512也並不再是一個單一的指令集,它實際上指代的是多個指令集的集合,目前這個數字是17,之後可能還會增多。所有支持AVX-512的處理器都必須支持AVX-512 Foundation子集,從命名上也可以看出,它其實是AVX-512指令集的基礎。

長長的AVX-512子集列表

目前只有基於Skylake-Server和Ice Lake這兩個架構的處理器可以支持AVX-512(Cannon Lake死了,不然也算),使用門檻較高,一般新一點的應用也只是針對AVX2進行優化。

寬度越大,處理器的計算能力也就越強,尤其是在浮點運算方面,理論上提升有一倍之多,而實際應用中,如果優化得當,其提升幅度還要大一些。但是,新指令集在帶來性能增長的同時也帶來了另一個讓人感到頭痛的問題——功耗。

性能強了,峰值功耗也高了

AVX指令集在帶來更高性能的同時讓CPU的峰值功耗也變高了,可以通過下面的例子進行理解:

飛機發動機是按照最大起飛重量設計的,如果實際的載重沒有到最大起飛重量的話,飛行員就可以減推力起飛來降低油耗。CPU也是一樣的,最吃功耗的執行單元是根據最大寬度來設計的,平時用不到最大寬度的時候它的功耗就小了,而一旦用到極限,它也就會全開,此時CPU的功耗就上去了。

現如今CPU的功耗是根據負載大小來的,在同頻下面,AVX2的負載明顯高於SSE負載,因此它的功耗也會大上去。為了讓CPU的功耗保持在TDP範圍之內,Intel特地設計了一個AVX偏移頻率,讓工作在AVX狀態下面的處理器降低一點頻率以減小發熱量和功耗,保證使用安全。Intel官方也在2014年的一份AVX指令集優化白皮書中明確說明使用AVX指令集需要額外的電壓和電流。

只在跑分上看到?其實不然

對於我們這些要做跑分評測的編輯來說,最常接觸到的AVX應用其實就是AIDA64了,那麼可能有讀者就要問了,這個指令集都已經推出十年了難道只能用來跑分烤機嗎?當然不是,在Intel的推廣之下,現如今已經有大量的生產力應用支持它了,主要在渲染、視頻編碼、加解密和數學計算等方面有應用,新的AVX-512還針對深度學習推出了AVX-512 VNNI子集,另外,普通玩家最為關心的遊戲方面也是有越來越多的應用了,下面舉幾個例子。

渲染、視頻編碼

渲染方面最常見的有Blender,它不僅僅在我們的測試中被用的多,是真的有很多人都會用它做動畫或者CG圖,它的渲染引擎可以調用AVX2指令集進行加速計算,吃滿你的CPU。

跟渲染方面有點搭邊的就是視頻編碼了,x264和x265這兩個知名開源視頻編碼器想必已經不用再多介紹了,它們都在前幾年中紛紛加入了對於AVX指令集的支持,後者甚至加入了針對AVX-512的支持,不過還需要繼續優化。另外,Intel方面自己也開源了一套名為SVT的視頻編碼器,配合不同後端可以實現不同的編碼,對AVX和多核的優化相當好。

深度學習

深度學習方面,Google著名的開源深度學習框架Tensorflow在1.6版本之後就已經需要一顆支持AVX指令集的CPU了,換言之,它應用了AVX指令集。

另外,AVX-512的大寬度讓它很適合用來跑深度學習,所以Intel也針對深度學習設計了一套子指令集——AVX-512 VNNI,用來加速深度學習相關的計算,在測試中,它表現出了相當的實力。

加解密

加解密計算場景中對CPU的計算吞吐量有較大的要求,此時AVX指令集就可以發揮作用,常見的軟體支持就有OpenSSL這個堪稱是網際網路基石的加密庫,另外像很多程序會使用的libsodium加密庫也提供了從AVX到AVX-512的優化,而Linux內核也支持使用AVX和AVX2指令集進行加解密計算,還會配合AES-NI這個專用的指令集。實際上目前還有很多數字貨幣的計算過程支持使用AVX指令集,不過這個應該是真的沒有人會用了……

遊戲

近兩三年的大作基本都開始啟用AVX指令集來進行計算了,一般在遊戲中CPU負責除了圖形以外的雜活,比如說計算各種NPC的運動路徑,計算各種動體的軌跡這樣的雜活。不過近兩年也有廠商想讓Intel參與進遊戲圖形計算,甚至是當下熱門的光線追蹤運算,比如Intel的光線追蹤計算庫Embree就可以被整合進遊戲中,目前已經有《坦克世界》等遊戲使用了它,Embree庫高度依賴AVX指令集,也對CPU的遊戲性能提出了新的闡述方式:直接參與圖形渲染。

總結:未來是AVX的

總的來說,AVX目前還沒有完全展露出它的價值,這也是軟體優化缺位導致的。不過隨著各路編譯器的跟進、處理器迭代使得支持AVX指令集的處理器普及,相信我們的常用軟體也會加入AVX優化,比如說在圖片處理時調用它。配合上已經展開應用的各種生產力應用,AVX的前景非常廣闊。

相關焦點

  • 智能安防巡邏機器人的應用場景有哪些,它的作用是什麼
    打開APP 智能安防巡邏機器人的應用場景有哪些,它的作用是什麼 程大器 發表於 2020-12-23 16:15:28 目前,傳統的安防行業正在加速人工智慧在該領域的集成和應用。
  • 5G智慧路燈杆是什麼,它的應用場景都有哪些
    打開APP 5G智慧路燈杆是什麼,它的應用場景都有哪些 計訊 發表於 2020-12-08 16:49:45 智慧路燈杆公路應用 近年來,智慧路燈杆逐漸出現在多個城市的街頭。與傳統路燈不同,智慧路燈杆整合了監控、攝像頭、5G微基站、安全報警等硬體,通過信息感知和大數據交互技術,能實現智能照明、智慧交通、信息發布等功能。隨著一批批智慧路燈杆在各地投入使用,智慧城市有了新的景色。
  • Linus再次向Intel開炮:祝AVX512指令集早死早超生
    繼Fu*k NVIDIA的名言之後,Linus最近再次向英特爾開炮:祝AVX512指令集早死早超生!Linus是在近期Intel Alder Lake處理器(第12代酷睿)取消AVX512指令集的討論中發出以上評論的。由於採用的大小核架構中的小核心不支持AVX512,Intel為避免運行錯誤而取消了整個處理器對於AVX512指令集的支持。
  • 深度:RISC-V指令集架構和生態
    「煮酒言歡」進入IC技術圈,這裡有近50個IC技術公眾號。內部因素:(4)從產業內部角度來看,主流指令集架構複雜,硬體實現難度大,授權費用高企,晶片企業成本居高不下。RISC-V指令集架構技術特性:在於簡潔、模塊化、可擴展及開源,通過有限指令集的組合和擴展,構建適合任何領域的微處理器。RISC-V產業生態逐步完善。國際產業——多個RISC-V開源版本及商用IP誕生;科技巨頭和初創公司紛紛布局;行業應用紛紛落地。
  • FGO國服聖誕活動2019指令紋章有哪些?聖誕2019指令紋章一覽
    FGO國服聖誕活動2019指令紋章有哪些?很多玩家比較關係活動贈送的指令紋章有哪些,想知道本次活動的指令紋章具體效果都是什麼,小編今天為大家帶來了FGO國服聖誕2019指令紋章一覽,感興趣的玩家快來和小編一起了解一下吧!
  • 什麼是子母帶?子母帶應用領域有哪些?
    什麼是子母帶?子母帶應用領域有哪些? 2017-07-14 09:56:44 來源:全球紡織網 什麼是子母帶?子母帶應用領域有哪些?子母繩帶即子母帶+繩帶類別。
  • 一套遷移技能 & 一場賽事信息,一文輕鬆解碼「鯤鵬應用創新大賽...
    這塊主要有一些壓力測試,長穩測試,包括鯤鵬展翅認證。  C/C++ 代碼遷移  高級語言通常分為編譯型語言和解釋型語言,C/C++/Go 語言是典型的編譯型語言。編譯型語言開發的程序從 x86 處理器遷移到鯤鵬處理器的時候,因為二者之間的架構差異、指令集差異和向量寄存器差異,通常需要通過重新編譯才能正常運行。
  • 雲通信是什麼又有哪些應用場景
    雲通信是什麼又有哪些應用場景 工程師吳畏 發表於 2018-09-10 09:01:00 對於當前的雲計算市場和雲服務模式來說,我們之前聊過公有雲、私有雲和混合雲等不同層面在當今企業用戶當中究竟進行了哪些深入的應用
  • 三菱PLC觸點比較應用指令
    系列PLC觸點比較應用指令包括觸點比較取指令、與指令以及或指令。PLC應用舉例本文引用地址:http://www.eepw.com.cn/article/201612/331350.htm1、三相異步電動機的星型-三角形降壓啟動PLC控制一、項目所需設備、工具、材料見表8-1。表8-1 項目所需設備、工具、材料
  • 到底什麼是Mini LED,Mini LED到底有哪些應用
    打開APP 到底什麼是Mini LED,Mini LED到底有哪些應用 李倩 發表於 2018-05-21 11:07:48 隨著大陸
  • 雲臺的概念及場景應用,你知道它是機器人的什麼部位嗎?
    從來都沒在意過脖子,它只是我們身體中微不足道的一小部分。自從學習了機器人的相關知識,了解了雲臺的概念及應用,才更加深刻地體會到科技創新的精妙都已經在生活中顯現,我們需要的是發現的眼睛和思考的智慧。在開始本文講解前,請思考如下問題:1、 你觀察過銀行裡的監控器嗎?
  • 好用的投影手機APP應用有哪些?
    投影手機好用的APP有哪些?這大概是很多vvetime用戶都在討論的問題。
  • UASP協議與TRIM指令是什麼?能提升硬碟讀寫速度嗎?
    在選購移動存儲應用時,我們經常會發現產品詳情頁提到UASP協議與TRIM指令等名詞,看起來很「牛叉」的樣子,但很多新手用戶都很蒙圈。那麼,UASP協議與TRIM指令到底是什麼意思?能提升硬碟讀寫速度嗎?今天我們就一起來學習下!
  • iOS 13 如何藉助快捷指令方便地實現更改桌面應用圖標?
    「快捷指令」是 iOS 系統自帶的一項實用 App,用戶可以藉助該應用更方便地實現一些操作。在 iOS 13 中,也可以使用該應用來為已下載的應用更換圖標,具體操作方法如下:1.打開「快捷指令」,在「我的快捷指令」中,點擊「創建快捷指令」。2.點擊右上角的「…」,根據喜好填寫快捷指令名稱,然後點擊「添加到主屏幕」。
  • 融象數科與指令集智能科技籤署戰略合作協議,聚焦智能物聯網技術的...
    來源:時刻頭條2020年12月14日,浙江融象數科控股有限公司與杭州指令集智能科技有限公司籤署戰略合作協議,雙方將在智慧物聯領域展開全方位合作。融象數科聯合創始人、總裁吳燁維,指令集智能科技CEO潘愛民出席籤約儀式,並代表雙方籤署協議。
  • ios快捷指令怎麼用在哪 蘋果快捷指令添加方法介紹
    ios快捷指令怎麼用在哪 蘋果快捷指令添加方法介紹  iOS13快捷指令功能怎麼用?如果您的 iPhone 已經升級到 iOS 13 或更新版本,可以發現在手機裡有一個名為「快捷指令」的應用。可能您會忽略它的存在,不過當您了解它的功能和作用後,就會發現這個 App 非常強大,一起來看看吧。
  • ESP8266接線及AT指令調試資料
    esp8266模塊介紹:8266片上集成wifi+MCU,使用的是一個M0的內核,而且成本很低,因為片上有wifi和MCU,所以作為網絡終端非常的方便
  • 《我的世界》灰色混凝土指令id是什麼 灰色混凝土指令id一覽
    導 讀 我的世界灰色混凝土指令id是什麼?
  • 位操作指令的功能是什麼呢?他又有哪些分類和作用?
    位操作類指令的功能是對單片機內部存儲器的位單元進行操作。位操作類指令有數據位傳送指令、位變量修改指令、位變量邏輯指令和位控制轉移指令。MCS-51 系列單片機內部能進行位操作的空間如下。① 特殊功能寄存器(SFR)中可位尋址的位單元。
  • 快捷指令庫手機版下載
    快捷指令用戶可以在這裡快捷創建用戶需要的指令,用戶只需要將自己常用的軟體添加到快捷指令當中,就可以很快地調用到自己的軟體,對於在手機上有非常多軟體的用戶來說會非常的方便,能夠幫助用戶節約非常多的時間。