小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

AVX指令集是什么?它的應(yīng)用又有哪些?

 超能網(wǎng) 2020-10-26

很多讀者朋友可能在閱讀我們的文章時(shí)經(jīng)常會(huì)看到AVX指令集這個(gè)名詞,比如說(shuō)在CPU評(píng)測(cè)中就往往能夠看到它的身影,一些新入坑的玩家可能會(huì)不明白這個(gè)名詞的含義,今天這篇文章就簡(jiǎn)單介紹一下該指令集的來(lái)龍去脈,并且梳理一下它目前在實(shí)際中的應(yīng)用情況。

從SIMD說(shuō)起

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

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

AVX指令集是什么?它的應(yīng)用又有哪些?

更直觀的區(qū)別可以看上面的示意圖。

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

AVX指令集是什么?它的應(yīng)用又有哪些?

從MMX到SSE,再到AVX

Pentium MMX系列處理器上新引入的MMX指令集開(kāi)創(chuàng)了x86處理器支持SIMD操作的先河,該指令集定義了8個(gè)64-bit寬度的寄存器,每個(gè)寄存器的64-bit容量中可以放入八個(gè)8-bit長(zhǎng)度的整數(shù)或四個(gè)16-bit長(zhǎng)度整數(shù)或兩個(gè)32-bit整數(shù),CPU在識(shí)別到MMX指令集的新指令時(shí)會(huì)自動(dòng)將寄存器中的數(shù)據(jù)進(jìn)行分割計(jì)算,這樣一來(lái),單個(gè)指令就成功操作了多個(gè)數(shù)據(jù),實(shí)現(xiàn)了SIMD。

但MMX畢竟太嫩,它實(shí)際上是通過(guò)復(fù)用CPU內(nèi)部x87浮點(diǎn)單元的寄存器來(lái)實(shí)現(xiàn)SIMD的,所以與運(yùn)行浮點(diǎn)運(yùn)算的x87指令集有沖突,兩者不能交叉使用,必須先進(jìn)行切換。另外,由于上述的沖突,它只支持整數(shù)操作,在即將要到來(lái)的3D時(shí)代中顯得有些不夠用。

Intel當(dāng)然很清楚MMX指令集的局限之處,而競(jìng)爭(zhēng)對(duì)手新?lián)v鼓出來(lái)的3DNow!指令集(1998年,AMD K6-2)已經(jīng)支持了浮點(diǎn)SIMD運(yùn)算,于是他們趕緊在經(jīng)典的奔3處理器上面引入了新的SSE(Streaming SIMD Extensions)指令集,時(shí)間點(diǎn)為1999年2月份。

SSE指令集解決了MMX指令集身上存在的兩大問(wèn)題,通過(guò)引入新的獨(dú)立寄存器解決了與浮點(diǎn)運(yùn)算間的沖突問(wèn)題,同時(shí)也就支持了浮點(diǎn)SIMD運(yùn)算。當(dāng)然它相對(duì)于MMX有很大加強(qiáng),表現(xiàn)在它的寄存器寬度隨著處理器架構(gòu)的進(jìn)步而達(dá)到了128-bit,這樣一來(lái)一次SIMD指令能夠操作更多的數(shù)據(jù),效率上有大幅度的提高。不過(guò)初代SSE指令集的單個(gè)寄存器只支持32-bit長(zhǎng)度的浮點(diǎn)數(shù),還是有很大的局限性,這個(gè)問(wèn)題在Pentium 4(Willamette,2000年)上面引入的SSE2中被解決了,SIMD操作的靈活度高了很多。

隨后在約莫8年的時(shí)間里,Intel一直在更新SSE指令集,從SSE出到SSE4,AMD方面則是一直在跟進(jìn),到了SSE4.2,AMD開(kāi)始想要在指令集上面尋找自己的翻身點(diǎn),于是推出了只有自家支持的SSE4a子集,隨后更是提前于Intel提出了SSE5。

但I(xiàn)ntel不干,我是x86的老大,我不能跟著你來(lái)。他們另起爐灶,準(zhǔn)備在未來(lái)的Sandy Bridge架構(gòu)中引入一套新的SIMD指令集,這套新指令集在2008年公布,被命名為高級(jí)向量擴(kuò)展(Advanced Vector Extensions)。

革新的AVX,越來(lái)越寬的寄存器

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

不過(guò)初代AVX指令集還是比較保守的,它沒(méi)有將所有指令寬度拓寬到256-bit,而是選擇停留在128-bit上面。全面進(jìn)入256-bit時(shí)代這個(gè)任務(wù),還是交給了隨后的Haswell架構(gòu)來(lái)完成(2013年6月份)。

AVX指令集是什么?它的應(yīng)用又有哪些?

同處理器用不同指令集的能效對(duì)比

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

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

AVX指令集是什么?它的應(yīng)用又有哪些?

長(zhǎng)長(zhǎng)的AVX-512子集列表

目前只有基于Skylake-Server和Ice Lake這兩個(gè)架構(gòu)的處理器可以支持AVX-512(Cannon Lake死了,不然也算),使用門(mén)檻較高,一般新一點(diǎn)的應(yīng)用也只是針對(duì)AVX2進(jìn)行優(yōu)化。

寬度越大,處理器的計(jì)算能力也就越強(qiáng),尤其是在浮點(diǎn)運(yùn)算方面,理論上提升有一倍之多,而實(shí)際應(yīng)用中,如果優(yōu)化得當(dāng),其提升幅度還要大一些。但是,新指令集在帶來(lái)性能增長(zhǎng)的同時(shí)也帶來(lái)了另一個(gè)讓人感到頭痛的問(wèn)題——功耗。

性能強(qiáng)了,峰值功耗也高了

AVX指令集在帶來(lái)更高性能的同時(shí)讓CPU的峰值功耗也變高了,可以通過(guò)下面的例子進(jìn)行理解:

飛機(jī)發(fā)動(dòng)機(jī)是按照最大起飛重量設(shè)計(jì)的,如果實(shí)際的載重沒(méi)有到最大起飛重量的話,飛行員就可以減推力起飛來(lái)降低油耗。CPU也是一樣的,最吃功耗的執(zhí)行單元是根據(jù)最大寬度來(lái)設(shè)計(jì)的,平時(shí)用不到最大寬度的時(shí)候它的功耗就小了,而一旦用到極限,它也就會(huì)全開(kāi),此時(shí)CPU的功耗就上去了。

Intel AVX is Designed to achieve higher throughput for certain integer and floating-point operations. Using these instructions may cause processors to operate at less than the marked TDP frequency. These reductions in frequency occur because high-power Intel AVX instructions require additional voltage and electrical current.

現(xiàn)如今CPU的功耗是根據(jù)負(fù)載大小來(lái)的,在同頻下面,AVX2的負(fù)載明顯高于SSE負(fù)載,因此它的功耗也會(huì)大上去。為了讓CPU的功耗保持在TDP范圍之內(nèi),Intel特地設(shè)計(jì)了一個(gè)AVX偏移頻率,讓工作在AVX狀態(tài)下面的處理器降低一點(diǎn)頻率以減小發(fā)熱量和功耗,保證使用安全。Intel官方也在2014年的一份AVX指令集優(yōu)化白皮書(shū)中明確說(shuō)明使用AVX指令集需要額外的電壓和電流。

只在跑分上看到?其實(shí)不然

對(duì)于我們這些要做跑分評(píng)測(cè)的編輯來(lái)說(shuō),最常接觸到的AVX應(yīng)用其實(shí)就是AIDA64了,那么可能有讀者就要問(wèn)了,這個(gè)指令集都已經(jīng)推出十年了難道只能用來(lái)跑分烤機(jī)嗎?當(dāng)然不是,在Intel的推廣之下,現(xiàn)如今已經(jīng)有大量的生產(chǎn)力應(yīng)用支持它了,主要在渲染、視頻編碼、加解密和數(shù)學(xué)計(jì)算等方面有應(yīng)用,新的AVX-512還針對(duì)深度學(xué)習(xí)推出了AVX-512 VNNI子集,另外,普通玩家最為關(guān)心的游戲方面也是有越來(lái)越多的應(yīng)用了,下面舉幾個(gè)例子。

渲染、視頻編碼

渲染方面最常見(jiàn)的有Blender,它不僅僅在我們的測(cè)試中被用的多,是真的有很多人都會(huì)用它做動(dòng)畫(huà)或者CG圖,它的渲染引擎可以調(diào)用AVX2指令集進(jìn)行加速計(jì)算,吃滿你的CPU。

跟渲染方面有點(diǎn)搭邊的就是視頻編碼了,x264和x265這兩個(gè)知名開(kāi)源視頻編碼器想必已經(jīng)不用再多介紹了,它們都在前幾年中紛紛加入了對(duì)于AVX指令集的支持,后者甚至加入了針對(duì)AVX-512的支持,不過(guò)還需要繼續(xù)優(yōu)化。另外,Intel方面自己也開(kāi)源了一套名為SVT的視頻編碼器,配合不同后端可以實(shí)現(xiàn)不同的編碼,對(duì)AVX和多核的優(yōu)化相當(dāng)好。

深度學(xué)習(xí)

深度學(xué)習(xí)方面,Google著名的開(kāi)源深度學(xué)習(xí)框架Tensorflow在1.6版本之后就已經(jīng)需要一顆支持AVX指令集的CPU了,換言之,它應(yīng)用了AVX指令集。

另外,AVX-512的大寬度讓它很適合用來(lái)跑深度學(xué)習(xí),所以Intel也針對(duì)深度學(xué)習(xí)設(shè)計(jì)了一套子指令集——AVX-512 VNNI,用來(lái)加速深度學(xué)習(xí)相關(guān)的計(jì)算,在測(cè)試中,它表現(xiàn)出了相當(dāng)?shù)膶?shí)力。

加解密

加解密計(jì)算場(chǎng)景中對(duì)CPU的計(jì)算吞吐量有較大的要求,此時(shí)AVX指令集就可以發(fā)揮作用,常見(jiàn)的軟件支持就有OpenSSL這個(gè)堪稱(chēng)是互聯(lián)網(wǎng)基石的加密庫(kù),另外像很多程序會(huì)使用的libsodium加密庫(kù)也提供了從AVX到AVX-512的優(yōu)化,而Linux內(nèi)核也支持使用AVX和AVX2指令集進(jìn)行加解密計(jì)算,還會(huì)配合AES-NI這個(gè)專(zhuān)用的指令集。實(shí)際上目前還有很多數(shù)字貨幣的計(jì)算過(guò)程支持使用AVX指令集,不過(guò)這個(gè)應(yīng)該是真的沒(méi)有人會(huì)用了……

游戲

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

總結(jié):未來(lái)是AVX的

總的來(lái)說(shuō),AVX目前還沒(méi)有完全展露出它的價(jià)值,這也是軟件優(yōu)化缺位導(dǎo)致的。不過(guò)隨著各路編譯器的跟進(jìn)、處理器迭代使得支持AVX指令集的處理器普及,相信我們的常用軟件也會(huì)加入AVX優(yōu)化,比如說(shuō)在圖片處理時(shí)調(diào)用它。配合上已經(jīng)展開(kāi)應(yīng)用的各種生產(chǎn)力應(yīng)用,AVX的前景非常廣闊。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多