最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【轉(zhuǎn)】窺視靈魂深處 AMD新一代SIMD指令集剖析

2023-08-20 23:46 作者:失傳技術(shù)電磁所  | 我要投稿

窺視靈魂深處 AMD新一代SIMD指令集剖析

2011-08-05Mik《微型計(jì)算機(jī)》2011年7月下

對(duì)處理器來(lái)說(shuō)指令集是賦予硬件活力的催化劑,就像靈魂之于肉體。因此,AMD與Intel在指令集研發(fā)的斗爭(zhēng)上從來(lái)沒(méi)有停息過(guò),只是隨著AMD的推土機(jī)微架構(gòu)逐漸浮出水面,x86領(lǐng)域的SIMD(Single Instruction Multiple Data單指令多數(shù)據(jù)流)指令之爭(zhēng)將暫時(shí)告一段落。據(jù)現(xiàn)有消息來(lái)看推土機(jī)架構(gòu)的指令集規(guī)格比Sandy Bridge乃至后續(xù)的Ivy Bridge都要完整。這不禁讓人好奇,以XOP、FMA4 等為代表的AMD新一代指令集到底有何特點(diǎn)和優(yōu)勢(shì),能有如此的前瞻性。

窺視靈魂深處 AMD新一代SIMD指令集剖析

Bulldozer(推土機(jī))是AMD繼使用了多年的K10 micro architecture(微架構(gòu))后全新一代的微架構(gòu)。從AMD給出的官方資料來(lái)看AMD除了在Bulldozer上實(shí)現(xiàn)自家的 XOP、FMA4以及CVT16指令外,還將完整地支持Intel Sandy Bridge上的所有指令集。除了以前的MMX和SSE系列指令,還將包括新的SSE4.1、SSE4.2、AVX、AES和CLMUL 指令集。

Bulldozer和Sandy Bridge架構(gòu)的指令集對(duì)比介紹

1.Sandy Bridge支持的指令集

Sandy Br idge微架構(gòu)的處理器已經(jīng)在2011年1月發(fā)布了,在SIMD指令方面Sandy Bridge微架構(gòu)的處理器支持新一代的AVX(Advanced Vector Extensions高級(jí)適量擴(kuò)展)、AES或者說(shuō)AES-NI(Advanced Encryption Standard New Instructions高級(jí)加密標(biāo)準(zhǔn)指令)以及CLMUL指令,但并不提供對(duì)FMA指令的支持。從Intel給出的資料顯示,在下一代微架構(gòu)Ivy Bridge上FMA指令也不會(huì)得到支持,要到Haswell微架構(gòu)才會(huì)將FMA指令集加入到支持列表中。

2.Bulldozer支持的指令集

AMD即將登場(chǎng)的推土機(jī)架構(gòu)處理器,桌面產(chǎn)品代號(hào)為Zambezi,在SIMD指令方面推土機(jī)微架構(gòu)將完整地支持Intel新一代的AVX、AES以及CLMUL指令,并對(duì)SSE系列的擴(kuò)展指令進(jìn)行了補(bǔ)充支持,包括SSSE3、SSE4.1和SSE4.2指令集。此外,除了繼承自己的老指令集,還會(huì)提供包括XOP、FMA4以及CVT16指令集在內(nèi)的新指令集。實(shí)際上XOP、FMA4和CVT16指令集是從SSE5發(fā)展改良而來(lái)的,使用了AVX指令的設(shè)計(jì)方案,可以理解為是對(duì)AVX指令集的補(bǔ)充。值得注意的是,對(duì)于CVT16指令集AMD官方?jīng)]有文檔化,還不能肯定推土機(jī)架構(gòu)處理器是否能支持。

從SSE5和AVX開(kāi)始的新一代指令集之爭(zhēng)

在對(duì)x86指令集背景知識(shí)有所了解后,我們進(jìn)入本文所要講的主角——XOP系列指令集。由于XOP系列指令集算是AVX的擴(kuò)充版,所以筆者將嘗試帶領(lǐng)讀者深入探索,對(duì)比AVX與XOP系列指令的底層知識(shí)。

XOP、FMA4以及CVT16指令是由SSE5演變發(fā)展而來(lái),可是SSE5指令集已經(jīng)不存在了,AMD改變了SSE5指令集的設(shè)計(jì)方案,它的指令編碼方式使用了AVX的編碼規(guī)則,以達(dá)到兼容AVX指令的方案。也因此,XOP指令與AVX指令不存在沖突,你甚至可以將XOP、FMA和CVT16指令集可以看作是對(duì)AVX指令集的補(bǔ)充。

實(shí)際上XOP、FMA4、CVT16以及FMA、AES(AES-NI)、CLMUL指令都使用了AVX的指令編碼設(shè)計(jì)方式。從這方面來(lái)看AVX統(tǒng)一了新一代SIMD指令的編碼設(shè)計(jì)方案,這完全有別于早前的SSE系列僅以指令來(lái)區(qū)別的指令集形式。從這個(gè)趨勢(shì)看AVX的指令集編碼設(shè)計(jì)方案將在x86處理器平臺(tái)上統(tǒng)冶相當(dāng)長(zhǎng)的時(shí)間,換句話說(shuō)Intel又掌握了未來(lái)相當(dāng)長(zhǎng)時(shí)間內(nèi)x86架構(gòu)指令集設(shè)計(jì)的主動(dòng)權(quán)。

AMD新指令集得從 AVX系指令集說(shuō)起

Intel 的AVX系指令集包括下面4個(gè)子集:

(1) AVX指令集:新一代的SIMD指令

(2) FMA指令集:新一代的fused-multiply-add SIMD指令

(3) AES-NI指令集:新的指令由原SSE指令演變而來(lái)

(4) CLMUL指令集:新的指令由原SSE指令演變而來(lái)

這些指令集都統(tǒng)一使用了AVX指令的編碼設(shè)計(jì)規(guī)則,F(xiàn)MA是全新的子集,而AES-NI與 CLMUL指令由原有的SSE系列指令演變而來(lái),因此它們既有SSE版本,也有全新的AVX版本。推土機(jī)完整地支持AVX,實(shí)現(xiàn)的指令與Intel的AVX完全兼容。因此這里描述的AVX指令內(nèi)容既適合Intel也同樣適合AMD。

AVX在規(guī)格方面,提供了共365條指令,其中包括:

提供了35條256位的double-precision(雙精度)和single-precision(單精度)浮點(diǎn)vector運(yùn)算。覆蓋了9類(lèi)運(yùn)算:

add(加):例如 vaddps指令

subtract(減):例如vsubps指令

multiply(乘):例如vmulps指令

divide(除):例如vdivps指令

square-root(平方根):vsqrtps指令

compare(比較):例如vcmpps指令

max(求大值):例如vmaxps指令

min(求小值):例如vminps指令

round(舍入):例如vroundps指令

提供了57條256位非運(yùn)算類(lèi)的數(shù)據(jù)處理指令,其中包括了39條256位數(shù)據(jù)處理指令和18條新提供的256位vector數(shù)據(jù)處理指令。

FMA指令

FMA指令是AVX指令集的一個(gè)分支,因此FMA指令使用的是與AVX指令同樣的編碼設(shè)計(jì)規(guī)則。事實(shí)上,Intel的FMA指令集也吸取了AMD提出的SSE5指令集的精髓,F(xiàn)MA指令的fused-multiply-add(融合乘加)與SSE5中的multiply-add/subtract運(yùn)算如出一轍。當(dāng)前FMA指令已分為2個(gè)版本:

FMA3版本:這是Intel實(shí)現(xiàn)的,提供了3個(gè)操作數(shù)。

FMA4版本:這是AMD實(shí)現(xiàn)的,提供了4個(gè)操作數(shù)。

FMA指令實(shí)現(xiàn)了多樣的融合乘加/減操作,包括:

fused-multiply-add(融合乘加)操作,例如:VFMADDPS指令等。它做的操作表示為:d = (a * b) + c

fused-multiply-subtract(融合乘減)操作,例如:VFMASUBPS指令等。它做的操作表示為:d = (a * b) - c

fused-multiply-add/subtract interleave(融合乘與交互加減)操作,例如:FMADDSUBPS指令,F(xiàn)MASUBADDPS指令等,操作數(shù)必須為vector數(shù)據(jù),因此:可以一串式子表示為:d[1] = (a[1] * b[1]) + c[1],d[0] = (a[0] * b[0]) -c[0] 這意味著vector中的數(shù)據(jù)交互進(jìn)行融合乘加/減。

signed-reversed multiply on fused multiply-add(負(fù)融合乘加)操作,例如:VFNMADDPS指令,這表示:相乘后取負(fù)然后相加,即:d = - (a * b) + c

signed-reversed multiply on fused multiply-subtract(負(fù)融合乘減)操作,例如:VFNMSUBPS指令,這表示:相乘后取負(fù)然后相減,即:d = - (a * b) - c

這些FMA指令集包括256位的浮點(diǎn)vector運(yùn)算,還提供了128位的浮點(diǎn)vector數(shù)據(jù)與scalar數(shù)據(jù)運(yùn)算。對(duì)浮點(diǎn)運(yùn)算來(lái)說(shuō),F(xiàn)MA指令可謂提供了質(zhì)的效能飛越。

AMD的FMA4版本

AMD在FMA指令上實(shí)現(xiàn)了4個(gè)operands(操作數(shù)),被稱(chēng)為FMA4版本。對(duì)于上面第一個(gè)例子,我們用FMA4指令可以描述為:

// FMA4 指令

vfmaddsd xmm0, xmm1, xmm2,xmm3(表示xmm0 = xmm1 * xmm2+ xmm3)

vmovsd mmword ptr [d], xmm0(表示d = xmm0)

可以看到AMD的FMA4指令支持4-operand(4個(gè)操作數(shù)),這樣可以無(wú)損地使用目標(biāo)操作數(shù),圖1直觀地表達(dá)了vfmaddsd指令的操作:

圖1

圖1

Intel的FMA3版本

在FMA3版本中,其中一個(gè)操作數(shù)既是源操作數(shù)又是目標(biāo)操作數(shù),上面的示例使用FMA3指令描述如下:

// FMA3 指令

v fma d d213s d xmm1, xmm2,xmm3(表示xmm1=xmm1*xmm2+xmm3)

vmovsd mmword ptr [d], xmm1(表示d=xmm1)

在FMA3版本中第1個(gè)源操作數(shù)也是目標(biāo)操作數(shù),vfmadd213sd指令的操作過(guò)程如圖2所示:

圖2 我們看到這個(gè)圖上表示了src1和dest操作數(shù)都是xmm1寄存器。

圖2 我們看到這個(gè)圖上表示了src1和dest操作數(shù)都是xmm1寄存器。

FMA3與FMA4指令設(shè)計(jì)的差異

AMD的FMA4指令大部分是從SSE5分離出來(lái),并增加了少量的新指令。FMA3指令與FMA4指令在規(guī)格上是一致的,它們相同之處都是進(jìn)行相同的運(yùn)算,但是實(shí)現(xiàn)方式有些區(qū)別。兩者除了在操作數(shù)上有別外,大的差異在指令的Mnemonic(助記符),由于Intel的FMA3指令是3個(gè)操作數(shù),因此額外增加了123的mnemonic方法來(lái)表達(dá)指令操作數(shù)的順序,數(shù)字的意義如下:

1表示:第1個(gè)源操作數(shù)(也是目標(biāo)操作數(shù)),它由ModRM.reg尋址

2表示:第2個(gè)源操作數(shù),它由VEX.vvvv尋址

3表示:第3個(gè)源操作數(shù),它由ModRM.r/m 尋址

這些數(shù)字的排列順序有著特殊的意義:

排在第1位表示:被乘數(shù)

排在第2位表示:乘數(shù)

排在第3位表示:加數(shù)或者減數(shù)

舉個(gè)例子:231的mnemonic的排列表示:

第2個(gè)源操作數(shù)是被乘數(shù)

第3個(gè)源操作數(shù)是乘數(shù)

第1個(gè)源操作數(shù)是加數(shù)或減數(shù),目標(biāo)操作數(shù)原來(lái)存放的就是加數(shù)或減數(shù)。

vfmadd231ps ymm0, ymm1, ymmword ptr [mem]
  ? ? ? ? ? ? ----- ?---- ?-----------------
?? ? ? ? ? ? ? 加數(shù) ?被乘數(shù) ?乘數(shù)

這是一條典型的FMA3指令,它的運(yùn)算方式是:ymm0=(ymm1*[mem]) + ymm0。然而,同樣的運(yùn)算對(duì)應(yīng)的FMA4指令的語(yǔ)法則是:

vfmaddps ymm0, ymm1,ymmword ptr[mem],ymm0

從上例執(zhí)行fused-mult iply-add操作中我們已經(jīng)可以隱約看出Intel和AMD在指令設(shè)計(jì)中的差異。再以上面的VFMADDSD指令為例:

在AMD的FMA4設(shè)計(jì)中,只存在這種模式:

VFMADDSD dest,src1,src2,src3→dest=src1*src2+src3

無(wú)論指令操作數(shù)如何變化都是按照這個(gè)種模式進(jìn)行運(yùn)算。這種4個(gè)操作數(shù)的設(shè)計(jì)模式提供了更大的靈活性。需要使用特定的操作數(shù)運(yùn)算,只需改變操作數(shù)的位置便可實(shí)現(xiàn)了。

在Intel的FMA3設(shè)計(jì)中,存在3種運(yùn)算模式:

VFMADD132SD dest, src1,src2→dest = dest*src2+src1

VFMADD213SD dest, src1,src2→dest =dest*src1+src2

VFMADD231SD dest, src1,src2→dest=src1*src2+dest

FMA3指令通過(guò)對(duì)指令mnemonic(助記符)的修飾達(dá)到實(shí)現(xiàn)多種運(yùn)算模式的目的,在這種情況下產(chǎn)生了3條opcode碼,這是3條不同的指令opcode,可是實(shí)際上只進(jìn)行了一種運(yùn)算,就是fused-multiply-add(融合乘加運(yùn)算)。它的好處是:靈活多樣,在某些指令中已經(jīng)賦值給某個(gè)寄存器的情況下,可以從中選擇一種合適的指令來(lái)執(zhí)行fused-multiply-add運(yùn)算,來(lái)保證某一個(gè)操作數(shù)不被改變。弊端是:多增加了opcode碼,可能會(huì)讓人感覺(jué)有些混亂。并且更重要的是會(huì)改變dest操作數(shù)原有的值。

不過(guò),總體來(lái)說(shuō)FMA3和FMA4的設(shè)計(jì)是殊途同歸,目的和意圖是一樣的。Intel提供了96條FMA3指令,其中36條256位浮點(diǎn)ve ctor運(yùn)算,60條128位的浮點(diǎn)運(yùn)算,包括:vector數(shù)據(jù)與scalar數(shù)據(jù)。AMD提供了64條FMA4指令,其中24條256位浮點(diǎn)vector運(yùn)算,40條128位的浮點(diǎn)運(yùn)算,包括:vector數(shù)據(jù)與scalar數(shù)據(jù)。實(shí)際上FMA4與FMA3指令在規(guī)格上是一一對(duì)應(yīng)的。表面上看FMA4比FMA3少了32條指令,其實(shí)這是因?yàn)镕MA3指令采用了多個(gè)opcode的設(shè)計(jì)方案,這才導(dǎo)至了FMA3指令比FMA4指令多出了32條,但這完全不影響FMA3與FMA4指令是一一對(duì)應(yīng)的事實(shí)。可是這樣又重新步入了指令斗爭(zhēng)的漩渦。理論上說(shuō)支持4個(gè)操作數(shù)的FMA4設(shè)計(jì)更為優(yōu)越,靈活性更大,并且重要的是FMA4并不改變dest操作數(shù)原有的值。但實(shí)際情況中FMA3與FMA4誰(shuí)勝誰(shuí)負(fù)只有等待2013年Haswell微架構(gòu)推出之后以見(jiàn)分曉。

AES與CLMUL指令簡(jiǎn)介

Intel從Westmere微架構(gòu)處理器開(kāi)始就加入了對(duì)AES(AES-NI)指令和CLMUL指令的支持,而AMD也將在推土機(jī)微架構(gòu)處理器中提供對(duì)AES和CLMUL指令的支持。

AES指令

在2010年5月,Int el更新了官方術(shù)語(yǔ),將AES稱(chēng)為AES-NI(AESNew Instructions),在發(fā)布的AESNI指令集中分兩個(gè)版本各6條指令:

AES版本,也就是S SE版本,它使用了原來(lái)的SSE指令的編碼規(guī)則,僅支持2個(gè)操作數(shù),在處理器的CPUID標(biāo)志中只需要為支持AES即可。AES版本有6 條指令,分別為:AESENC,AESENCLAST,AESDEC,AESDECLAST,AESKEYGENASSIST以及AESIMC。

AVX版本,使用了AVX指令的編碼規(guī)則,支持3個(gè)操作數(shù),在處理器CPUID標(biāo)志中需要同時(shí)支持AES與AVX標(biāo)志。對(duì)應(yīng)的AVX版本也有6條指令,分別為:VAESENC,VAESENCLAST,VAESDEC, VAESDECLAST,VAESKEYGENASSIST以及VAESIMC。

AES-NI指令從硬件層上支持加密、解密運(yùn)算,這有軟件層上運(yùn)算無(wú)法比擬的效能優(yōu)勢(shì),其中4條AES-NI指令是對(duì)round進(jìn)行加密、解密,2條AES-NI指令用來(lái)產(chǎn)生round key。

CLMUL指令

CLMUL指令執(zhí)行的是Carry-less multiplication(無(wú)進(jìn)位乘)操作,實(shí)際上做的是復(fù)雜的二進(jìn)制多項(xiàng)式乘法。CLMUL也分為SSE版本和AVX版本各1條,分為:PCLMULQDQ(SSE版本)以及VPCLMULQDQ(AVX版本)。CLMUL類(lèi)似于AES-NI指令在加密、解密方面得到廣泛的應(yīng)用。

XOP指令的特色

AMD在2007年公布SSE5指令集規(guī)范,SSE5指令是原生的128位設(shè)計(jì),提供了幾大特色:

浮點(diǎn)multiply-add/subtract運(yùn)算;整數(shù)multiply-add/subtract運(yùn)算;整數(shù)horizontal-add/subtract運(yùn)算;矢量條件move操作;整數(shù)rotate和shift操作;浮點(diǎn)和整數(shù)comparison操作;test操作;round操作;convert操作

事實(shí)上XOP指令集和FMA指令集都脫胎于SSE5指令集,它們是在SSE5指令集的基礎(chǔ)上,使用了與AVX指令同樣的編碼設(shè)計(jì)規(guī)則重新設(shè)計(jì)的指令集。而原來(lái)定義的SSE5指令集已經(jīng)宣告廢止?,F(xiàn)在的XOP指令與SSE5定義的指令格式已經(jīng)大相庭徑。也就是說(shuō)同F(xiàn)AM一樣,XOP指令集中大量的指令都是從SSE5分離出來(lái)的整數(shù)運(yùn)算指令,它的特色包括:

1.XOP指令集原生是128位的設(shè)計(jì):在256位執(zhí)行環(huán)境中,指令使用128位的xmm寄存器,結(jié)果會(huì)使相應(yīng)的ymm寄存器高128位清0。只有少數(shù)指令會(huì)使用256位的ymm寄存器

2.提供強(qiáng)大的integer(整數(shù))運(yùn)算:將SSE5指令中的integer運(yùn)算分離形成XOP指令,主要體現(xiàn)在多樣的整數(shù)multiply-add/subtract運(yùn)算;整數(shù)rotate與shift運(yùn)算;以及多樣的comparison與test運(yùn)算。

3.引進(jìn)3個(gè)byes的XOP pref ix編碼設(shè)計(jì)方案:這個(gè)設(shè)計(jì)方案來(lái)源于AVX指令集,舍棄了原來(lái)SSE5指令集中的SIMD prefix與escape opcode,XOPprefix使用了8F這個(gè)opcode。

XOP指令的integer運(yùn)算

與AVX指令強(qiáng)大的f loat(浮點(diǎn))運(yùn)算形成鮮明的對(duì)比,XOP指令著重于integer(整數(shù))運(yùn)算,包括:

multiply-add/subtract運(yùn)算,它執(zhí)行的是:整數(shù)的 (a*b)+c

multiply-add-accumulate運(yùn)算,這是一個(gè)相乘后相加再累加的運(yùn)算。

Horizontal add/subtract運(yùn)算:這類(lèi)指令只有兩個(gè)操作數(shù),在源操作數(shù)內(nèi)進(jìn)行加/減運(yùn)算。

Vector conditional move操作:實(shí)現(xiàn)了在bit級(jí)別的條件選擇賦值操作vpcmov指令。

packed integer rotate/shift操作:這類(lèi)指令分為shift(位移)和rotate(循環(huán))兩類(lèi)操作,每類(lèi)操作可以實(shí)現(xiàn)多種元素單位,包括:byte,word,doubleword以及quadword這4種元素。shift操作實(shí)現(xiàn)了logic(邏輯)位移以及arithmetic(算術(shù))位數(shù),其意義與通用指令中的logic/arithmetic位移是一致的。

packed integer comparison操作:這類(lèi)比較指令分為unsigned(無(wú)符號(hào)數(shù))比較和singed(符號(hào)數(shù))比較,同樣操作在byte,word,doubleword以及quadword元素大小。

fraction extract指令:后一部分是提取浮點(diǎn)數(shù)中的小數(shù)(或者分?jǐn)?shù))部分,這是XOP指令中少量的浮點(diǎn)數(shù)處理指令。這些指令將提供單精度或雙精度浮點(diǎn)數(shù)的分?jǐn)?shù)部分,結(jié)果放入目標(biāo)寄存器相應(yīng)的元素大小部分。

AVX與XOP指令編碼設(shè)計(jì)方案對(duì)比

XOP指令與AVX指令采取了相同的編碼設(shè)計(jì)規(guī)則,在XOP指令中使用了3 bytes的XOP pref ix來(lái)定義XOP指令集,這個(gè)XOP prefix是8F字節(jié),AVX prefix采用了C4/C5作為AVX prefix,在AVX指令的定義中區(qū)分了AVX 128和AVX 256指令,分別處理128位和256 位數(shù)據(jù),這是通過(guò)VEX.L來(lái)實(shí)現(xiàn),XOP指令中同樣使用XOP.L來(lái)確定128位和256位數(shù)據(jù)的處理。接下來(lái),由于篇幅有限筆者只簡(jiǎn)要介紹一下它們的編碼設(shè)計(jì)方案,AVX與XOP指令編碼與通用指令結(jié)構(gòu)上是一致的,如下圖3所示:

這個(gè)Extended Prefix是AVX prefix或者XOP prefix,在AVX prefix中分為2 bytes與3 bytes,XOP prefix僅使用3 bytes,AVX/XOPprefix,opcode以及ModRM是必須提供,其它部分是可選的。Extended prefix部分是確定AVX指令還是XOP指令的關(guān)鍵。

圖3

圖3

SSE指令的特殊prefix

SSE系列指令將x86指令系統(tǒng)推上復(fù)雜化,它們常使用兩個(gè)特殊的pref ix作為opcode的一部分:

escape opcode(或稱(chēng)escape prefix),包括:0F,0F 38以及0F 3A

SIMD prefix,包括:66,F(xiàn)2以及F3

它們事實(shí)上會(huì)作為指令的opcode組成部分一起被提供在指令參考手冊(cè)上,已經(jīng)脫離了原本作為prefix的意義。

AVX prefix與XOP prefix結(jié)構(gòu)

從圖4中我們可以了解到AVX與XOP的組成部分:第1個(gè)字節(jié)是C4/8F(3bytes),C5(2 bytes)接下來(lái)的2個(gè)字節(jié)或1個(gè)字節(jié),組成部分為:

圖4

圖4

VEX.R,VEX.X,VEX.B;VEX.mmmmm;VEX.W;VEX.vvvvv;VEX.L;VEX.pp

大部分情況下,同一條AV X指令可以選擇實(shí)現(xiàn)2 bytes的版本或者3 bytes的版本,滿足指令中的escape opcode為0F或無(wú)需擴(kuò)展ModRM.r/m域,SIB.base以及SIB.base這兩種情況時(shí)3 bytes版本可以轉(zhuǎn)為2 bytes版本。主流的編譯器會(huì)優(yōu)先選擇生成2 bytes VEX prefix的AVX指令encode,以產(chǎn)生更短的指令序列。

AVX prefix與XOP prefix的集成功能

1、集成了REX prefix

VEX.RXB以及VEX.W是對(duì)通用指令中的REX prefix提供了對(duì)擴(kuò)展registers的訪問(wèn)功能,與REX prefix一樣,我們能夠?qū)U(kuò)展的新寄存器進(jìn)行訪問(wèn)。

2、集成了escape opcode

VEX.mmmmm域中集成了escape opcode,VEX.mmmmm使用5 bits來(lái)表達(dá),這樣使得它可以在未來(lái)的指令集中可以擴(kuò)展更多的escape opcode。

3、集成了SIMD prefix

VEX.pp集成了原有的SIMD prefix。由于VEX prefix對(duì)原SSE指令opcode部分的集成,使得AVX指令輕易地從SSE指令轉(zhuǎn)為AVX指令,除了新提供的AVX指令外,大部分AVX指令都有對(duì)應(yīng)的SSE版本。

XOP.mmmmm與VEX.mmmmm存在區(qū)別,XOP.mmmmm不集成escape opcode,它有兩個(gè)選項(xiàng)值,意
義是:XOP.mmmmm = 8時(shí),表示指令需要immediate操作數(shù)

XOP.mmmmm = 9時(shí),表示指令不需要immediate操作數(shù)

與此同時(shí),VEX.vvvv(XOP.vvvv)是提供源或目標(biāo)操作數(shù)的寄存器尋址,這個(gè)寄存器編碼與原有的寄存器編碼是相反的。

操作數(shù)的尋址

AVX指令和XOP指令都可以提供4個(gè)操作數(shù)的尋址,這4個(gè)操作數(shù)是: ModRM.regVEX.vvvv(或XOP.vvvv)ModRM.r/mimm8[7:4]

對(duì)于只有兩個(gè)操作數(shù)的指令來(lái)說(shuō),VEX.vvvv將不需要提供尋址,VEX.vvvv必須置為1111值,額外的第4個(gè)操作數(shù)(第3個(gè)源操作數(shù))有兩個(gè)情境:寄存器操作數(shù):由8位immediate操作數(shù)的高4位提供;立即數(shù)操作數(shù):這種情況下它提供的是immediate值,大多數(shù)表現(xiàn)為一些mask值。

展望

從編碼設(shè)計(jì)方式來(lái)看,Intel無(wú)疑再次獲得了行業(yè)的話語(yǔ)權(quán),統(tǒng)一了未來(lái)一段時(shí)間的指令設(shè)計(jì)方式。但從實(shí)際指令集來(lái)看,AMD重新定義了SSE5指令,根據(jù)AVX編碼方式擴(kuò)展出了XOP、FMA4等一系列更完善的指令集。在保證了兼容性的基礎(chǔ)上,強(qiáng)化了整數(shù)運(yùn)算效能。這也從側(cè)面印證了AMD要將異構(gòu)運(yùn)算進(jìn)行到底的未來(lái)規(guī)劃。畢竟Radeon系列GPU的浮點(diǎn)運(yùn)算能力十分出眾,對(duì)于未來(lái)的APU來(lái)說(shuō),x86核心更多的是負(fù)責(zé)整數(shù)運(yùn)算,加強(qiáng)指令集整數(shù)運(yùn)算的效能顯然符合AMD的預(yù)期。至于新一代處理器指令集的效能究竟幾何,還跟實(shí)際處理器的架構(gòu)和運(yùn)行程序的優(yōu)化程度有關(guān),究竟鹿死誰(shuí)手還讓我們拭目以待。

分享到:???????????

用戶評(píng)論

共有評(píng)論(5)

  • gcmcplive

    2011.08.09 09:04

    5樓

    專(zhuān)業(yè)性比較強(qiáng) 好文

    頂(0)?踩(0)?回復(fù)

  • aya

    2011.08.05 10:42

    4樓

    嗷。。。。

    頂(0)?踩(0)?回復(fù)

  • qwe222520

    2011.08.05 10:41

    3樓

    ..................................

    頂(1)?踩(0)?回復(fù)

    nikita

    2011.08.05 13:41

    的薩菲就了卡機(jī)了空間啊了飛機(jī)咔就分開(kāi)了沙拉醬了dsl激發(fā)了撒酒瘋了散粉來(lái)減少龍卷風(fēng)洛杉磯大發(fā)了散架啊了飛機(jī)了撒激發(fā)了

    aya

    2011.08.05 11:12

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~

    aya

    2011.08.05 11:12

    - - - - -。。。

  • qwe222520

    2011.08.05 10:41

    2樓

    ............................

    頂(0)?踩(1)?回復(fù)

  • qwe222520

    2011.08.05 10:40

    1樓

    .............

    頂(1)?踩(0)?回復(fù)


【轉(zhuǎn)】窺視靈魂深處 AMD新一代SIMD指令集剖析的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
孝昌县| 綦江县| 虞城县| 柘城县| 天水市| 丽水市| 开封县| 翁源县| 德化县| 琼结县| 竹北市| 兴和县| 赞皇县| 滨州市| 新竹市| 隆安县| 股票| 忻城县| 比如县| 蚌埠市| 巴青县| 尉犁县| 贵溪市| 罗城| 临邑县| 台湾省| 五常市| 神农架林区| 靖安县| 永州市| 射阳县| 深州市| 乐业县| 宁德市| 日土县| 柏乡县| 利川市| 嵊泗县| 西城区| 大兴区| 襄城县|