技術(shù)領(lǐng)域
本發(fā)明的各實(shí)施例一般涉及指令處理設(shè)備。更具體而言,本發(fā)明的各實(shí)施例涉及處理SHA-2安全散列算法的指令處理設(shè)備。
背景技術(shù):
SHA代表安全散列算法。它包括由國(guó)家安全局(NSA)設(shè)計(jì)且由國(guó)家標(biāo)準(zhǔn)和技術(shù)局(NIST)公布的五個(gè)散列函數(shù)。其中之一是SHA-2。SHA-2是一組安全散列函數(shù),包括由NSA開(kāi)發(fā)的SHA 224、SHA 256、SHA 384和SHA 512,旨在提供比SHA-1更高級(jí)別的安全性。SHA 224和SHA 256是基于32位字長(zhǎng)度的類似算法,產(chǎn)生224和256位的摘要(digest)。SHA 384和SHA 512基于64位字且產(chǎn)生384和512位的摘要。
SHA-2算法在計(jì)算上比SHA 1更復(fù)雜,依賴于進(jìn)位傳播加法(propagate addition)以及邏輯操作和循環(huán)移位(rotate)。用于一輪SHA-2操作的關(guān)鍵路徑包括四個(gè)連續(xù)的傳播加法,且加法器輸入由復(fù)雜邏輯和循環(huán)移位函數(shù)確定。圖1描述SHA-2算法的細(xì)節(jié)。A,B,C,D,E,F,G和H表示8個(gè)狀態(tài)字(對(duì)于SHA 224/256為32位,且對(duì)于SHA384/512為64位)。對(duì)于每次迭代執(zhí)行以下的操作:
對(duì)于SHA-512,按位的循環(huán)移位(bitwise rotation)使用不同的常數(shù)。在該示例中,給定的數(shù)用于SHA-256??稍谠撦嗞P(guān)鍵路徑之前執(zhí)行常數(shù)K加Wi消息輸入加法。SHA-2算法的消息調(diào)度函數(shù)也比SHA-1更復(fù)雜,依賴于先前的消息輸入的經(jīng)循環(huán)移位的復(fù)本以形成消息輸入:
對(duì)于i從16至63
s0:=(w[i-15]ROTR 7)XOR(w[i-15]ROTR 18)XOR(w[i-15]SHR 3)
s1:=(w[i-2]ROTR 17)XOR(w[i-2]ROTR 19)XOR(w[i-2]SHR 10)
w[i]:=w[i-16]+s0+w[i-7]+s1
其中ROTR(也用作“>>>”)指示按位的循環(huán)右移(right-rotate)操作符,SHR指示按位的向右移位(right-shift)操作符,且XOR指示按位的異或操作符。
對(duì)于SHA-256,如下地執(zhí)行每次迭代:
Σ0:=(a ROTR 2)XOR(a ROTR 13)XOR(a ROTR 22)
maj:=(a AND b)XOR(a AND c)XOR(b AND c)
t2:=Σ0+maj
Σ1:=(e ROTR 6)XOR(e ROTR 11)XOR(e ROTR 25)
ch:=(e AND f)XOR((NOT e)AND g)
t1:=h+Σ1+ch+k[i]+w[i]
h:=g
g:=f
f:=e
e:=d+t1
d:=c
c:=b
b:=a
a:=t1+t2
對(duì)于輪1至16,消息輸入w[i]是32位x16=512位數(shù)據(jù)塊。對(duì)于輪17至64的W[i]必須被導(dǎo)出。對(duì)于每一輪指定常數(shù)K,可在實(shí)際的輪迭代之前計(jì)算每輪的W[i]+K[i]值。可在Federal Information Processing Standard Publication(聯(lián)邦信息處理標(biāo)準(zhǔn)公布)出版的安全散列標(biāo)準(zhǔn)(FIPS PUB 180-3,2008年10月出版)中找到關(guān)于SHA-2規(guī)范的更詳細(xì)的信息。
使用標(biāo)準(zhǔn)指令的常規(guī)軟件方案需要單獨(dú)的指令用于實(shí)現(xiàn)諸如SHA256算法之類的SHA-2的輪和調(diào)度函數(shù)所需的每個(gè)加法和邏輯移位/循環(huán)移位指令。當(dāng)前的用于SHA256的行業(yè)基準(zhǔn)數(shù)據(jù)是每字節(jié)范圍15個(gè)循環(huán)。SHA256的標(biāo)準(zhǔn)之類實(shí)現(xiàn)的限制潛在地接近每字節(jié)范圍9個(gè)循環(huán)。缺少執(zhí)行以上操作的有效方式。
附圖說(shuō)明
本發(fā)明的各實(shí)施例是作為示例說(shuō)明的,而不僅限于各個(gè)附圖的圖形,在附圖中,類似的參考編號(hào)表示類似的元件。
圖1描述SHA-2算法的細(xì)節(jié)。
圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的處理器或處理器核心的執(zhí)行流水線的框圖。
圖3是示出根據(jù)一個(gè)實(shí)施例的SHA-2操作的框圖。
圖4是示出根據(jù)一個(gè)實(shí)施例的SHA-256輪操作的過(guò)程的框圖。
圖5是示出根據(jù)一個(gè)實(shí)施例執(zhí)行SHA-2輪操作的方法的流程圖。
圖6是示出根據(jù)一個(gè)實(shí)施例執(zhí)行SHA-2消息調(diào)度操作的方法的流程圖。
圖7是示出根據(jù)另一個(gè)實(shí)施例執(zhí)行SHA-2消息調(diào)度操作的方法的流程圖。
圖8A-8C是示出根據(jù)一個(gè)實(shí)施例的SHA-256輪操作的過(guò)程的偽代碼。
圖9A示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的示例性高級(jí)向量擴(kuò)展(AVX)指令格式。
圖9B示出根據(jù)本發(fā)明的另一個(gè)實(shí)施例的示例性高級(jí)向量擴(kuò)展(AVX)指令格式。
圖9C示出根據(jù)本發(fā)明的另一個(gè)實(shí)施例的示例性高級(jí)向量擴(kuò)展(AVX)指令格式。
圖10A是示出根據(jù)本發(fā)明的實(shí)施例的通用向量友好指令格式及其A類指令模板的方框圖。
圖10B是示出根據(jù)本發(fā)明的實(shí)施例的通用向量友好指令格式及其B類指令模板的方框圖。
圖11A是示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的示例性專用向量友好指令格式的框圖。
圖11B是示出根據(jù)本發(fā)明的另一個(gè)實(shí)施例的通用向量友好指令格式的框圖。
圖11C是示出根據(jù)本發(fā)明的另一個(gè)實(shí)施例的通用向量友好指令格式的框圖。
圖11D是示出根據(jù)本發(fā)明的另一個(gè)實(shí)施例的通用向量友好指令格式的框圖。
圖12是根據(jù)本發(fā)明的一個(gè)實(shí)施例的寄存器架構(gòu)的框圖。
圖13A是示出根據(jù)本發(fā)明的各實(shí)施例的示例性有序流水線和示例性的寄存器重命名的無(wú)序發(fā)布/執(zhí)行流水線的框圖。
圖13B是示出根據(jù)本發(fā)明的實(shí)施例的有序架構(gòu)核的示例性實(shí)施例以及包括在處理器中的示例性寄存器重命名的無(wú)序發(fā)布/執(zhí)行架構(gòu)核兩者的方框圖。
圖14A是根據(jù)本發(fā)明的一個(gè)實(shí)施例的處理器核的框圖。
圖14B是根據(jù)本發(fā)明的另一個(gè)實(shí)施例的處理器核的框圖。
圖15是根據(jù)本發(fā)明的實(shí)施例的處理器的框圖。
圖16是根據(jù)本發(fā)明一個(gè)實(shí)施例的系統(tǒng)的框圖。
圖17是根據(jù)本發(fā)明的實(shí)施例的更具體的示例性系統(tǒng)的框圖。
圖18是根據(jù)本發(fā)明的另一個(gè)實(shí)施例的更具體的示例性系統(tǒng)的框圖。
圖19是根據(jù)本發(fā)明的實(shí)施例的SoC的框圖。
圖20是根據(jù)本發(fā)明的實(shí)施例的對(duì)比使用軟件指令變換器將源指令集中的二進(jìn)制指令變換成目標(biāo)指令集中的二進(jìn)制指令的框圖。
各實(shí)施例的描述
下面將參考下面所討論的細(xì)節(jié)來(lái)描述本發(fā)明的各實(shí)施例并各方面,各個(gè)附圖將示出各實(shí)施例。下面的描述和圖形只是本發(fā)明的說(shuō)明,而不作為對(duì)本發(fā)明的限制。描述了很多具體細(xì)節(jié),以便全面地理解本發(fā)明的各實(shí)施例。然而,在某些實(shí)例中,沒(méi)有描述已知的或常規(guī)的細(xì)節(jié),以便提供對(duì)本發(fā)明的各實(shí)施例的簡(jiǎn)潔的討論。
在本說(shuō)明書中對(duì)“一個(gè)實(shí)施例”或“實(shí)施例”的引用意思指和該實(shí)施例一起描述的特定特征、結(jié)構(gòu)或特征可以被包括在本發(fā)明的至少一個(gè)實(shí)施例中。在本說(shuō)明書中的不同位置出現(xiàn)短語(yǔ)“在一個(gè)實(shí)施例中”不一定都是指同一個(gè)實(shí)施例。
根據(jù)一些實(shí)施例中,新指令集架構(gòu)(ISA)用于響應(yīng)于單個(gè)指令(例如,單指令多數(shù)據(jù)或SIMD指令)執(zhí)行一輪或多輪上述的SHA-2操作,以提高SHA-2計(jì)算的效率。常規(guī)的系統(tǒng)需要利用多個(gè)指令來(lái)執(zhí)行一輪SHA-2輪操作。通過(guò)減少SHA-2輪函數(shù)所需的時(shí)間同時(shí)以流水線方式導(dǎo)出后續(xù)輪的消息輸入來(lái)優(yōu)化性能,使得執(zhí)行SHA-2算法的速度主要受到輪計(jì)算的影響。在一個(gè)實(shí)施例中,為了執(zhí)行256位(例如,SHA-256)輪操作,具有至少256位的寄存器用于存儲(chǔ)SHA-2狀態(tài)變量(例如,狀態(tài)變量A,B,C,D,E,F,G和H)和多個(gè)消息輸入(例如,至少四個(gè)消息輸入),使得一輪或多輪SHA-2輪散列操作可由諸如支持向量的處理器之類的處理器響應(yīng)于單個(gè)指令并行地執(zhí)行。此外,具有至少128位的寄存器用于基于先前的消息輸入為下一循環(huán)或迭代(例如,接下來(lái)的一輪或多輪)準(zhǔn)備多個(gè)消息輸入。
圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的處理器或處理器核心的執(zhí)行流水線的框圖。參考圖2,處理器100可以表示任何類型的指令處理設(shè)備。例如,處理器100可以是通用處理器。處理器100可以是各種復(fù)雜指令集計(jì)算(CISC)處理器、各種精簡(jiǎn)指令集計(jì)算(RISC)處理器、各種超長(zhǎng)指令字(VLIW)處理器中的任何一種,其各種混合型,或完全其他類型的處理器。處理器100還可表示一個(gè)或多個(gè)處理器核。
處理器核可以用出于不同目的的不同方式在不同的處理器中實(shí)現(xiàn)。例如,這樣的核的實(shí)現(xiàn)可以包括:1)旨在用于通用計(jì)算的通用有序核;2)預(yù)期用于通用計(jì)算的高性能通用無(wú)序核;3)旨在主要用于圖形和/或科學(xué)(吞吐量)計(jì)算的專用核。不同處理器的實(shí)現(xiàn)可包括:包括預(yù)期用于通用計(jì)算的一個(gè)或多個(gè)通用有序核和/或預(yù)期用于通用計(jì)算的一個(gè)或多個(gè)通用無(wú)序核的中央處理器單元(CPU);以及2)包括主要預(yù)期用于圖形和/或科學(xué)(吞吐量)的一個(gè)或多個(gè)專用核的協(xié)處理器。這樣的不同處理器導(dǎo)致不同的計(jì)算機(jī)系統(tǒng)架構(gòu),其可包括:1)在與CPU分開(kāi)的芯片上的協(xié)處理器;2)在與CPU相同的封裝中但分開(kāi)的管芯上的協(xié)處理器;3)與CPU在相同管芯上的協(xié)處理器(在該情況下,這樣的協(xié)處理器有時(shí)被稱為諸如集成圖形和/或科學(xué)(吞吐量)邏輯等專用邏輯,或被稱為專用核);以及4)可以將所描述的CPU(有時(shí)被稱為應(yīng)用核或應(yīng)用處理器)、以上描述的協(xié)處理器和附加功能包括在同一管芯上的芯片上系統(tǒng)。接著描述示例性核架構(gòu),隨后描述示例性處理器和計(jì)算機(jī)架構(gòu)。
在一個(gè)實(shí)施例中,處理器100包括但不限于指令解碼器101和一個(gè)或多個(gè)執(zhí)行單元102。指令解碼器101用于接收和解碼來(lái)自指令獲取單元(未示出)的指令103。指令解碼器102可生成并輸出一個(gè)或多個(gè)微操作、微代碼、入口點(diǎn)、微指令、其他指令或其他控制信號(hào),它們反映或來(lái)源于指令。指令解碼器102可以使用各種不同的機(jī)制來(lái)實(shí)現(xiàn)。合適的機(jī)制的示例包括,但不僅限于,微代碼只讀存儲(chǔ)器(ROM)、查找表、硬件實(shí)現(xiàn)、可編程邏輯陣列(PLA)、等等。
執(zhí)行單元102可包括算術(shù)邏輯單元或能夠基于指令執(zhí)行操作的另一類型的邏輯單元。作為指令解碼器102解碼指令的結(jié)果,執(zhí)行單元102可以接收一個(gè)或多個(gè)微操作、微代碼入口點(diǎn)、微指令、其他指令或其他控制信號(hào),它們反映指令或來(lái)源于指令。執(zhí)行單元102可以作為指令指出一個(gè)或多個(gè)源操作數(shù)(SRC)的結(jié)果操作用于將結(jié)果存儲(chǔ)到由指令指出的寄存器集合的一個(gè)或多個(gè)目的地操作數(shù)(DEST)中。執(zhí)行單元102可以包括可操作以執(zhí)行指令或從指令導(dǎo)出的其他控制信號(hào)的電路或其他執(zhí)行邏輯(例如,與硬件和/或固件相結(jié)合的軟件),并相應(yīng)地執(zhí)行操作。執(zhí)行單元102可以表示諸如邏輯單元、算術(shù)邏輯單元(ALU)、算術(shù)單元、整數(shù)單元等等之類的任何類型的執(zhí)行單元。
源和目的地操作數(shù)中的某些或全部可以被存儲(chǔ)在寄存器集合或存儲(chǔ)器的寄存器中。寄存器集合可以是寄存器組的一部分,以及潛在地,諸如狀態(tài)寄存器、標(biāo)志寄存器等其他寄存器。寄存器可以是可以被用來(lái)存儲(chǔ)數(shù)據(jù)的存儲(chǔ)位置或設(shè)備。寄存器集合常??梢栽谖锢砩衔挥趲в袌?zhí)行單元的管芯中。寄存器可以從處理器的外部或從編程器的角度可見(jiàn)。例如,指令可以指定存儲(chǔ)在寄存器中的操作數(shù)。各種不同類型的寄存器都是合適的,只要它們能夠存儲(chǔ)和提供如此處所描述的數(shù)據(jù)。寄存器可以被重命名,也可以不被重命名。合適的寄存器的示例包括但不僅限于專用物理寄存器、使用寄存器重命名的動(dòng)態(tài)地分配的物理寄存器、專用和動(dòng)態(tài)地分配的物理寄存器的組合,等等??闪磉x地,源和目的地操作數(shù)中的一個(gè)或多個(gè)可以存儲(chǔ)在存儲(chǔ)位置,而不是寄存器中,諸如,例如,系統(tǒng)存儲(chǔ)器中的位置。
返回參見(jiàn)圖2,根據(jù)一個(gè)實(shí)施例中,執(zhí)行單元102包括一個(gè)或多個(gè)SHA-2單元106,用以響應(yīng)于由指令解碼器101接收并提供的第一指令,利用諸如SHA-2狀態(tài)A至H之類的數(shù)據(jù)110、消息輸入以及存儲(chǔ)在一個(gè)或多個(gè)寄存器104中的相應(yīng)常數(shù)Wt和Kt,執(zhí)行一輪或多輪SHA-2輪操作。響應(yīng)于作為單指令多數(shù)據(jù)(SIMD)指令的單個(gè)指令執(zhí)行一輪或多輪SHA-2輪操作。SHA-2輪操作的輪數(shù)取決于處理器流水線的特定設(shè)計(jì)或配置(例如流水線等待時(shí)間要求),該處理器流水線可被配置成優(yōu)化處理器流水線的總體性能的適當(dāng)?shù)臄?shù)量。出于說(shuō)明的目的,假設(shè)在單個(gè)SIMD循環(huán)中執(zhí)行兩輪SHA-2輪操作。將理解到,也可在單個(gè)SIMD循環(huán)中執(zhí)行更多或更少輪的SHA-2輪操作,只要諸如具有適當(dāng)尺寸的寄存器或存儲(chǔ)器之類的所需資源是可用的即可。
根據(jù)一個(gè)實(shí)施例,響應(yīng)于作為單指令多數(shù)據(jù)(SIMD)指令的單個(gè)指令執(zhí)行一輪或多輪SHA-2輪操作。在一個(gè)實(shí)施例中,第一指令包括兩個(gè)操作數(shù)。第一操作數(shù)表示源/目的地寄存器,用于存儲(chǔ)當(dāng)前的SHA-2狀態(tài)作為輸入以及下一SHA-2狀態(tài)作為一輪或多輪SHA-2輪操作的結(jié)果。第二操作數(shù)表示寄存器/存儲(chǔ)器,用于存儲(chǔ)用于輪操作的多個(gè)消息輸入和填補(bǔ)常數(shù)。在已經(jīng)執(zhí)行SHA-2輪操作之后,SHA-2狀態(tài)被更新并存儲(chǔ)回第一操作數(shù)指定的寄存器中。在一個(gè)實(shí)施例中,響應(yīng)于單個(gè)SIMD指令執(zhí)行一輪或多輪SHA-2輪操作,其中所涉及的寄存器具有至少256位,用以存儲(chǔ)用于SHA-256輪操作的SHA-2狀態(tài)變量和消息輸入(以及512位用于SHA-512輪操作)。
根據(jù)另一個(gè)實(shí)施例,響應(yīng)于第二指令,SHA-2單元106配置成執(zhí)行SHA-2消息調(diào)度操作以產(chǎn)生用于下一循環(huán)的多個(gè)消息輸入(例如,在下一SIMD指令循環(huán)中的一輪或多輪SHA-2輪操作)。在一個(gè)實(shí)施例中,取決于處理器流水線的特定設(shè)計(jì)或配置,可能需要兩個(gè)指令來(lái)準(zhǔn)備下一SIMD循環(huán)的消息輸入。在單個(gè)SIMD循環(huán)中支持至少兩輪SHA-2輪操作中,第一指令包括三個(gè)操作數(shù),用以存儲(chǔ)至少8個(gè)先前的消息輸入,并在執(zhí)行第一指令之后,生成中間結(jié)果并將其返回在操作數(shù)之一指定的寄存器中。第二指令獲取由第一指令生成的中間結(jié)果作為一個(gè)操作數(shù)中的輸入。第二指令的另一個(gè)操作數(shù)指定至少8個(gè)其它先前的消息輸入(例如組合的總共16個(gè)消息)。最終結(jié)果表示用于下一SIMD循環(huán)的4個(gè)消息輸入。在一個(gè)實(shí)施例中,在消息調(diào)度操作中涉及的寄存器具有至少128位。
根據(jù)一些實(shí)施例,本發(fā)明的實(shí)施例包括利用YMM SIMD寄存器的新指令和數(shù)據(jù)路徑,該寄存器具有256位且與來(lái)自加利福尼亞州圣克拉拉的英特爾公司的AVX處理器兼容,作為用于SHA-256狀態(tài)的256位的源/目的地操作數(shù)??蓪⑤^寬的寄存器(例如,512位或更寬的寄存器)用于執(zhí)行較寬位的SHA-2輪操作,諸如SHA-512輪操作。貫穿本申請(qǐng),出于說(shuō)明的目的描述SHA-2標(biāo)準(zhǔn)的SHA-256,然而,也適用于諸如SHA-2標(biāo)準(zhǔn)的SHA-512之類的其它操作。
根據(jù)一個(gè)實(shí)施例中,利用以3循環(huán)等待時(shí)間(例如,3個(gè)循環(huán)流水線)計(jì)算兩輪的新指令,可改進(jìn)SHA224/256操作。八個(gè)32位狀態(tài)變量A至H存儲(chǔ)在256位寄存器中,諸如英特爾AVX處理器的YMM寄存器。在單個(gè)SIMD循環(huán)中執(zhí)行至少兩輪SHA-256輪操作的新指令在本文中稱為SHA256RNDS2(例如,SHA-256 2輪)指令。SHA256RNDS2指令利用第一256位寄存器(例如,第一YMM寄存器)來(lái)包含狀態(tài)變量(例如,SHA-2狀態(tài)A到H)作為源/目的地寄存器,加上第二256位寄存器(例如,第二YMM寄存器),其包含兩個(gè)預(yù)先計(jì)算的消息輸入加輪常數(shù)值。為了導(dǎo)出消息輸入并在SHA-256輪迭代之前增加輪常數(shù),根據(jù)一個(gè)實(shí)施例,兩個(gè)消息調(diào)度指令(在本文中稱為MSG1SHA256和MSG2SHA256指令)被實(shí)現(xiàn)以加速?gòu)?fù)雜調(diào)度函數(shù),該函數(shù)包括循環(huán)移位(rotate)、移位(shift)、XOR和三個(gè)32位進(jìn)位傳播加法。
在一個(gè)實(shí)施例中,SHA256RNDS2指令需要3個(gè)循環(huán)以讀取來(lái)自YMM寄存器的狀態(tài)和K消息輸入,以執(zhí)行2輪SHA-256,并將更新的狀態(tài)寫回源/目的地YMM寄存器。在2輪SHA 256的3循環(huán)等待時(shí)間下,吞吐率是每循環(huán)2/3輪,或每512位塊96循環(huán),需要64輪處理。從被散列化的64字節(jié)數(shù)據(jù)塊的4字節(jié)分區(qū)提供用于輪1至16的消息輸入w[i]。利用復(fù)雜消息調(diào)度器,從輸入數(shù)據(jù)的64字節(jié)/16字導(dǎo)出用于輪17至64的w[i],對(duì)于每輪,每個(gè)消息字需要4次循環(huán)移位、2次移位、4次XOR和4次進(jìn)位傳播加法??扇缦露x操作:
對(duì)于i從16至63
w[i]:=w[i-16]+s0(w[i-15])+w[i-7]+s1(w[i-2])
其中函數(shù)s0可被定義為:
s0(x)=(x ROTR 7)XOR(x ROTR 18)XOR(x SHR 3)
并且其中函數(shù)s1可被定義為:
s1(x)=(x ROTR 17)XOR(x ROTR 19)XOR(x SHR 10)
在一個(gè)實(shí)施例中,SHA256RNDS2指令的格式可被如下定義:
SHA256RNDS2,YMM1,YMM2/m256
其中YMM1是源/目的地寄存器,用于存儲(chǔ)SHA-256狀態(tài)變量A,B,C,D,E,F,G和H。在2輪SHA256迭代之后,SHA256RNDS2指令用所得的新?tīng)顟B(tài)更新目的地YMM1寄存器。YMM2是具有2個(gè)新消息輸入和預(yù)先相加的輪常數(shù)的源寄存器。用于輪0的輸入kw0被存儲(chǔ)在寄存器YMM2[31:00]中,且用于輪1的輸入kw1被存儲(chǔ)在寄存器YMM2[63:32]中,如圖3所示。注意參考圖3,在該示例中,SHA-2單元106對(duì)SHA-2狀態(tài)301和存儲(chǔ)在寄存器302中的KW之一計(jì)算兩輪SHA-256輪操作,其生成下一SHA-2狀態(tài)303。下一SHA-2狀態(tài)303可被存儲(chǔ)回源/目的地寄存器301。在該示例中,因?yàn)榫哂兄辽?28位的寄存器302可存儲(chǔ)更多的KW,所以也可執(zhí)行另外的輪的SHA-2輪操作。類似地,如果寄存器302具有256位或512位,則可執(zhí)行更多的輪,只要可滿足流水線等待時(shí)間即可。
在一個(gè)實(shí)施例中,可如下地定義YMM1寄存器:
A=Y(jié)MM[255:224]
B=Y(jié)MM[223:192]
C=Y(jié)MM[191:160]
D=Y(jié)MM[159:128]
E=Y(jié)MM[127:96]
F=Y(jié)MM[95:64]
G=Y(jié)MM[63:32]
H=Y(jié)MM[31:00]
其中狀態(tài)變量A,B,C,D,E,F,G和H(對(duì)于輪n)←狀態(tài)變量A,B,C,D,E,F,G和H(對(duì)于輪n-2)對(duì)于2個(gè)SHA-256輪步進(jìn)。
為了跟上SHA256RNDS2指令,根據(jù)一個(gè)實(shí)施例,提供執(zhí)行SHA-256消息調(diào)度的兩個(gè)專用指令,在本文中稱為指令MSG1SHA256和MSG2SHA256。在一個(gè)實(shí)施例中,對(duì)于SHA-256輪操作的當(dāng)前輪i,指令MSG1SHA256基于先前計(jì)算的消息計(jì)算中間消息,如下:
Word0=s0(w[i-15])+w[i-16]
Word1=s0(w[i-14])+w[i-15]
Word2=s0(w[i-13])+w[i-14]
Word3=s0(w[i-12])+w[i-13]
在一個(gè)實(shí)施例中,對(duì)于SHA-256輪操作的當(dāng)前輪i,指令MSG2SHA256基于先前計(jì)算的消息和由指令MSG2SHA256產(chǎn)生的中間消息計(jì)算用于下一迭代的四個(gè)消息,如下:
w[i]=Word0Msg1+s1(w[i-2])+w[i-7]
w[i+1]=Word1Msg1+s1(w[i-1])+w[i-6]
w[i+2]=Word2Msg1+s1(w[i])+w[i-5]
w[i+3]=Word3Msg1+s1(w[i+1])+w[i-4]
其中例如在另一個(gè)流水線級(jí)中Word0Msg1,Word1Msg1,Word2Msg1和Word3Msg1由指令MSG1SHA256產(chǎn)生(例如,對(duì)應(yīng)于以上的Word0,Word1,Word2和Word 3)。
注意,w[i+2]和w[i+3]是基于w[i]和w[i+1]由指令MSG2SHA256計(jì)算的。因此,在w[i]和w[i+1]的計(jì)算完成之前計(jì)算w[i+2]和w[i+3]。如果這導(dǎo)致計(jì)算w[i+2]和w[i+3]所需的總時(shí)間超過(guò)為單個(gè)SIMD指令流水線分配的時(shí)間,則MSG2SHA256指令可被分成兩個(gè)單獨(dú)的指令,即,MSG2ASHA256和MSG2BSHA256。MSG2ASHA256將計(jì)算w[i]和w[i+1],而MSG2BSHA256將計(jì)算w[i+2]和w[i+3]。
在一個(gè)實(shí)施例中,指令MSG1SHA256可定義如下:
MSG1SHA256 XMM0,XMM1,XMM2
其中寄存器XMM0,XMM1和XMM2表示具有至少128位的寄存器,諸如可從因特爾AVX處理器族獲得的那些XMM寄存器。指令MSG1SHA256執(zhí)行接下來(lái)的四個(gè)SHA256消息輸入的中間計(jì)算。SHA-256調(diào)度消息輸入w用于輪16至63,如下:
w[i]:=w[i-16]+s0(w[i-15])+w[i-7]+s1(w[i-2])
在一個(gè)實(shí)施例中,輸入XMM2表示消息w(i-13),w(i-14),w(i-15)和w(i-16)。XMM2的格式的實(shí)施例可如下定義:
XMM2[127:96]=w(i-13)
XMM2[95:64]=w(i-14)
XMM2[63:32]=w(i-15)
XMM2[31:00]=w(i-16)
輸入XMM1表示消息w(i-9),w(i-10),w(i-11)和w(i-12)。XMM2的格式的實(shí)施例可如下定義:
XMM1[127:96]=w(i-9)
XMM1[95:64]=w(i-10)
XMM1[63:32]=w(i-11)
XMM1[31:00]=w(i-12)
輸出XMM0表示w(i-13)+s0(w(i-12)),w(i-14)+s0(w(i-13)),w(i-15)+s0(w(i-14))和w(i-16)+s0(w(i-15))。XMM0的格式的實(shí)施例可如下定義:
XMM0[127:96]=w(i-13)+s0(w[i-12])
XMM0[95:64]=w(i-14)+s0(w[i-13])
XMM0[63:32]=w(i-15)+s0(w[i-14])
XMM0[31:00]=w(i-16)+s0(w[i-15])
其中XMM0[127:96]表示用于確定w(i+3)的Msg1(i-13);XMM0[95:64]表示用于確定w(i+2)的Msg1(i-14);XMM0[63:32]表示用于確定w(i+1)的Msg1(i-15);以及XMM0[31:00]表示用于確定w(i)的Msg1(i-16)。
在一個(gè)實(shí)施例中,指令MSG2SHA256可定義如下:
MSG2SHA256XMM0,XMM1,XMM2
其中寄存器XMM0,XMM1和XMM2表示具有至少128位的寄存器,諸如可從因特爾AVX處理器族獲得的那些XMM寄存器。指令MSG2SHA256利用先前計(jì)算的MSG1SHA256指令的包含用于w(i-13)至w(i-16)的msg1值的XMM結(jié)果寄存器、保存消息輸入w(i-5)至w(i-8)的XMM寄存器和保存消息輸入w(i-1)至w(-4)的XMM寄存器來(lái)執(zhí)行用于接下來(lái)的四個(gè)SHA-256消息輸入的計(jì)算。
在一個(gè)實(shí)施例中,SHA-256調(diào)度消息輸入w用于輪16至63,如下:
w[i]:=w[i-16]+s0(w[i-15])+w[i-7]+s1(w[i-2])
w[i+1]:=msg1[i-15]+w[i-6]+s1(w(i-1))
其中中間結(jié)果msg[i-15]由指令MSG1SHA256例如在另一個(gè)流水線級(jí)中產(chǎn)生。消息w(i)和w(i+1)用于完成w(i+2)和w(i+3)的計(jì)算,例如具有其間的延遲,如下:
w[i+3]:=msg1[i-13]+w[i-4]+s1(w(i+1))
w[i+2]:=msg1[i-14]+w[i-5]+s1(w(i))
其中中間結(jié)果msg[i-13]和msg[i-14]由指令MSG1SHA256例如在另一個(gè)流水線級(jí)中產(chǎn)生。
在一個(gè)實(shí)施例中,指令MSG2SHA256的輸入包括三個(gè)具有至少128位的寄存器,諸如因特爾AVX處理器族的XMM寄存器。在一個(gè)實(shí)施例中,對(duì)于SHA-256輪操作的當(dāng)前輪i,輸入XMM2表示消息w(i-5),w(i-6),w(i-7)和w(i-8),如下:
XMM2[127:96]=w(i-5)
XMM2[95:64]=w(i-6)
XMM2[63:32]=w(i-7)
XMM2[31:00]=w(i-8)
在一個(gè)實(shí)施例中,對(duì)于SHA-256輪操作的當(dāng)前輪i,輸入XMM1表示消息w(i-1),w(i-2),w(i-3)和w(i-4),如下:
XMM1[127:96]=w(i-1)
XMM1[95:64]=w(i-2)
XMM1[63:32]=w(i-3)
XMM1[31:00]=w(i-4)
在一個(gè)實(shí)施例中,對(duì)于SHA-256輪操作的當(dāng)前輪i,輸入XMM0表示由MSG1SHA256指令產(chǎn)生的中間消息Msg1(i-13),Msg1(i-14),Msg1(i-15)和Msg1(i-16),如下:
XMM0[127:96]=w(i-13)AND s0(wi-12)
XMM0[95:64]=w(i-14)AND s0(wi-13)
XMM0[63:32]=w(i-15)AND s0(wi-14)
XMM0[31:00]=w(i-16)AND s0(wi-15)
在一個(gè)實(shí)施例中,對(duì)于SHA-256輪操作的當(dāng)前輪i,輸出XMM0表示消息w(i+3),w(i+2),w(i+1)和w(i),如下:
XMM0[127:96]=w(i+3)
XMM0[95:64]=w(i+2)
XMM0[63:32]=w(i+1)
XMM0[31:00]=w(i)
圖4是示出根據(jù)一個(gè)實(shí)施例的SHA-256輪操作的過(guò)程的框圖。參見(jiàn)圖4,利用處理器或處理器核的至少三個(gè)流水線級(jí)401-403定義過(guò)程的實(shí)施例。注意流水線級(jí)401-403可以或可以不是連續(xù)的流水線級(jí),這取決于處理器的特定設(shè)計(jì)或配置??蓪SG1SHA256微代碼404,MSG2SHA256微代碼405和SHA256RNDS2微代碼406實(shí)現(xiàn)為圖1的SHA-2單元106的一部分。
根據(jù)一個(gè)實(shí)施例,響應(yīng)于指令MSG1SHA256,MSG1SHA256微代碼404執(zhí)行如上所述的SHA-256消息調(diào)度操作的第一部分。對(duì)于SHA-256輪操作的給定輪i,在流水線級(jí)401期間,MSG1SHA256微代碼404對(duì)先前生成的消息407-408執(zhí)行消息調(diào)度操作的第一部分并生成中間消息409。
根據(jù)一個(gè)實(shí)施例,響應(yīng)于指令MSG2SHA256,MSG2SHA256微代碼405執(zhí)行如上所述的SHA-256消息調(diào)度操作的第二部分。對(duì)于SHA-256輪操作的給定輪i,在流水線級(jí)402期間,MSG2SHA256微代碼405對(duì)先前生成的消息410-411和中間消息409執(zhí)行消息調(diào)度操作的第二部分并生成中間消息412。
根據(jù)一個(gè)實(shí)施例,響應(yīng)于指令SHA256RNDS2,SHA256RNDS2微代碼406執(zhí)行一輪如上所述的SHA-256輪操作。對(duì)于SHA-256輪操作的給定輪i,在流水線級(jí)403期間,SHA256RNDS2微代碼406對(duì)消息412和當(dāng)前的SHA-256狀態(tài)413執(zhí)行輪操作執(zhí)行,并生成用于下一輪或迭代的SHA-256狀態(tài)414。注意在該示例中,存儲(chǔ)在寄存器412中的w(i+3),w(i+2),w(i+1)和w(i)中的每一個(gè)具有32位。它可用于執(zhí)行至少兩輪SHA-256輪操作。如果寄存器412可存儲(chǔ)更多的消息輸入,則也可執(zhí)行更多輪的SHA-256輪操作,只要能滿足流水線等待時(shí)間要求即可。
圖5是示出根據(jù)一個(gè)實(shí)施例執(zhí)行SHA-2輪操作的方法的流程圖。方法500可以通過(guò)圖1的SHA-2單元106來(lái)執(zhí)行。參考圖5,在框501,接收指令(例如,SHA256RNDS2),其中該指令包括第一操作數(shù)(例如,YMM1)和第二操作數(shù)(例如,YMM2)。在框502,從第一操作數(shù)提取SHA-2狀態(tài)(例如,狀態(tài)A至H),并且從第二操作數(shù)提取至少一個(gè)消息輸入(例如,至少一個(gè)KW)。在框503,根據(jù)SHA-2規(guī)范對(duì)SHA-2狀態(tài)和消息輸入執(zhí)行SHA-2(例如,SHA-256輪)輪操作的至少一輪。在框504,在第一操作數(shù)指定的寄存器中基于SHA-2輪操作的至少一輪的結(jié)果更新SHA-2狀態(tài)。
圖6是示出根據(jù)一個(gè)實(shí)施例執(zhí)行SHA-2消息調(diào)度操作的方法的流程圖。方法600可由圖1的SHA-2單元106執(zhí)行,作為SHA-2消息調(diào)度操作的第一部分。參考圖6,在框601,接收指令(例如,MSG1SHA256),其中指令包括三個(gè)操作數(shù)(例如,XMM0,XMM1,XMM2),每個(gè)操作數(shù)標(biāo)識(shí)具有至少128位的寄存器。在框602,從第二和第三操作數(shù)(例如,XMM1和XMM2)提取多個(gè)消息輸入(例如,8個(gè)輸入)。在框603,基于消息輸入執(zhí)行SHA-2消息調(diào)度操作的第一部分。在框604生成中間結(jié)果并將其存儲(chǔ)在與第一操作數(shù)(例如XMM0)相關(guān)聯(lián)的寄存器中。
圖7是示出根據(jù)一個(gè)實(shí)施例執(zhí)行SHA-2消息調(diào)度操作的方法的流程圖。方法700可由圖1的SHA-2單元106執(zhí)行,作為消息調(diào)度操作的第二部分。參考圖7,在框701,接收指令(例如,MSG2SHA256),其中指令包括三個(gè)操作數(shù)(例如,XMM0,XMM1,XMM2),每個(gè)操作數(shù)標(biāo)識(shí)具有至少128位的寄存器。在框702,從第一操作數(shù)(例如,XMM0)獲取SHA-2調(diào)度操作的第一部分的中間結(jié)果,且從第二和第三操作數(shù)(例如,XMM1和XMM2)獲取多個(gè)消息輸入。在框703,基于中間結(jié)果和消息輸入執(zhí)行SHA-2消息調(diào)度操作的第二部分。在框704,生成SHA-2消息調(diào)度操作的最終結(jié)果并將其存儲(chǔ)在與第一操作數(shù)(例如,XMM0)相關(guān)聯(lián)的寄存器中。
圖8A-8C是示出根據(jù)一個(gè)實(shí)施例的SHA-256輪操作的過(guò)程的偽代碼。參考圖8A-8C,在該示例中,具有256位的YMM寄存器用于存儲(chǔ)消息輸入,其中每個(gè)消息輸入包括32位。YMM寄存器可實(shí)際存儲(chǔ)至少四個(gè)(高達(dá)八個(gè))消息輸入,其中每個(gè)消息輸入具有32位。結(jié)果,對(duì)于每次迭代,可經(jīng)由指令SHA256RNDS2中的兩個(gè)執(zhí)行至少四輪SHA-256,如在圖8A的行801和802所示。注意XMM寄存器用于并行計(jì)算四個(gè)消息項(xiàng)。如果YMM寄存器用于一次4項(xiàng),則不使用較高的128位。對(duì)于計(jì)算8個(gè)消息項(xiàng),具有YMM寄存器的MSG1工作良好,但可將MSG2分成2或4個(gè)指令。如上所述,可在每次迭代中執(zhí)行更多或更少的輪,這取決于處理器或處理器核的特定配置。
本發(fā)明的實(shí)施例的示例包括處理器,其具有指令解碼器,用于接收第一指令以處理安全散列算法2(SHA-2)散列算法,所述第一指令具有用于存儲(chǔ)SHA-2狀態(tài)的第一操作數(shù)以及用于存儲(chǔ)多個(gè)消息和輪常數(shù)的第二操作數(shù);以及耦合到指令解碼器的執(zhí)行單元,用于響應(yīng)于第一指令對(duì)所述第一操作數(shù)指定的SHA-2狀態(tài)和所述第二操作數(shù)指定的多個(gè)消息和輪常數(shù)執(zhí)行一輪或多輪SHA-2散列算法。第一操作數(shù)指定具有至少256位或512位的第一寄存器以存儲(chǔ)用于分別執(zhí)行SHA-256輪操作或SHA-512輪操作的SHA-2狀態(tài)變量的數(shù)據(jù)。第二操作數(shù)指定具有至少64位或128位的第二寄存器或存儲(chǔ)器位置,以分別存儲(chǔ)用于SHA-256輪操作或SHA-512輪操作的至少兩個(gè)消息和輪常數(shù)。響應(yīng)于作為單指令多數(shù)據(jù)(SIMD)指令的第一指令,執(zhí)行SHA-2算法的至少兩輪。指令解碼器接收第二指令,且其中響應(yīng)于第二指令,執(zhí)行單元被配置成基于由第二指令指定的多個(gè)第一先前消息執(zhí)行消息調(diào)度操作的第一部分并生成中間結(jié)果。第二指令包括第三操作數(shù)、第四操作數(shù)和第五操作數(shù)。對(duì)于SHA-2輪操作的當(dāng)前輪i,第三操作數(shù)指定用于存儲(chǔ)消息w(i-13)、w(i-14)、w(i-15)和w(i-16)的寄存器。第四操作數(shù)指定用于存儲(chǔ)消息w(i-9)、w(i-10)、w(i-11)和w(i-12)的寄存器。中間結(jié)果被存儲(chǔ)在由第五操作數(shù)指定的寄存器中。中間結(jié)果包括w(i-3)+s0(w(i-12))、w(i-14)+s0(w(i-13))、w(i-15)+s0(w(i-14))、w(i-16)+s0(w(i-15)),其中函數(shù)s0(x)由s0(x)=(x ROTR 7)XOR(x ROTR 18)XOR(x ROTR 3)表示。指令解碼器接收第三指令,其中響應(yīng)于第三指令,所述執(zhí)行單元配置成對(duì)第三指令中指定的中間結(jié)果和第二先前消息執(zhí)行消息調(diào)度操作的第二部分并生成接下來(lái)的輸入消息,用于在SHA-2算法的一輪或多輪的接下來(lái)的迭代期間執(zhí)行SHA-2算法的一輪或多輪操作。第三指令包括第六操作數(shù)、第七操作數(shù)和第八操作數(shù),其中對(duì)于SHA-2輪操作的當(dāng)前輪i,第六操作數(shù)指定用于存儲(chǔ)消息w(i-5)、w(i-6)、w(i-7)和w(i-8)的寄存器。第七操作數(shù)指定用于存儲(chǔ)消息w(i-1)、w(i-2)、w(i-3)和w(i-4)的寄存器。接下來(lái)的輸入消息包括將要存儲(chǔ)在由第八操作數(shù)指定的寄存器中的w(i)、w(i+1)、w(i+2)和w(i+3)。
本發(fā)明的實(shí)施例的示例包括一種方法,包括:在指令解碼器處接收第一指令以處理安全散列算法2(SHA-2)散列算法,所述第一指令具有用于存儲(chǔ)SHA-2狀態(tài)的第一操作數(shù)以及用于存儲(chǔ)多個(gè)消息和輪常數(shù)的第二操作數(shù);以及響應(yīng)于第一指令,由耦合到指令解碼器的執(zhí)行單元對(duì)第一操作數(shù)指定的SHA-2狀態(tài)和第二操作數(shù)指定的多個(gè)消息和輪常數(shù)執(zhí)行一輪或多輪SHA-2散列算法。第一操作數(shù)指定具有至少256位或512位的第一寄存器以存儲(chǔ)用于分別執(zhí)行SHA-256輪操作或SHA-512輪操作的SHA-2狀態(tài)變量的數(shù)據(jù)。第二操作數(shù)指定具有至少64位或128位的第二寄存器或存儲(chǔ)器位置,以分別存儲(chǔ)用于SHA-256輪操作或SHA-512輪操作的至少兩個(gè)消息和輪常數(shù)。響應(yīng)于作為單指令多數(shù)據(jù)(SIMD)指令的第一指令,執(zhí)行SHA-2算法的至少兩輪。該方法還包括由指令解碼器接收第二指令,第二指令具有第三操作數(shù)、第四操作數(shù)和第五操作數(shù);響應(yīng)于第二指令,執(zhí)行單元基于由第二指令指定的多個(gè)第一先前消息執(zhí)行消息調(diào)度操作的第一部分;并生成中間結(jié)果。對(duì)于SHA-2輪操作的當(dāng)前輪i,第三操作數(shù)指定用于存儲(chǔ)消息w(i-13)、w(i-14)、w(i-15)和w(i-16)的寄存器,其中第四操作數(shù)指定用于存儲(chǔ)消息w(i-9)、w(i-10)、w(i-11)和w(i-12)的寄存器,且其中中間結(jié)果被存儲(chǔ)在由第五操作數(shù)指定的寄存器中。中間結(jié)果包括w(i-3)+s0(w(i-12))、w(i-14)+s0(w(i-13))、w(i-15)+s0(w(i-14))、w(i-16)+s0(w(i-15)),其中函數(shù)s0(x)由s0(x)=(x ROTR 7)XOR(x ROTR 18)XOR(x ROTR 3)表示。該方法還包括指令解碼器接收第三指令,該第三指令具有第六操作數(shù)、第七操作數(shù)和第八操作數(shù);響應(yīng)于第三指令,通過(guò)執(zhí)行來(lái)對(duì)第三指令中指定的中間結(jié)果和第二先前消息執(zhí)行消息調(diào)度操作的第二部分;并生成接下來(lái)的輸入消息,用于在SHA-2算法的一輪或多輪的接下來(lái)的迭代期間執(zhí)行SHA-2算法的一輪或多輪操作。對(duì)于SHA-2輪操作的當(dāng)前輪i,第六操作數(shù)指定用于存儲(chǔ)消息w(i-5)、w(i-6)、w(i-7)和w(i-8)的寄存器,其中第七操作數(shù)指定用于存儲(chǔ)消息w(i-1)、w(i-2)、w(i-3)和w(i-4)的寄存器,且其中接下來(lái)的輸入消息包括將要存儲(chǔ)在由第八操作數(shù)指定的寄存器中的w(i)、w(i+1)、w(i+2)和w(i+3)。本發(fā)明的實(shí)施例的示例還包括數(shù)據(jù)處理系統(tǒng),具有,互連;耦合互連的處理器,用于執(zhí)行上述方法;以及耦合到互連的動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)。
指令集,或指令集架構(gòu)(ISA)是涉及編程的計(jì)算機(jī)架構(gòu)的一部分,并可以包括原生數(shù)據(jù)類型、指令、寄存器架構(gòu)、尋址模式、存儲(chǔ)器架構(gòu)、中斷和異常處理、以及外部輸入和輸出(I/O)。在本文中術(shù)語(yǔ)指令一般指宏指令——即被提供給處理器(或指令轉(zhuǎn)換器,該指令轉(zhuǎn)換器(例如使用靜態(tài)二進(jìn)制變換、包括動(dòng)態(tài)編譯的動(dòng)態(tài)二進(jìn)制變換)變換、變形、仿真、或以其他方式將指令轉(zhuǎn)換成要由處理器處理的一個(gè)或多個(gè)指令)以用于執(zhí)行的指令——而不是微指令或微操作(micro-op)——它們是處理器的解碼器解碼宏指令的結(jié)果。
ISA與微架構(gòu)不同,微架構(gòu)是實(shí)現(xiàn)指令集的處理器的內(nèi)部設(shè)計(jì)。帶有不同的微架構(gòu)的處理器可以共享共同的指令集。例如,奔騰四(Pentium 4)處理器、酷睿(CoreTM)處理器、以及來(lái)自加利福尼亞州桑尼威爾(Sunnyvale)的超微半導(dǎo)體有限公司(Advanced Micro Devices,Inc.)的諸多處理器執(zhí)行幾乎相同版本的x86指令集(在更新的版本中加入了一些擴(kuò)展),但具有不同的內(nèi)部設(shè)計(jì)。例如,ISA的相同寄存器架構(gòu)在不同的微架構(gòu)中使用公知的技術(shù)以不同方法來(lái)實(shí)現(xiàn),公知的技術(shù)包括專用物理寄存器、使用寄存器重命名機(jī)制(例如,使用寄存器別名表(RAT)、重排序緩沖器(ROB)、以及引退寄存器組;使用多個(gè)寄存器映射和寄存器池)的一個(gè)或多個(gè)動(dòng)態(tài)分配物理寄存器,等等。除非另行指出,術(shù)語(yǔ)寄存器架構(gòu)、寄存器組和寄存器在本文中用于指代對(duì)軟件/編程者可見(jiàn)的寄存器以及指令指定寄存器的方式。在需要特殊性的情況下,形容詞邏輯、架構(gòu)、或軟件可見(jiàn)的將用于表示寄存器架構(gòu)中的寄存器/寄存器組,而不同的形容詞將用于指定給定微架構(gòu)中的寄存器(例如,物理寄存器、重新排序緩沖器、引退寄存器、寄存器池)。
指令集包括一個(gè)或多個(gè)指令格式。給定指令格式定義各個(gè)字段(位的數(shù)量、位的位置)以指定要執(zhí)行的操作(操作碼)以及要對(duì)其執(zhí)行該操作的操作碼等。通過(guò)指令模板(或子格式)的定義來(lái)進(jìn)一步分解一些指令格式。例如,給定指令格式的指令模板可被定義為具有指令格式的字段(所包括的字段通常按照相同順序,但是至少一些字段具有不同的位位置,因?yàn)榘ǜ俚淖侄?的不同子集,和/或被定義為具有不同解釋的給定字段。由此,ISA的每一指令使用給定指令格式(并且如果定義,則在該指令格式的指令模板的給定一個(gè)中)來(lái)表達(dá),并且包括用于指定操作和操作數(shù)的字段。例如,示例性ADD指令具有專用操作碼以及包括用于指定該操作碼的操作碼字段和用于選擇操作數(shù)的操作數(shù)字段(源1/目的地以及源2)的指令格式,并且該ADD指令在指令流中的出現(xiàn)將具有選擇專用操作數(shù)的操作數(shù)字段中的專用內(nèi)容。
科學(xué)、金融、自動(dòng)向量化的通用、RMS(識(shí)別、挖掘以及合成)以及可視和多媒體應(yīng)用程序(例如,2D/3D圖形、圖像處理、視頻壓縮/解壓縮、語(yǔ)音識(shí)別算法和音頻操縱)常常需要對(duì)大量的數(shù)據(jù)項(xiàng)執(zhí)行相同操作(被稱為“數(shù)據(jù)并行性”)。單指令多數(shù)據(jù)(SIMD)是指使處理器對(duì)多個(gè)數(shù)據(jù)項(xiàng)執(zhí)行操作的一種指令。SIMD技術(shù)特別適于能夠在邏輯上將寄存器中的位分割為若干個(gè)固定尺寸的數(shù)據(jù)元素的處理器,其中每一個(gè)數(shù)據(jù)元素都表示單獨(dú)的值。例如,256位寄存器中的位可以作為四個(gè)單獨(dú)的64位打包的數(shù)據(jù)元素(四字(Q)尺寸的數(shù)據(jù)元素)、八個(gè)單獨(dú)的32位打包的數(shù)據(jù)元素(雙字(D)尺寸的數(shù)據(jù)元素)、十六單獨(dú)的16位打包的數(shù)據(jù)元素(字(W)尺寸的數(shù)據(jù)元素)、或三十二個(gè)單獨(dú)的8位數(shù)據(jù)元素(字節(jié)(B)尺寸的數(shù)據(jù)元素),被指定為要被操作的源操作數(shù)。這種類型的數(shù)據(jù)被稱為打包數(shù)據(jù)類型或向量數(shù)據(jù)類型,這種數(shù)據(jù)類型的操作數(shù)被稱為打包數(shù)據(jù)操作數(shù)或向量操作數(shù)。換句話說(shuō),打包數(shù)據(jù)項(xiàng)或向量指的是打包數(shù)據(jù)元素的序列,并且打包數(shù)據(jù)操作數(shù)或向量操作數(shù)是SIMD指令(也稱為打包數(shù)據(jù)指令或向量指令)的源操作數(shù)或目的地操作數(shù)。
作為示例,一種類型的SIMD指令指定要以縱向方式對(duì)兩個(gè)源向量操作數(shù)執(zhí)行的單個(gè)向量操作,以生成相同尺寸的、具有相同數(shù)量的數(shù)據(jù)元素、且有相同數(shù)據(jù)元素順序的目的地向量操作數(shù)(也稱為結(jié)果向量操作數(shù))。源向量操作數(shù)中的數(shù)據(jù)元素被稱為源數(shù)據(jù)元素,而目的地向量操作數(shù)中的數(shù)據(jù)元素被稱為目的地或結(jié)果數(shù)據(jù)元素。這些源向量操作數(shù)具有相同尺寸,并包含相同寬度的數(shù)據(jù)元素,因此它們包含相同數(shù)量的數(shù)據(jù)元素。兩個(gè)源向量操作數(shù)中的相同位位置中的源數(shù)據(jù)元素形成數(shù)據(jù)元素對(duì)(也稱為相對(duì)應(yīng)的數(shù)據(jù)元素;即,每個(gè)源操作數(shù)的數(shù)據(jù)元素位置0中的數(shù)據(jù)元素相對(duì)應(yīng),每個(gè)源操作數(shù)的數(shù)據(jù)元素位置1中的數(shù)據(jù)元素相對(duì)應(yīng),以此類推)。分別地對(duì)這些源數(shù)據(jù)元素對(duì)中的每一對(duì)執(zhí)行由該SIMD指令所指定的操作,以生成匹配數(shù)量的結(jié)果數(shù)據(jù)元素,如此,每一對(duì)源數(shù)據(jù)元素都具有對(duì)應(yīng)的結(jié)果數(shù)據(jù)元素。由于操作是縱向的,并且由于結(jié)果向量操作數(shù)尺寸相同、具有相同數(shù)量的數(shù)據(jù)元素、且結(jié)果數(shù)據(jù)元素與源向量操作數(shù)以相同數(shù)據(jù)元素順序來(lái)存儲(chǔ),因此,結(jié)果數(shù)據(jù)元素與源向量操作數(shù)中的它們的對(duì)應(yīng)的源數(shù)據(jù)元素對(duì)處于結(jié)果向量操作數(shù)的相同位位置中。除此示例性類型的SIMD指令之外,還有各種其他類型的SIMD指令(例如,僅有一個(gè)或具有兩個(gè)以上的源向量操作數(shù)的SIMD指令;以水平方式操作的SIMD指令;生成不同尺寸的結(jié)果向量操作數(shù)的SIMD指令;具有不同尺寸的數(shù)據(jù)元素的SIMD指令;和/或具有不同的數(shù)據(jù)元素順序的SIMD指令)。應(yīng)該理解,術(shù)語(yǔ)目的地向量操作數(shù)(或目的地操作數(shù))被定義為執(zhí)行由指令所指定的操作的直接結(jié)果,包括將該目的地操作數(shù)存儲(chǔ)在某一位置(寄存器或在由該指令所指定的存儲(chǔ)器地址),以便它可以作為源操作數(shù)由另一指令訪問(wèn)(由另一指令指定該同一個(gè)位置)。
諸如由具有包括x86、MMXTM、流式SIMD擴(kuò)展(SSE)、SSE2、SSE3、SSE4.1以及SSE4.2指令的指令集的CoreTM處理器使用的SIMD技術(shù)之類的SIMD技術(shù)在應(yīng)用性能方面實(shí)現(xiàn)了顯著的改善。已經(jīng)發(fā)布和/或公布了被稱為高級(jí)向量擴(kuò)展(AVX)(AVX1和AVX2)且使用向量擴(kuò)展(VEX)編碼方案的附加SIMD擴(kuò)展集(例如,參見(jiàn)2011年10月的64和IA-32架構(gòu)軟件開(kāi)發(fā)者手冊(cè),并且參見(jiàn)2011年6月的高級(jí)向量擴(kuò)展編程參考)。
本文中所描述的指令的實(shí)施例可以不同的格式體現(xiàn)。另外,在下文中詳述示例性系統(tǒng)、架構(gòu)、以及流水線。指令的實(shí)施例可在這些系統(tǒng)、架構(gòu)、以及流水線上執(zhí)行,但是不限于詳述的系統(tǒng)、架構(gòu)、以及流水線。
VEX編碼允許指令具有兩個(gè)以上操作數(shù),并且允許SIMD向量寄存器比128位長(zhǎng)。VEX前綴的使用提供了三個(gè)操作數(shù)(或者更多)句法。例如,先前的兩操作數(shù)指令執(zhí)行改寫源操作數(shù)的操作(諸如A=A+B)。VEX前綴的使用使操作數(shù)執(zhí)行非破壞性操作,諸如A=B+C。
圖9A示出示例性AVX指令格式,包括VEX前綴2102、實(shí)操作碼字段2130、MoD R/M字節(jié)2140、SIB字節(jié)2150、位移字段2162以及IMM8 2172。圖9B示出來(lái)自圖9A的哪些字段構(gòu)成完整操作碼字段2174和基礎(chǔ)操作字段2142。圖9C示出來(lái)自圖9A的哪些字段構(gòu)成寄存器索引字段2144。
VEX前綴(字節(jié)0-2)2102以三字節(jié)形式進(jìn)行編碼。第一字節(jié)是格式字段2140(VEX字節(jié)0,位[7:0]),該格式字段2140包含明確的C4字節(jié)值(用于區(qū)分C4指令格式的唯一值)。第二-第三字節(jié)(VEX字節(jié)1-2)包括提供專用能力的多個(gè)位字段。具體地,REX字段2105(VEX字節(jié)1,位[7-5])由VEX.R位字段(VEX字節(jié)1,位[7]–R)、VEX.X位字段(VEX字節(jié)1,位[6]–X)以及VEX.B位字段(VEX字節(jié)1,位[5]–B)組成。這些指令的其他字段對(duì)如在本領(lǐng)域中已知的寄存器索引的較低三個(gè)位(rrr、xxx以及bbb)進(jìn)行編碼,由此可通過(guò)增加VEX.R、VEX.X以及VEX.B來(lái)形成Rrrr、Xxxx以及Bbbb。操作碼映射字段2115(VEX字節(jié)1,位[4:0]–mmmmm)包括對(duì)隱含的前導(dǎo)操作碼字節(jié)進(jìn)行編碼的內(nèi)容。W字段2164(VEX字節(jié)2,位[7]–W)由記號(hào)VEX.W表示,并且提供取決于該指令而不同的功能。VEX.vvvv 2120(VEX字節(jié)2,位[6:3]-vvvv)的作用可包括如下:1)VEX.vvvv編碼第一源寄存器操作數(shù)且對(duì)具有兩個(gè)或兩個(gè)以上源操作數(shù)的指令有效,第一源寄存器操作數(shù)以反轉(zhuǎn)(1補(bǔ)碼)形式被指定;2)VEX.vvvv編碼目的地寄存器操作數(shù),目的地寄存器操作數(shù)針對(duì)特定向量位移以1補(bǔ)碼的形式被指定;或者3)VEX.vvvv不編碼任何操作數(shù),保留該字段,并且應(yīng)當(dāng)包含1111b。如果VEX.L 2168尺寸字段(VEX字節(jié)2,位[2]-L)=0,則它指示128位向量;如果VEX.L=1,則它指示256位向量。前綴編碼字段2125(VEX字節(jié)2,位[1:0]-pp)提供了用于基礎(chǔ)操作字段的附加位。
實(shí)操作碼字段2130(字節(jié)3)還被稱為操作碼字節(jié)。操作碼的一部分在該字段中被指定。MOD R/M字段2140(字節(jié)4)包括MOD字段2142(位[7-6])、Reg字段2144(位[5-3])、以及R/M字段2146(位[2-0])。Reg字段2144的作用可包括如下:對(duì)目的地寄存器操作數(shù)或源寄存器操作數(shù)(Rrrr中的rrr)進(jìn)行編碼;或者被視為操作碼擴(kuò)展且不用于對(duì)任何指令操作數(shù)進(jìn)行編碼。R/M字段2146的作用可包括如下:對(duì)引用存儲(chǔ)器地址的指令操作數(shù)進(jìn)行編碼;或者對(duì)目的地寄存器操作數(shù)或源寄存器操作數(shù)進(jìn)行編碼。
比例、索引、基址(SIB)-比例字段2150(字節(jié)5)的內(nèi)容包括用于存儲(chǔ)器地址生成的SS1252(位[7-6])。先前已經(jīng)針對(duì)寄存器索引Xxxx和Bbbb參考了SIB.xxx 2154(位[5-3])和SIB.bbb 2156(位[2-0])的內(nèi)容。位移字段2162和立即數(shù)字段(IMM8)2172包含地址數(shù)據(jù)。
向量友好指令格式是適于向量指令(例如,存在專用于向量操作的特定字段)的指令格式。盡管描述了其中通過(guò)向量友好指令格式支持向量和標(biāo)量操作兩者的實(shí)施例,但是替代實(shí)施例僅使用通過(guò)向量友好指令格式的向量操作。
圖10A、圖10B是示出根據(jù)本發(fā)明的實(shí)施例的通用向量友好指令格式及其指令模板的框圖;圖10A是示出根據(jù)本發(fā)明的實(shí)施例的通用向量友好指令格式及其A類指令模板的框圖;而圖10B是示出根據(jù)本發(fā)明的實(shí)施例的通用向量友好指令格式及其B類指令模板的框圖。具體地,針對(duì)通用向量友好指令格式2200定義A類和B類指令模板,兩者包括無(wú)存儲(chǔ)器訪問(wèn)2205的指令模板和存儲(chǔ)器訪問(wèn)2220的指令模板。在向量友好指令格式的上下文中的術(shù)語(yǔ)“通用”指不束縛于任何專用指令集的指令格式。
盡管將描述其中向量友好指令格式支持以下情況的本發(fā)明的實(shí)施例,即64字節(jié)向量操作數(shù)長(zhǎng)度(或尺寸)與32位(4字節(jié))或64位(8字節(jié))數(shù)據(jù)元素寬度(或尺寸)(并且由此,64字節(jié)向量由16雙字尺寸的元素或者替代地8四字尺寸的元素組成)、64字節(jié)向量操作數(shù)長(zhǎng)度(或尺寸)與16位(2字節(jié))或8位(1字節(jié))數(shù)據(jù)元素寬度(或尺寸)、32字節(jié)向量操作數(shù)長(zhǎng)度(或尺寸)與32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))、或8位(1字節(jié))數(shù)據(jù)元素寬度(或尺寸)、以及16字節(jié)向量操作數(shù)長(zhǎng)度(或尺寸)與32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))、或8位(1字節(jié))數(shù)據(jù)元素寬度(或尺寸),但是替代實(shí)施例可支持更大、更小、和/或不同的向量操作數(shù)尺寸(例如,256字節(jié)向量操作數(shù))與更大、更小或不同的數(shù)據(jù)元素寬度(例如,128位(16字節(jié))數(shù)據(jù)元素寬度)。
圖10A中的A類指令模板包括:1)在無(wú)存儲(chǔ)器訪問(wèn)2205的指令模板內(nèi),示出無(wú)存儲(chǔ)器訪問(wèn)的完全舍入控制型操作2210的指令模板、以及無(wú)存儲(chǔ)器訪問(wèn)的數(shù)據(jù)變換型操作2215的指令模板;以及2)在存儲(chǔ)器訪問(wèn)2220的指令模板內(nèi),示出存儲(chǔ)器訪問(wèn)的時(shí)效性2225的指令模板和存儲(chǔ)器訪問(wèn)的非時(shí)效性2230的指令模板。圖10B中的B類指令模板包括:1)在無(wú)存儲(chǔ)器訪問(wèn)2205的指令模板內(nèi),示出無(wú)存儲(chǔ)器訪問(wèn)的寫掩碼控制的部分舍入控制型操作2212的指令模板以及無(wú)存儲(chǔ)器訪問(wèn)的寫掩碼控制的vsize型操作2217的指令模板;以及2)在存儲(chǔ)器訪問(wèn)2220的指令模板內(nèi),示出存儲(chǔ)器訪問(wèn)的寫掩碼控制2227的指令模板。
通用向量友好指令格式2200包括以下列出的按照在圖10A和圖10B中示出的順序的如下字段。格式字段2240-該字段中的特定值(指令格式標(biāo)識(shí)符值)唯一地標(biāo)識(shí)向量友好指令格式,并且由此標(biāo)識(shí)指令在指令流中以向量友好指令格式出現(xiàn)。由此,該字段對(duì)于僅具有通用向量友好指令格式的指令集是不需要的,在這個(gè)意義上該字段是任選的?;A(chǔ)操作字段2242-其內(nèi)容區(qū)分不同的基礎(chǔ)操作。
寄存器索引字段2244-其內(nèi)容直接或者通過(guò)地址生成來(lái)指定源或目的地操作數(shù)在寄存器中或者在存儲(chǔ)器中的位置。這些字段包括足夠數(shù)量的位以從PxQ(例如,32x512、16x128、32x1024、64x1024)個(gè)寄存器組選擇N個(gè)寄存器。盡管在一個(gè)實(shí)施例中N可高達(dá)三個(gè)源和一個(gè)目的地寄存器,但是替代實(shí)施例可支持更多或更少的源和目的地寄存器(例如,可支持高達(dá)兩個(gè)源,其中這些源中的一個(gè)源還用作目的地,可支持高達(dá)三個(gè)源,其中這些源中的一個(gè)源還用作目的地,可支持高達(dá)兩個(gè)源和一個(gè)目的地)。
修飾符(modifier)字段2246-其內(nèi)容將指定存儲(chǔ)器訪問(wèn)的以通用向量指令格式出現(xiàn)的指令與不指定存儲(chǔ)器訪問(wèn)的以通用向量指令格式出現(xiàn)的指令區(qū)分開(kāi);即在無(wú)存儲(chǔ)器訪問(wèn)2205的指令模板與存儲(chǔ)器訪問(wèn)2220的指令模板之間進(jìn)行區(qū)分。存儲(chǔ)器訪問(wèn)操作讀取和/或?qū)懭氲酱鎯?chǔ)器層次(在一些情況下,使用寄存器中的值來(lái)指定源和/或目的地地址),而非存儲(chǔ)器訪問(wèn)操作不這樣(例如,源和/或目的地是寄存器)。盡管在一個(gè)實(shí)施例中,該字段還在三種不同的方式之間選擇以執(zhí)行存儲(chǔ)器地址計(jì)算,但是替代實(shí)施例可支持更多、更少或不同的方式來(lái)執(zhí)行存儲(chǔ)器地址計(jì)算。
擴(kuò)充操作字段2250-其內(nèi)容區(qū)分除基礎(chǔ)操作以外還要執(zhí)行各種不同操作中的哪一個(gè)操作。該字段是針對(duì)上下文的。在本發(fā)明的一個(gè)實(shí)施例中,該字段被分成類字段2268、α字段2252、以及β字段2254。擴(kuò)充操作字段2250允許在單一指令而非2、3或4個(gè)指令中執(zhí)行多組共同的操作。比例字段2260-其內(nèi)容允許用于存儲(chǔ)器地址生成(例如,用于使用2比例*索引+基址的地址生成)的索引字段的內(nèi)容的按比例縮放。
位移字段2,262A-其內(nèi)容用作存儲(chǔ)器地址生成的一部分(例如,用于使用2比例*索引+基址+位移的地址生成)。位移因數(shù)字段2262B(注意,位移字段2262A直接在位移因數(shù)字段2262B上的并置指示使用一個(gè)或另一個(gè))-其內(nèi)容用作地址生成的一部分,它指定通過(guò)存儲(chǔ)器訪問(wèn)的尺寸(N)按比例縮放的位移因數(shù),其中N是存儲(chǔ)器訪問(wèn)中的字節(jié)數(shù)量(例如,用于使用2比例*索引+基址+按比例縮放的位移的地址生成)。忽略冗余的低階位,并且因此將位移因數(shù)字段的內(nèi)容乘以存儲(chǔ)器操作數(shù)總尺寸(N)以生成在計(jì)算有效地址中使用的最終位移。N的值由處理器硬件在運(yùn)行時(shí)基于完整操作碼字段2274(稍候在本文中描述)和數(shù)據(jù)操縱字段2254C確定。位移字段2262A和位移因數(shù)字段2262B可以不用于無(wú)存儲(chǔ)器訪問(wèn)2205的指令模板和/或不同的實(shí)施例可實(shí)現(xiàn)兩者中的僅一個(gè)或不實(shí)現(xiàn)兩者中的任一個(gè),在這個(gè)意義上位移字段2262A和位移因數(shù)字段2262B是任選的。
數(shù)據(jù)元素寬度字段2264-其內(nèi)容區(qū)分使用多個(gè)數(shù)據(jù)元素寬度中的哪一個(gè)(在一些實(shí)施例中用于所有指令,在其他實(shí)施例中只用于一些指令)。如果支持僅一個(gè)數(shù)據(jù)元素寬度和/或使用操作碼的某一方面來(lái)支持?jǐn)?shù)據(jù)元素寬度,則該字段是不需要的,在這個(gè)意義上該字段是任選的。
寫掩碼字段2270-其內(nèi)容在每一數(shù)據(jù)元素位置的基礎(chǔ)上控制目的地向量操作數(shù)中的數(shù)據(jù)元素位置是否反映基礎(chǔ)操作和擴(kuò)充操作的結(jié)果。A類指令模板支持合并-寫掩碼操作,而B(niǎo)類指令模板支持合并寫掩碼操作和歸零寫掩碼操作兩者。當(dāng)合并時(shí),向量掩碼允許在執(zhí)行任何操作期間保護(hù)目的地中的任何元素集免于更新(由基礎(chǔ)操作和擴(kuò)充操作指定);在另一實(shí)施例中,保持其中對(duì)應(yīng)掩碼位具有0的目的地的每一元素的舊值。相反,當(dāng)歸零時(shí),向量掩碼允許在執(zhí)行任何操作期間使目的地中的任何元素集歸零(由基礎(chǔ)操作和擴(kuò)充操作指定);在一個(gè)實(shí)施例中,目的地的元素在對(duì)應(yīng)掩碼位具有0值時(shí)被設(shè)為0。該功能的子集是控制執(zhí)行的操作的向量長(zhǎng)度的能力(即,從第一個(gè)到最后一個(gè)要修改的元素的跨度),然而,被修改的元素不一定要是連續(xù)的。由此,寫掩碼字段2270允許部分向量操作,這包括加載、存儲(chǔ)、算術(shù)、邏輯等。盡管描述了其中寫掩碼字段2270的內(nèi)容選擇了多個(gè)寫掩碼寄存器中的包含要使用的寫掩碼的一個(gè)寫掩碼寄存器(并且由此寫掩碼字段2270的內(nèi)容間接地標(biāo)識(shí)了要執(zhí)行的掩碼操作)的本發(fā)明的實(shí)施例,但是替代實(shí)施例相反或另外允許掩碼寫字段2270的內(nèi)容直接地指定要執(zhí)行的掩碼操作。
立即數(shù)字段2272-其內(nèi)容允許對(duì)立即數(shù)的指定。該字段在實(shí)現(xiàn)不支持立即數(shù)的通用向量友好格式中不存在且在不使用立即數(shù)的指令中不存在,在這個(gè)意義上該字段是任選的。類字段2268-其內(nèi)容在不同類的指令之間進(jìn)行區(qū)分。參考圖10A和圖10B,該字段的內(nèi)容在A類和B類指令之間進(jìn)行選擇。在圖10A和圖10B中,圓角方形用于指示專用值存在于字段中(例如,在圖10A和圖10B中分別用于類字段2268的A類2268A和B類2268B)。
在A類非存儲(chǔ)器訪問(wèn)2205的指令模板的情況下,α字段2252被解釋為其內(nèi)容區(qū)分要執(zhí)行不同擴(kuò)充操作類型中的哪一種(例如,針對(duì)無(wú)存儲(chǔ)器訪問(wèn)的舍入型操作2210和無(wú)存儲(chǔ)器訪問(wèn)的數(shù)據(jù)變換型操作2215的指令模板分別指定舍入2252A.1和數(shù)據(jù)變換2,52A.2)的RS字段2252A,而β字段2254區(qū)分要執(zhí)行指定類型的操作中的哪一種。在無(wú)存儲(chǔ)器訪問(wèn)2205指令模板中,比例字段2260、位移字段2262A以及位移比例字段2262B不存在。
在無(wú)存儲(chǔ)器訪問(wèn)的完全舍入控制型操作2210的指令模板中,β字段2254被解釋為其內(nèi)容提供靜態(tài)舍入的舍入控制字段2254A。盡管在本發(fā)明的所述實(shí)施例中舍入控制字段2254A包括抑制所有浮點(diǎn)異常(SAE)字段2256和舍入操作控制字段2258,但是替代實(shí)施例可支持、可將這些概念兩者都編碼成相同的字段或者僅具有這些概念/字段中的一個(gè)或另一個(gè)(例如,可僅有舍入操作控制字段2258)。
SAE字段2256-其內(nèi)容區(qū)分是否停用異常事件報(bào)告;當(dāng)SAE字段2256的內(nèi)容指示啟用抑制時(shí),給定指令不報(bào)告任何種類的浮點(diǎn)異常標(biāo)志且不喚起任何浮點(diǎn)異常處理程序。
舍入操作控制字段2258-其內(nèi)容區(qū)分執(zhí)行一組舍入操作中的哪一個(gè)(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控制字段2258允許在每一指令的基礎(chǔ)上改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本發(fā)明的一個(gè)實(shí)施例中,舍入操作控制字段2250的內(nèi)容優(yōu)先于該寄存器值。
在無(wú)存儲(chǔ)器訪問(wèn)的數(shù)據(jù)變換型操作2215的指令模板中,β字段2254被解釋為數(shù)據(jù)變換字段2254B,其內(nèi)容區(qū)分要執(zhí)行多個(gè)數(shù)據(jù)變換中的哪一個(gè)(例如,無(wú)數(shù)據(jù)變換、混合、廣播)。
在A類存儲(chǔ)器訪問(wèn)2220的指令模板的情況下,α字段2252被解釋為驅(qū)逐提示字段2252B,其內(nèi)容區(qū)分要使用驅(qū)逐提示中的哪一個(gè)(在圖10A中,為存儲(chǔ)器訪問(wèn)時(shí)間2225指令模板和存儲(chǔ)器訪問(wèn)非時(shí)間2230的指令模板分別指定時(shí)間2252B.1和非時(shí)間2252B.2)、而β字段2254被解釋為數(shù)據(jù)操縱字段2254C,其內(nèi)容區(qū)分要執(zhí)行大量數(shù)據(jù)操縱操作(也稱為基元(primitive))中的哪一個(gè)(例如,無(wú)操縱、廣播、源的向上轉(zhuǎn)換、以及目的地的向下轉(zhuǎn)換)。存儲(chǔ)器訪問(wèn)2220的指令模板包括比例字段2260、以及任選的位移字段2262A或位移比例字段2262B。
向量存儲(chǔ)器指令使用轉(zhuǎn)換支持來(lái)執(zhí)行來(lái)自存儲(chǔ)器的向量加載并將向量存儲(chǔ)到存儲(chǔ)器。如同尋常的向量指令,向量存儲(chǔ)器指令以數(shù)據(jù)元素式的方式與存儲(chǔ)器來(lái)回傳輸數(shù)據(jù),其中實(shí)際傳輸?shù)脑赜蛇x為寫掩碼的向量掩碼的內(nèi)容規(guī)定。
時(shí)效性的數(shù)據(jù)是可能足夠快地重新使用以從高速緩存受益的數(shù)據(jù)。然而,這是提示,且不同的處理器可以不同的方式實(shí)現(xiàn)它,包括完全忽略該提示。非時(shí)效性的數(shù)據(jù)是不可能足夠快地重新使用以從第一級(jí)高速緩存中的高速緩存受益且應(yīng)當(dāng)被給予驅(qū)逐優(yōu)先級(jí)的數(shù)據(jù)。然而,這是提示,且不同的處理器可以不同的方式實(shí)現(xiàn)它,包括完全忽略該提示。
在B類指令模板的情況下,α字段2252被解釋為寫掩碼控制(Z)字段2252C,其內(nèi)容區(qū)分由寫掩碼字段2270控制的寫掩碼操作應(yīng)當(dāng)是合并還是歸零。
在B類非存儲(chǔ)器訪問(wèn)2205的指令模板的情況下,β字段2254的一部分被解釋為RL字段2257A,其內(nèi)容區(qū)分要執(zhí)行不同擴(kuò)充操作類型中的哪一種(例如,針對(duì)無(wú)存儲(chǔ)器訪問(wèn)的寫掩碼控制部分舍入控制類型操作2212的指令模板和無(wú)存儲(chǔ)器訪問(wèn)的寫掩碼控制VSIZE型操作2217的指令模板分別指定舍入2257A.1和向量長(zhǎng)度(VSIZE)2257A.2),而β字段2254的其余部分區(qū)分要執(zhí)行指定類型的操作中的哪一種。在無(wú)存儲(chǔ)器訪問(wèn)2205指令模板中,比例字段2260、位移字段2262A以及位移比例字段2262B不存在。
在無(wú)存儲(chǔ)器訪問(wèn)的寫掩碼控制的部分舍入控制型操作2210的指令模板中,β字段2254的其余部分被解釋為舍入操作字段2259A,并且停用異常事件報(bào)告(給定指令不報(bào)告任何種類的浮點(diǎn)異常標(biāo)志且不喚起任何浮點(diǎn)異常處理程序)。
舍入操作控制字段2259A-正如舍入操作控制字段2258,其內(nèi)容區(qū)分執(zhí)行一組舍入操作中的哪一個(gè)(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控制字段2259A允許在每一指令的基礎(chǔ)上改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本發(fā)明的一個(gè)實(shí)施例中,舍入操作控制字段2250的內(nèi)容優(yōu)先于該寄存器值。
在無(wú)存儲(chǔ)器訪問(wèn)的寫掩碼控制VSIZE型操作2217的指令模板中,β字段2254的其余部分被解釋為向量長(zhǎng)度字段2259B,其內(nèi)容區(qū)分要執(zhí)行多個(gè)數(shù)據(jù)向量長(zhǎng)度中的哪一個(gè)(例如,128字節(jié)、256字節(jié)、或512字節(jié))。
在B類存儲(chǔ)器訪問(wèn)2220的指令模板的情況下,β字段2254的一部分被解釋為廣播字段2257B,其內(nèi)容區(qū)分是否要執(zhí)行廣播型數(shù)據(jù)操縱操作,而β字段2254的其余部分被解釋為向量長(zhǎng)度字段2259B。存儲(chǔ)器訪問(wèn)2220的指令模板包括比例字段2260、以及任選的位移字段2262A或位移比例字段2262B。
針對(duì)通用向量友好指令格式2200,示出完整操作碼字段2274包括格式字段2240、基礎(chǔ)操作字段2242以及數(shù)據(jù)元素寬度字段2264。盡管示出了其中完整操作碼字段2274包括所有這些字段的一個(gè)實(shí)施例,但是在不支持所有這些字段的實(shí)施例中,完整操作碼字段2274包括少于所有的這些字段。完整操作碼字段2274提供操作碼(opcode)。
擴(kuò)充操作字段2250、數(shù)據(jù)元素寬度字段2264以及寫掩碼字段2270允許在每一指令的基礎(chǔ)上以通用向量友好指令格式指定這些特征。寫掩碼字段和數(shù)據(jù)元素寬度字段的組合創(chuàng)建各種類型的指令,因?yàn)檫@些指令允許基于不同的數(shù)據(jù)元素寬度應(yīng)用該掩碼。
在A類和B類內(nèi)出現(xiàn)的各種指令模板在不同的情形下是有益的。在本發(fā)明的一些實(shí)施例中,不同處理器或者處理器內(nèi)的不同核可支持僅A類、僅B類、或者可支持兩類。舉例而言,旨在用于通用計(jì)算的高性能通用無(wú)序核可僅支持B類,旨在主要用于圖形和/或科學(xué)(吞吐量)計(jì)算的核可僅支持A類,并且旨在用于兩者的核可支持兩者(當(dāng)然,具有來(lái)自兩類的模板和指令的一些混合、但是并非來(lái)自兩類的所有模板和指令的核在本發(fā)明的范圍內(nèi))。同樣,單一處理器可包括多個(gè)核,所有核支持相同的類或者其中不同的核支持不同的類。舉例而言,在具有單獨(dú)的圖形和通用核的處理器中,圖形核中的旨在主要用于圖形和/或科學(xué)計(jì)算的一個(gè)核可僅支持A類,而通用核中的一個(gè)或多個(gè)可以是具有旨在用于通用計(jì)算的僅支持B類的無(wú)序執(zhí)行和寄存器重命名的高性能通用核。不具有單獨(dú)的圖形核的另一處理器可包括既支持A類又支持B類的一個(gè)或多個(gè)通用有序或無(wú)序核。當(dāng)然,在本發(fā)明的不同實(shí)施例中,來(lái)自一類的特征也可在其他類中實(shí)現(xiàn)??墒挂愿呒?jí)語(yǔ)言撰寫的程序成為(例如,及時(shí)編譯或者統(tǒng)計(jì)編譯)各種不同的可執(zhí)行形式,包括:1)僅具有用于執(zhí)行的目標(biāo)處理器支持的類的指令的形式;或者2)具有使用所有類的指令的不同組合而編寫的替代例程且具有選擇這些例程以基于由當(dāng)前正在執(zhí)行代碼的處理器支持的指令而執(zhí)行的控制流代碼的形式。
圖11是示出根據(jù)本發(fā)明的實(shí)施例的示例性專用向量友好指令格式的框圖。圖11示出專用向量友好指令格式2300,其指定位置、尺寸、解釋和字段的次序、以及那些字段中的一些字段的值,在這個(gè)意義上向量友好指令格式800是專用的。專用向量友好指令格式2300可用于擴(kuò)展x86指令集,并且由此一些字段類似于在現(xiàn)有x86指令集及其擴(kuò)展(例如,AVX)中使用的那些字段或與之相同。該格式保持與具有擴(kuò)展的現(xiàn)有x86指令集的前綴編碼字段、實(shí)操作碼字節(jié)字段、MOD R/M字段、SIB字段、位移字段、以及立即數(shù)字段一致。示出來(lái)自圖10的字段,來(lái)自圖11的字段映射到來(lái)自圖7的字段。
應(yīng)當(dāng)理解,雖然出于說(shuō)明的目的在通用向量友好指令格式2200的上下文中,本發(fā)明的實(shí)施例參考專用向量友好指令格式2300進(jìn)行了描述,但是本發(fā)明不限于專用向量友好指令格式2300,聲明的地方除外。例如,通用向量友好指令格式2200構(gòu)想各種字段的各種可能的尺寸,而專用向量友好指令格式2300被示為具有特定尺寸的字段。作為具體示例,盡管在專用向量友好指令格式2300中數(shù)據(jù)元素寬度字段2264被示為一位字段,但是本發(fā)明不限于此(即,通用向量友好指令格式2200構(gòu)想數(shù)據(jù)元素寬度字段2264的其他尺寸)。
通用向量友好指令格式2200包括以下列出的按照?qǐng)D11A中示出的順序的如下字段。EVEX前綴(字節(jié)0-3)2302-以四字節(jié)形式進(jìn)行編碼。格式字段2240(EVEX字節(jié)0,位[7:0])-第一字節(jié)(EVEX字節(jié)0)是格式字段2240,并且它包含0x62(在本發(fā)明的一個(gè)實(shí)施例中用于區(qū)分向量友好指令格式的唯一值)。第二-第四字節(jié)(EVEX字節(jié)1-3)包括提供專用能力的多個(gè)位字段。
REX字段2305(EVEX字節(jié)1,位[7-5])-由EVEX.R位字段(EVEX字節(jié)1,位[7]–R)、EVEX.X位字段(EVEX字節(jié)1,位[6]–X)以及(2257BEX字節(jié)1,位[5]–B)組成。EVEX.R、EVEX.X和EVEX.B位字段提供與對(duì)應(yīng)VEX位字段相同的功能,并且使用1補(bǔ)碼的形式進(jìn)行編碼,即ZMM0被編碼為1111B,ZMM15被編碼為0000B。這些指令的其他字段對(duì)如在本領(lǐng)域中已知的寄存器索引的較低三個(gè)位(rrr、xxx、以及bbb)進(jìn)行編碼,由此可通過(guò)增加EVEX.R、EVEX.X以及EVEX.B來(lái)形成Rrrr、Xxxx以及Bbbb。
REX’字段2210-這是REX’字段2210的第一部分,并且是用于對(duì)擴(kuò)展的32個(gè)寄存器集合的較高16個(gè)或較低16個(gè)寄存器進(jìn)行編碼的EVEX.R’位字段(EVEX字節(jié)1,位[4]–R’)。在本發(fā)明的一個(gè)實(shí)施例中,該位與以下指示的其他位一起以位反轉(zhuǎn)的格式存儲(chǔ)以(在公知x86的32位模式下)與實(shí)操作碼字節(jié)是62的BOUND指令進(jìn)行區(qū)分,但是在MOD R/M字段(在下文中描述)中不接受MOD字段中的值11;本發(fā)明的替代實(shí)施例不以反轉(zhuǎn)的格式存儲(chǔ)該指示的位以及其他指示的位。值1用于對(duì)較低16個(gè)寄存器進(jìn)行編碼。換句話說(shuō),通過(guò)組合EVEX.R’、EVEX.R、以及來(lái)自其他字段的其他RRR來(lái)形成R’Rrrr。
操作碼映射字段2315(EVEX字節(jié)1,位[3:0]–mmmm)–其內(nèi)容對(duì)隱含的前導(dǎo)操作碼字節(jié)(0F、0F 38、或0F 3)進(jìn)行編碼。數(shù)據(jù)元素寬度字段2264 (EVEX字節(jié)2,位[7]–W)-由記號(hào)EVEX.W表示。EVEX.W用于定義數(shù)據(jù)類型(32位數(shù)據(jù)元素或64位數(shù)據(jù)元素)的粒度(尺寸)。EVEX.vvvv 2320(EVEX字節(jié)2,位[6:3]-vvvv)-EVEX.vvvv的作用可包括如下:1)EVEX.vvvv編碼第一源寄存器操作數(shù)且對(duì)具有兩個(gè)或兩個(gè)以上源操作數(shù)的指令有效,第一源寄存器操作數(shù)以反轉(zhuǎn)(1補(bǔ)碼)的形式被指定;2)EVEX.vvvv編碼目的地寄存器操作數(shù),目的地寄存器操作數(shù)針對(duì)特定向量位移以1補(bǔ)碼的形式被指定;或者3)EVEX.vvvv不編碼任何操作數(shù),保留該字段,并且應(yīng)當(dāng)包含1111b。由此,EVEX.vvvv字段2320對(duì)以反轉(zhuǎn)(1補(bǔ)碼)的形式存儲(chǔ)的第一源寄存器指定符的4個(gè)低階位進(jìn)行編碼。取決于該指令,額外不同的EVEX位字段用于將指定符尺寸擴(kuò)展到32個(gè)寄存器。EVEX.U 2268類字段(EVEX字節(jié)2,位[2]-U)-如果EVEX.U=0,則它指示A類或EVEX.U0;如果EVEX.U=1,則它指示B類或EVEX.U1。
前綴編碼字段2325(EVEX字節(jié)2,位[1:0]-pp)-提供了用于基礎(chǔ)操作字段的附加位。除了對(duì)以EVEX前綴格式的傳統(tǒng)SSE指令提供支持以外,這也具有壓縮SIMD前綴的益處(EVEX前綴只需要2位,而不是需要字節(jié)來(lái)表達(dá)SIMD前綴)。在一個(gè)實(shí)施例中,為了支持使用以傳統(tǒng)格式和以EVEX前綴格式的SIMD前綴(66H、F2H、F3H)的傳統(tǒng)SSE指令,將這些傳統(tǒng)SIMD前綴編碼成SIMD前綴編碼字段;并且在運(yùn)行時(shí)在提供給解碼器的PLA之前被擴(kuò)展成傳統(tǒng)SIMD前綴(因此PLA可執(zhí)行傳統(tǒng)和EVEX格式的這些傳統(tǒng)指令,而無(wú)需修改)。雖然較新的指令可將EVEX前綴編碼字段的內(nèi)容直接作為操作碼擴(kuò)展,但是為了一致性,特定實(shí)施例以類似的方式擴(kuò)展,但允許由這些傳統(tǒng)SIMD前綴指定不同的含義。替代實(shí)施例可重新設(shè)計(jì)PLA以支持2位SIMD前綴編碼,并且由此不需要擴(kuò)展。
α字段2252(EVEX字節(jié)3,位[7]–EH,也稱為EVEX.EH、EVEX.rs、EVEX.RL、EVEX.寫掩碼控制、以及EVEX.N;也以α示出)-如先前所述,該字段是針對(duì)上下文的。β字段2254(EVEX字節(jié)3,位[6:4]-SSS,也稱為EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB,還被示為具有βββ)-如先前所述,該字段是內(nèi)容專用的。
REX’字段2210-這是REX’字段的其余部分,并且是可用于對(duì)擴(kuò)展的32個(gè)寄存器集合的較高16個(gè)或較低16個(gè)寄存器進(jìn)行編碼的EVEX.V’位字段(EVEX字節(jié)3,位[3]–V’)。該位以位反轉(zhuǎn)的格式存儲(chǔ)。值1用于對(duì)較低16個(gè)寄存器進(jìn)行編碼。換句話說(shuō),通過(guò)組合EVEX.V’、EVEX.vvvv來(lái)形成V’VVVV。
寫掩碼字段2270(EVEX字節(jié)3,位[2:0]-kkk)-其內(nèi)容指定寫掩碼寄存器中的寄存器索引,如先前所述。在本發(fā)明的一個(gè)實(shí)施例中,特定值EVEX.kkk=000具有暗示沒(méi)有寫掩碼用于特定指令的特殊行為(這可以各種方式實(shí)現(xiàn),包括使用硬連線到所有的寫掩碼或者旁路掩碼硬件的硬件來(lái)實(shí)現(xiàn))。
實(shí)操作碼字段2330(字節(jié)4)還被稱為操作碼字節(jié)。操作碼的一部分在該字段中被指定。MOD R/M字段2340(字節(jié)5)包括MOD字段2342、Reg字段2344、以及R/M字段2346。如先前所述的,MOD字段2342的內(nèi)容將存儲(chǔ)器訪問(wèn)和非存儲(chǔ)器訪問(wèn)操作區(qū)分開(kāi)。Reg字段2344的作用可被歸結(jié)為兩種情形:對(duì)目的地寄存器操作數(shù)或源寄存器操作數(shù)進(jìn)行編碼;或者被視為操作碼擴(kuò)展且不用于對(duì)任何指令操作數(shù)進(jìn)行編碼。R/M字段2346的作用可包括如下:對(duì)引用存儲(chǔ)器地址的指令操作數(shù)進(jìn)行編碼;或者對(duì)目的地寄存器操作數(shù)或源寄存器操作數(shù)進(jìn)行編碼。
比例、索引、基址(SIB)字節(jié)(字節(jié)6)-如先前所述的,比例字段2250的內(nèi)容用于存儲(chǔ)器地址生成。SIB.xxx 2354和SIB.bbb 2356-先前已經(jīng)針對(duì)寄存器索引Xxxx和Bbbb提及了這些字段的內(nèi)容。位移字段2,262A(字節(jié)7-10)-當(dāng)MOD字段2342包含10時(shí),字節(jié)7-10是位移字段2,262A,并且它與傳統(tǒng)32位位移(disp32)一樣地工作,并且以字節(jié)粒度工作。
位移因數(shù)字段2,262B(字節(jié)7)-當(dāng)MOD字段2342包含01時(shí),字節(jié)7是位移因數(shù)字段2,262B。該字段的位置與傳統(tǒng)x86指令集8位位移(disp8)的位置相同,它以字節(jié)粒度工作。由于disp8是符號(hào)擴(kuò)展的,因此它僅能在-128和127字節(jié)偏移量之間尋址;在64字節(jié)高速緩存行的方面,disp8使用可被設(shè)為僅四個(gè)真正有用的值-128、-64、0和64的8位;由于常常需要更大的范圍,所以使用disp32;然而,disp32需要4個(gè)字節(jié)。與disp8和disp32對(duì)比,位移因數(shù)字段2,262B是disp8的重新解釋;當(dāng)使用位移因數(shù)字段2,262B時(shí),通過(guò)將位移因數(shù)字段的內(nèi)容乘以存儲(chǔ)器操作數(shù)訪問(wèn)的尺寸(N)來(lái)確定實(shí)際位移。該類型的位移被稱為disp8*N。這減小了平均指令長(zhǎng)度(單個(gè)字節(jié)用于位移,但具有大得多的范圍)。這種壓縮位移基于有效位移是存儲(chǔ)器訪問(wèn)的粒度的倍數(shù)的假設(shè),并且由此地址偏移量的冗余低階位不需要被編碼。換句話說(shuō),位移因數(shù)字段2262B替代傳統(tǒng)x86指令集8位位移。由此,位移因數(shù)字段2262B 以與x86指令集8位位移相同的方式(因此在ModRM/SIB編碼規(guī)則中沒(méi)有變化)進(jìn)行編碼,唯一的不同在于,將disp8超載至disp8*N。換句話說(shuō),在編碼規(guī)則或編碼長(zhǎng)度中沒(méi)有變化,而僅在通過(guò)硬件對(duì)位移值的解釋中有變化(這需要按存儲(chǔ)器操作數(shù)的尺寸按比例縮放位移量以獲得字節(jié)式地址偏移量)。立即數(shù)字段2272如先前所述地操作。
圖11B是示出根據(jù)本發(fā)明的實(shí)施例的構(gòu)成完整操作碼字段2274的具有專用向量友好指令格式2300的字段的框圖。具體地,完整操作碼字段2274包括格式字段2240、基礎(chǔ)操作字段2242、以及數(shù)據(jù)元素寬度(W)字段2264?;A(chǔ)操作字段2242包括前綴編碼字段2325、操作碼映射字段2315以及實(shí)操作碼字段2330。
圖11C是示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的構(gòu)成寄存器索引字段2244的具有專用向量友好指令格式2300的字段的框圖。具體地,寄存器索引字段2244包括REX字段2305、REX’字段2310、MODR/M.reg字段2344、MODR/M.r/m字段2346、VVVV字段2320、xxx字段2354以及bbb字段2356。
圖11D是示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的構(gòu)成擴(kuò)充操作字段2250的具有專用向量友好指令格式2300的字段的框圖。當(dāng)類(U)字段2268包含0時(shí),它表明EVEX.U0(A類2268A);當(dāng)它包含1時(shí),它表明EVEX.U1(B類2268B)。當(dāng)U=0且MOD字段2342包含11(表明無(wú)存儲(chǔ)器訪問(wèn)操作)時(shí),α字段2252(EVEX字節(jié)3,位[7]–EH)被解釋為rs字段2,252A。當(dāng)rs字段2252A包含1(舍入2252A.1)時(shí),β字段2254(EVEX字節(jié)3,位[6:4]–SSS)被解釋為舍入控制字段2254A。舍入控制字段2254A包括一位SAE字段2256和兩位舍入操作字段2258。當(dāng)rs字段2252A包含0(數(shù)據(jù)變換2252A.2)時(shí),β字段2254(EVEX字節(jié)3,位[6:4]–SSS)被解釋為三位數(shù)據(jù)變換字段2254B。當(dāng)U=0且MOD字段2342包含00、01或10(表達(dá)存儲(chǔ)器存取操作)時(shí),α字段2252(EVEX字節(jié)3,位[7]–EH)被解釋為驅(qū)逐提示(EH)字段2252B且β字段2254(EVEX字節(jié)3,位[6:4]–SSS)被解釋為三位數(shù)據(jù)操縱字段2254C。
當(dāng)U=1時(shí),α字段2252(EVEX字節(jié)3,位[7]–EH)被解釋為寫掩碼控制(Z)字段2252C。當(dāng)U=1且MOD字段2342包含11(表明無(wú)存儲(chǔ)器訪問(wèn)操作)時(shí),β字段2254的一部分(EVEX字節(jié)3,位[4]–S0)被解釋為RL字段2257A;當(dāng)它包含1(舍入2257A.1)時(shí),β字段2254的其余部分(EVEX字節(jié)3,位[6-5]–S2-1)被解釋為舍入操作字段2259A,而當(dāng)RL字段2257A包含0(VSIZE 2257.A2)時(shí),β字段2254的其余部分(EVEX字節(jié)3,位[6-5]-S2-1)被解釋為向量長(zhǎng)度字段2259B(EVEX字節(jié)3,位[6-5]–L1-0)。當(dāng)U=1且MOD字段2342包含00、01或10(表明存儲(chǔ)器訪問(wèn)操作)時(shí),β字段2254(EVEX字節(jié)3,位[6:4]–SSS)被解釋為向量長(zhǎng)度字段2259B(EVEX字節(jié)3,位[6-5]–L1-0)和廣播字段2257B(EVEX字節(jié)3,位[4]–B)。
圖12是根據(jù)本發(fā)明的一個(gè)實(shí)施例的寄存器架構(gòu)2400的框圖。在所示出的實(shí)施例中,有32個(gè)512位寬的向量寄存器2410;這些寄存器被引用為zmm0到zmm31。較低的16zmm寄存器的較低階256個(gè)位覆蓋在寄存器ymm0-16上。較低的16zmm寄存器的較低階128個(gè)位(ymm寄存器的較低階128個(gè)位)覆蓋在寄存器xmm0-15上。專用向量友好指令格式2300對(duì)這些覆蓋的寄存器組操作,如在以下表格中所示的。
換句話說(shuō),向量長(zhǎng)度字段2259B在最大長(zhǎng)度與一個(gè)或多個(gè)其他較短長(zhǎng)度之間進(jìn)行選擇,其中每一這種較短長(zhǎng)度是前一長(zhǎng)度的一半,并且不具有向量長(zhǎng)度字段2259B的指令模板在最大向量長(zhǎng)度上操作。此外,在一個(gè)實(shí)施例中,專用向量友好指令格式2300的B類指令模板對(duì)打包或標(biāo)量單/雙精度浮點(diǎn)數(shù)據(jù)以及打包或標(biāo)量整數(shù)數(shù)據(jù)操作。標(biāo)量操作是對(duì)zmm/ymm/xmm寄存器中的最低階數(shù)據(jù)元素位置執(zhí)行的操作;取決于本實(shí)施例,較高階數(shù)據(jù)元素位置保持與在指令之前相同或者歸零。
寫掩碼寄存器2415-在所示的實(shí)施例中,存在8個(gè)寫掩碼寄存器(k0至k7),每一寫掩碼寄存器的尺寸是64位。在替代實(shí)施例中,寫掩碼寄存器2415的尺寸是16位。如先前所述的,在本發(fā)明的一個(gè)實(shí)施例中,向量掩碼寄存器k0無(wú)法用作寫掩碼;當(dāng)正常指示k0的編碼用作寫掩碼時(shí),它選擇硬連線的寫掩碼0xFFFF,從而有效地停用該指令的寫掩碼操作。
通用寄存器2425——在所示出的實(shí)施例中,有十六個(gè)64位通用寄存器,這些寄存器與現(xiàn)有的x86尋址模式一起使用來(lái)尋址存儲(chǔ)器操作數(shù)。這些寄存器通過(guò)名稱RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8到R15來(lái)引用。
標(biāo)量浮點(diǎn)堆棧寄存器組(x87堆棧)2445,在其上面重疊了MMX打包整數(shù)平坦寄存器組2450——在所示出的實(shí)施例中,x87堆棧是用于使用x87指令集擴(kuò)展來(lái)對(duì)32/64/80位浮點(diǎn)數(shù)據(jù)執(zhí)行標(biāo)量浮點(diǎn)操作的八元素堆棧;而使用MMX寄存器來(lái)對(duì)64位打包整數(shù)數(shù)據(jù)執(zhí)行操作,以及為在MMX和XMM寄存器之間執(zhí)行的一些操作保存操作數(shù)。
本發(fā)明的替代實(shí)施例可以使用較寬的或較窄的寄存器。另外,本發(fā)明的替代實(shí)施例可以使用更多、更少或不同的寄存器組和寄存器。
處理器核可以用出于不同目的的不同方式在不同的處理器中實(shí)現(xiàn)。例如,這樣的核的實(shí)現(xiàn)可以包括:1)旨在用于通用計(jì)算的通用有序核;2)預(yù)期用于通用計(jì)算的高性能通用無(wú)序核;3)旨在主要用于圖形和/或科學(xué)(吞吐量)計(jì)算的專用核。不同處理器的實(shí)現(xiàn)可包括:1)包括旨在用于通用計(jì)算的一個(gè)或多個(gè)通用有序核和/或旨在用于通用計(jì)算的一個(gè)或多個(gè)通用無(wú)序核的CPU;以及2)包括旨在主要用于圖形和/或科學(xué)(吞吐量)的一個(gè)或多個(gè)專用核的協(xié)處理器。這樣的不同處理器導(dǎo)致不同的計(jì)算機(jī)系統(tǒng)架構(gòu),其可包括:1)在與CPU分開(kāi)的芯片上的協(xié)處理器;2)在與CPU相同的封裝中但分開(kāi)的管芯上的協(xié)處理器;3)與CPU在相同管芯上的協(xié)處理器(在該情況下,這樣的協(xié)處理器有時(shí)被稱為諸如集成圖形和/或科學(xué)(吞吐量)邏輯等專用邏輯,或被稱為專用核);以及4)可以將所描述的CPU(有時(shí)被稱為應(yīng)用核或應(yīng)用處理器)、以上描述的協(xié)處理器和附加功能包括在同一管芯上的芯片上系統(tǒng)。接著描述示例性核架構(gòu),隨后描述示例性處理器和計(jì)算機(jī)架構(gòu)。
圖13A是示出根據(jù)本發(fā)明的各實(shí)施例的示例性有序流水線和示例性的寄存器重命名的無(wú)序發(fā)布/執(zhí)行流水線的框圖。圖13B是示出根據(jù)本發(fā)明的實(shí)施例的有序架構(gòu)核的示例性實(shí)施例以及包括在處理器中的示例性寄存器重命名的無(wú)序發(fā)布/執(zhí)行架構(gòu)核兩者的方框圖。實(shí)線框示出了有序流水線和有序核,而可選增加的虛線框示出了寄存器重命名的無(wú)序發(fā)布/執(zhí)行流水線和核。給定有序方面是無(wú)序方面的子集的情況下,將描述無(wú)序方面。
在圖13A中,處理器流水線2500包括取出級(jí)2502、長(zhǎng)度解碼級(jí)2504、解碼級(jí)2506、分配級(jí)2508、重命名級(jí)2510、調(diào)度(也稱為分派或發(fā)布)級(jí)2512、寄存器讀取/存儲(chǔ)器讀取級(jí)2514、執(zhí)行級(jí)2516、寫回/存儲(chǔ)器寫入級(jí)2518、異常處理級(jí)2522和提交級(jí)2524。
圖13B示出了包括耦合到執(zhí)行引擎單元2550的前端單元2530的處理器核2590,且執(zhí)行引擎單元和前端單元兩者都耦合到存儲(chǔ)器單元2570。核2590可以是精簡(jiǎn)指令集計(jì)算(RISC)核、復(fù)雜指令集計(jì)算(CISC)核、超長(zhǎng)指令字(VLIW)核或混合或替代核類型。作為又一選項(xiàng),核2590可以是專用核,諸如例如網(wǎng)絡(luò)或通信核、壓縮引擎、協(xié)處理器核、通用計(jì)算圖形處理器單元(GPGPU)核、或圖形核等等。
前端單元2530包括耦合到指令高速緩存單元2534的分支預(yù)測(cè)單元2532,該指令高速緩存單元耦合到指令轉(zhuǎn)換后備緩沖器(TLB)2536,該指令轉(zhuǎn)換后備緩沖器耦合到指令取出單元2538,指令取出單元耦合到解碼單元2540。解碼單元2540(或解碼器)可解碼指令,并生成從原始指令解碼出的、或以其他方式反映原始指令的、或從原始指令導(dǎo)出的一個(gè)或多個(gè)微操作、微代碼進(jìn)入點(diǎn)、微指令、其他指令、或其他控制信號(hào)作為輸出。解碼單元2540可使用各種不同的機(jī)制來(lái)實(shí)現(xiàn)。合適的機(jī)制的示例包括但不限于查找表、硬件實(shí)現(xiàn)、可編程邏輯陣列(PLA)、微代碼只讀存儲(chǔ)器(ROM)等。在一個(gè)實(shí)施例中,核2590包括(例如,在解碼單元2540中或否則在前端單元2530內(nèi)的)用于存儲(chǔ)某些宏指令的微代碼的微代碼ROM或其他介質(zhì)。解碼單元2540耦合至執(zhí)行引擎單元2550中的重命名/分配器單元2552。
執(zhí)行引擎單元2550包括重命名/分配器單元2552,該重命名/分配器單元耦合至引退單元2554和一個(gè)或多個(gè)調(diào)度器單元2556的集合。調(diào)度器單元2556表示任何數(shù)目的不同調(diào)度器,包括預(yù)留站、中央指令窗等。調(diào)度器單元2556耦合到物理寄存器組單元2558。每個(gè)物理寄存器組單元2558表示一個(gè)或多個(gè)物理寄存器組,其中不同的物理寄存器組存儲(chǔ)一種或多種不同的數(shù)據(jù)類型,諸如標(biāo)量整數(shù)、標(biāo)量浮點(diǎn)、壓縮整數(shù)、壓縮浮點(diǎn)、向量整數(shù)、向量浮點(diǎn)、狀態(tài)(例如,作為要執(zhí)行的下一指令的地址的指令指針)等。
在一個(gè)實(shí)施例中,物理寄存器組單元2558包括向量寄存器單元、寫掩碼寄存器單元和標(biāo)量寄存器單元。這些寄存器單元可以提供架構(gòu)向量寄存器、向量掩碼寄存器、和通用寄存器。物理寄存器組單元2558與引退單元2554重疊以示出可以用來(lái)實(shí)現(xiàn)寄存器重命名和無(wú)序執(zhí)行的各種方式(例如,使用重新排序緩沖器和引退寄存器組;使用將來(lái)的文件、歷史緩沖器和引退寄存器組;使用寄存器映射和寄存器池等等)。引退單元2554和物理寄存器組單元2558耦合到執(zhí)行群集2560。
執(zhí)行群集2560包括一個(gè)或多個(gè)執(zhí)行單元2562的集合和一個(gè)或多個(gè)存儲(chǔ)器訪問(wèn)單元2564的集合。執(zhí)行單元2562可以對(duì)各種類型的數(shù)據(jù)(例如,標(biāo)量浮點(diǎn)、打包整數(shù)、打包浮點(diǎn)、向量整型、向量浮點(diǎn))執(zhí)行各種操作(例如,移位、加法、減法、乘法)。盡管一些實(shí)施例可以包括專用于特定功能或功能集合的多個(gè)執(zhí)行單元,但其他實(shí)施例可包括全部執(zhí)行所有功能的僅一個(gè)執(zhí)行單元或多個(gè)執(zhí)行單元。
調(diào)度器單元2556、物理寄存器組單元2558和執(zhí)行群集2560被示為可能有多個(gè),因?yàn)槟承?shí)施例為某些類型的數(shù)據(jù)/操作創(chuàng)建分開(kāi)的流水線(例如,標(biāo)量整型流水線、標(biāo)量浮點(diǎn)/打包整型/打包浮點(diǎn)/向量整型/向量浮點(diǎn)流水線,和/或各自具有其自己的調(diào)度器單元、物理寄存器組單元和/或執(zhí)行群集的存儲(chǔ)器訪問(wèn)流水線——以及在分開(kāi)的存儲(chǔ)器訪問(wèn)流水線的情況下,實(shí)現(xiàn)其中僅該流水線的執(zhí)行群集具有存儲(chǔ)器訪問(wèn)單元2564的某些實(shí)施例)。還應(yīng)當(dāng)理解,在使用分開(kāi)的流水線的情況下,這些流水線中的一個(gè)或多個(gè)可以為無(wú)序發(fā)布/執(zhí)行,并且其余流水線可以為有序發(fā)布/執(zhí)行。
存儲(chǔ)器訪問(wèn)單元2564的集合耦合到存儲(chǔ)器單元2570,該存儲(chǔ)器單元包括耦合到數(shù)據(jù)高速緩存單元2574的數(shù)據(jù)TLB單元2572,其中數(shù)據(jù)高速緩存單元耦合到二級(jí)(L2)高速緩存單元2576。在一個(gè)示例性實(shí)施例中,存儲(chǔ)器訪問(wèn)單元2564可包括加載單元、存儲(chǔ)地址單元和存儲(chǔ)數(shù)據(jù)單元,其中的每一個(gè)均耦合至存儲(chǔ)器單元2570中的數(shù)據(jù)TLB單元2572。指令高速緩存單元2534還耦合到存儲(chǔ)器單元2570中的二級(jí)(L2)高速緩存單元2576。L2高速緩存單元2576耦合到一個(gè)或多個(gè)其他級(jí)的高速緩存,并最終耦合到主存儲(chǔ)器。
作為示例,示例性寄存器重命名的、無(wú)序發(fā)布/執(zhí)行核架構(gòu)可以如下實(shí)現(xiàn)流水線2500:1)指令取出2538執(zhí)行取出和長(zhǎng)度解碼級(jí)2502和2504;2)解碼單元2540執(zhí)行解碼級(jí)2506;3)重命名/分配器單元2552執(zhí)行分配級(jí)2508和重命名級(jí)2510;4)調(diào)度器單元2556執(zhí)行調(diào)度級(jí)2512;5)物理寄存器組單元2558和存儲(chǔ)器單元2570執(zhí)行寄存器讀取/存儲(chǔ)器讀取級(jí)2514;執(zhí)行群集2560執(zhí)行執(zhí)行級(jí)2516;6)存儲(chǔ)器單元2570和物理寄存器組單元2558執(zhí)行寫回/存儲(chǔ)器寫入級(jí)2518;7)各單元可牽涉到異常處理級(jí)2522;以及8)引退單元2554和物理寄存器組單元2558執(zhí)行提交級(jí)2524。
核2590可支持一個(gè)或多個(gè)指令集(例如,x86指令集(具有與較新版本一起添加的一些擴(kuò)展);加利福尼亞州桑尼維爾市的MIPS技術(shù)公司的MIPS指令集;加利福尼州桑尼維爾市的ARM控股的ARM指令集(具有諸如NEON等可選附加擴(kuò)展)),其中包括本文中描述的各指令。在一個(gè)實(shí)施例中,核2590包括用于支持打包數(shù)據(jù)指令集擴(kuò)展(例如,AVX1、AVX2和/或先前描述的一些形式的一般向量友好指令格式(U=0和/或U=1))的邏輯,從而允許很多多媒體應(yīng)用使用的操作能夠使用打包數(shù)據(jù)來(lái)執(zhí)行。
應(yīng)當(dāng)理解,核可支持多線程化(執(zhí)行兩個(gè)或更多個(gè)并行的操作或線程的集合),并且可以按各種方式來(lái)完成該多線程化,此各種方式包括時(shí)分多線程化、同步多線程化(其中單個(gè)物理核為物理核正在同步多線程化的各線程中的每一個(gè)線程提供邏輯核)、或其組合(例如,時(shí)分取出和解碼以及此后諸如用超線程化技術(shù)來(lái)同步多線程化)。
盡管在無(wú)序執(zhí)行的上下文中描述了寄存器重命名,但應(yīng)當(dāng)理解,可以在有序架構(gòu)中使用寄存器重命名。盡管所示出的處理器的實(shí)施例還包括分開(kāi)的指令和數(shù)據(jù)高速緩存單元2534/2574以及共享L2高速緩存單元2576,但替代實(shí)施例可以具有用于指令和數(shù)據(jù)兩者的單個(gè)內(nèi)部高速緩存,諸如例如一級(jí)(L1)內(nèi)部高速緩存或多個(gè)級(jí)別的內(nèi)部高速緩存。在一些實(shí)施例中,該系統(tǒng)可包括內(nèi)部高速緩存和在核和/或處理器外部的外部高速緩存的組合?;蛘撸懈咚倬彺娑伎梢栽诤撕?或處理器的外部。
圖14A和圖14B示出更具體的示例性有序核架構(gòu)的框圖,該核可以是芯片中的若干邏輯塊(包括具有相同類型和/或不同類型的其他核)中的一個(gè)。根據(jù)應(yīng)用,這些邏輯塊通過(guò)高帶寬的互連網(wǎng)絡(luò)(例如,環(huán)形網(wǎng)絡(luò))與一些固定的功能邏輯、存儲(chǔ)器I/O接口和其它必要的I/O邏輯通信。
圖14A是根據(jù)本發(fā)明的各實(shí)施例的單個(gè)處理器核以及它與管芯上互連網(wǎng)絡(luò)2602的連接及其二級(jí)(L2)高速緩存的本地子集2604的框圖。在一個(gè)實(shí)施例中,指令解碼器2600支持具有打包數(shù)據(jù)指令集擴(kuò)展的x86指令集。L1高速緩存2606允許對(duì)進(jìn)入標(biāo)量和向量單元中的高速緩存存儲(chǔ)器的低等待時(shí)間訪問(wèn)。盡管在一個(gè)實(shí)施例中(為了簡(jiǎn)化設(shè)計(jì)),標(biāo)量單元2608和向量單元2610使用分開(kāi)的寄存器集合(分別為標(biāo)量寄存器2612和向量寄存器2614),并且在這些寄存器之間轉(zhuǎn)移的數(shù)據(jù)被寫入到存儲(chǔ)器并隨后從一級(jí)(L1)高速緩存2606讀回,但是本發(fā)明的替代實(shí)施例可以使用不同的方法(例如使用單個(gè)寄存器集合或包括允許數(shù)據(jù)在這兩個(gè)寄存器組之間傳輸而無(wú)需被寫入和讀回的通信路徑)。
L2高速緩存的本地子集2604是全局L2高速緩存的一部分,該全局L2高速緩存被劃分成多個(gè)分開(kāi)的本地子集,即每個(gè)處理器核一個(gè)本地子集。每個(gè)處理器核具有到其自己的L2高速緩存2604的本地子集的直接訪問(wèn)路徑。被處理器核讀出的數(shù)據(jù)被存儲(chǔ)在其L2高速緩存子集2604中,并且可以與其他處理器核訪問(wèn)其自己的本地L2高速緩存子集并行地被快速訪問(wèn)。被處理器核寫入的數(shù)據(jù)被存儲(chǔ)在其自己的L2高速緩存子集2604中,并在必要的情況下從其它子集清除。環(huán)形網(wǎng)絡(luò)確保共享數(shù)據(jù)的一致性。環(huán)形網(wǎng)絡(luò)是雙向的,以允許諸如處理器核、L2高速緩存和其它邏輯塊之類的代理在芯片內(nèi)彼此通信。每個(gè)環(huán)形數(shù)據(jù)路徑為每個(gè)方向1012位寬。
圖14B是根據(jù)本發(fā)明的各實(shí)施例的圖14A中的處理器核的一部分的展開(kāi)圖。圖14B包括L1高速緩存2604的L1數(shù)據(jù)高速緩存2606A部分,以及關(guān)于向量單元2610和向量寄存器2614的更多細(xì)節(jié)。具體地說(shuō),向量單元2610是16寬向量處理單元(VPU)(見(jiàn)16寬ALU 2628),該單元執(zhí)行整型、單精度浮點(diǎn)以及雙精度浮點(diǎn)指令中的一個(gè)或多個(gè)。該VPU通過(guò)混合單元2620支持對(duì)寄存器輸入的混合、通過(guò)數(shù)值轉(zhuǎn)換單元2622A-B支持?jǐn)?shù)值轉(zhuǎn)換、并通過(guò)復(fù)制單元2624支持對(duì)存儲(chǔ)器輸入的復(fù)制。寫掩碼寄存器2626允許斷言所得的向量寫入。
圖15是根據(jù)本發(fā)明的實(shí)施例的處理器2700的框圖,該處理器可具有一個(gè)以上的核,可具有集成的存儲(chǔ)器控制器,且可具有集成的圖形。圖15的實(shí)線框示出了處理器2700,處理器2700具有單個(gè)核心2702A、系統(tǒng)代理(agent)2710、一組一個(gè)或多個(gè)總線控制器單元2716,而可選附加的虛線框示出了替代的處理器2700,其具有多個(gè)核心2702A-N、系統(tǒng)代理單元2710中的一組一個(gè)或多個(gè)集成存儲(chǔ)器控制器單元2714以及專用邏輯2708。
因此,處理器2700的不同實(shí)現(xiàn)可包括:1)CPU,其中專用邏輯2708是集成圖形和/或科學(xué)(吞吐量)邏輯(其可包括一個(gè)或多個(gè)核),并且核2702A-N是一個(gè)或多個(gè)通用核(例如,通用的有序核、通用的無(wú)序核、這兩者的組合);2)協(xié)處理器,其中核2702A-N是旨在主要用于圖形和/或科學(xué)(吞吐量)的多個(gè)專用核;以及3)協(xié)處理器,其中核2702A-N是多個(gè)通用有序核。因此,處理器2700可以是通用處理器、協(xié)處理器或?qū)S锰幚砥?,諸如例如網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU(通用圖形處理單元)、高吞吐量的集成眾核(MIC)協(xié)處理器(包括30個(gè)或更多核)、或嵌入式處理器等。該處理器可以被實(shí)現(xiàn)在一個(gè)或多個(gè)芯片上。處理器2700可以是一個(gè)或多個(gè)襯底的一部分,和/或可以使用諸如例如BiCMOS、CMOS或NMOS等的多個(gè)加工技術(shù)中的任何一個(gè)技術(shù)將處理器1200實(shí)現(xiàn)在一個(gè)或多個(gè)襯底上。
存儲(chǔ)器層次結(jié)構(gòu)包括在各核內(nèi)的一個(gè)或多個(gè)級(jí)別的高速緩存、一個(gè)或多個(gè)共享高速緩存單元2706的集合、以及耦合至集成存儲(chǔ)器控制器單元2714的集合的外部存儲(chǔ)器(未示出)。該共享高速緩存單元2706的集合可以包括一個(gè)或多個(gè)中間級(jí)高速緩存,諸如二級(jí)(L2)、三級(jí)(L3)、四級(jí)(L4)或其他級(jí)別的高速緩存、末級(jí)高速緩存(LLC)、和/或其組合。盡管在一個(gè)實(shí)施例中,基于環(huán)的互連單元2712將集成圖形邏輯2708、共享高速緩存單元2706的集合以及系統(tǒng)代理單元2710/集成存儲(chǔ)器控制器單元2714互連,但替代實(shí)施例可使用任何數(shù)量的公知技術(shù)來(lái)將這些單元互連。在一個(gè)實(shí)施例中,可以維護(hù)一個(gè)或多個(gè)高速緩存單元2706和核2702-A-N之間的一致性(coherency)。
在一些實(shí)施例中,核2702A-N中的一個(gè)或多個(gè)核能夠多線程化。系統(tǒng)代理2710包括協(xié)調(diào)和操作核2702A-N的那些組件。系統(tǒng)代理單元2710可包括例如功率控制單元(PCU)和顯示單元。PCU可以是或包括用于調(diào)整核2702A-N和集成圖形邏輯2708的功率狀態(tài)所需的邏輯和組件。顯示單元用于驅(qū)動(dòng)一個(gè)或多個(gè)外部連接的顯示器。
核2702A-N在架構(gòu)指令集方面可以是同構(gòu)的或異構(gòu)的;即,這些核2702A-N中的兩個(gè)或更多個(gè)核可能能夠執(zhí)行相同的指令集,而其他核可能能夠執(zhí)行該指令集的僅僅子集或不同的指令集。
圖16至圖20是示例性計(jì)算機(jī)架構(gòu)的框圖。本領(lǐng)域已知的對(duì)膝上型設(shè)備、臺(tái)式機(jī)、手持PC、個(gè)人數(shù)字助理、工程工作站、服務(wù)器、網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)集線器、交換機(jī)、嵌入式處理器、數(shù)字信號(hào)處理器(DSP)、圖形設(shè)備、視頻游戲設(shè)備、機(jī)頂盒、微控制器、蜂窩電話、便攜式媒體播放器、手持設(shè)備以及各種其他電子設(shè)備的其他系統(tǒng)設(shè)計(jì)和配置也是合適的。一般地,能夠包含本文中所公開(kāi)的處理器和/或其它執(zhí)行邏輯的多個(gè)系統(tǒng)和電子設(shè)備一般都是合適的。
現(xiàn)在參考圖16,所示出的是根據(jù)本發(fā)明一實(shí)施例的系統(tǒng)2800的框圖。系統(tǒng)2800可以包括一個(gè)或多個(gè)處理器2810、2815,這些處理器耦合到控制器中樞2820。在一個(gè)實(shí)施例中,控制器中樞2820包括圖形存儲(chǔ)器控制器中樞(GMCH)2890和輸入/輸出中樞(IOH)2850(其可以在分開(kāi)的芯片上);GMCH 2890包括存儲(chǔ)器和圖形控制器,存儲(chǔ)器2840和協(xié)處理器2845耦合到該存儲(chǔ)器和圖形控制器;IOH 2850將輸入/輸出(I/O)設(shè)備2860耦合到GMCH2890?;蛘?,存儲(chǔ)器和圖形控制中的一個(gè)或兩個(gè)集成在處理器內(nèi)(如本文所述),存儲(chǔ)器2840和協(xié)處理器2845直接耦合到處理器2810和在單個(gè)芯片中具有IOH2850的控制器中樞2820。
附加處理器2815的任選性質(zhì)用虛線表示在圖16中。每一處理器2810、2815可包括本文中描述的處理核中的一個(gè)或多個(gè),并且可以是處理器2700的某一版本。
存儲(chǔ)器2840可以是例如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、相變存儲(chǔ)器(PCM)或這兩者的組合。對(duì)于至少一個(gè)實(shí)施例,控制器中樞2820經(jīng)由諸如前端總線(FSB)之類的多分支總線、諸如快速通道互連(QPI)之類的點(diǎn)對(duì)點(diǎn)接口、或者類似的連接2895與處理器2810、2815進(jìn)行通信。
在一個(gè)實(shí)施例中,協(xié)處理器2845是專用處理器,諸如例如高吞吐量MIC處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU、或嵌入式處理器等等。在一個(gè)實(shí)施例中,控制器中樞2820可以包括集成圖形加速器。
按照包括體系結(jié)構(gòu)、微體系結(jié)構(gòu)、熱、功耗特征等等優(yōu)點(diǎn)的度量譜,物理資源2810、2815之間存在各種差別。
在一個(gè)實(shí)施例中,處理器2810執(zhí)行控制一般類型的數(shù)據(jù)處理操作的指令。協(xié)處理器指令可嵌入在這些指令中。處理器2810將這些協(xié)處理器指令識(shí)別為應(yīng)當(dāng)由附連的協(xié)處理器2845執(zhí)行的類型。因此,處理器2810在協(xié)處理器總線或者其他互連上將這些協(xié)處理器指令(或者表示協(xié)處理器指令的控制信號(hào))發(fā)布到協(xié)處理器2845。協(xié)處理器2845接受并執(zhí)行所接收的協(xié)處理器指令。
現(xiàn)在參考圖17,示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的第一更專用的示例性系統(tǒng)2900的方框圖。如圖17所示,多處理器系統(tǒng)2900是點(diǎn)對(duì)點(diǎn)互連系統(tǒng),并包括經(jīng)由點(diǎn)對(duì)點(diǎn)互連2950耦合的第一處理器2970和第二處理器2980。處理器2970和2980中的每一個(gè)都可以是處理器2700的某一版本。在本發(fā)明的一個(gè)實(shí)施例中,處理器2970和2980分別是處理器2810和2815,而協(xié)處理器2938是協(xié)處理器2845。在另一實(shí)施例中,處理器2970和2980分別是處理器2810和協(xié)處理器2845。
處理器2970和2980被示為分別包括集成存儲(chǔ)器控制器(IMC)單元2972和2982。處理器2970還包括作為其總線控制器單元的一部分的點(diǎn)對(duì)點(diǎn)(P-P)接口2976和2978;類似地,第二處理器2980包括點(diǎn)對(duì)點(diǎn)接口2986和2988。處理器2970、2980可以使用點(diǎn)對(duì)點(diǎn)(P-P)電路2978、2988經(jīng)由P-P接口2950來(lái)交換信息。如圖17所示,IMC 2972和2982將各處理器耦合至相應(yīng)的存儲(chǔ)器,即存儲(chǔ)器2932和存儲(chǔ)器2934,這些存儲(chǔ)器可以是本地附連至相應(yīng)的處理器的主存儲(chǔ)器的部分。
處理器2970、2980可各自經(jīng)由使用點(diǎn)對(duì)點(diǎn)接口電路2976、2994、2986、2998的各個(gè)P-P接口2952、2954與芯片組2990交換信息。芯片組2990可以可選地經(jīng)由高性能接口2939與協(xié)處理器2938交換信息。在一個(gè)實(shí)施例中,協(xié)處理器2938是專用處理器,諸如例如高吞吐量MIC處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU、或嵌入式處理器等等。
共享高速緩存(未示出)可以被包括在任一處理器之內(nèi),或被包括在兩個(gè)處理器外部但仍經(jīng)由P-P互連與這些處理器連接,從而如果將某處理器置于低功率模式時(shí),可將任一處理器或兩個(gè)處理器的本地高速緩存信息存儲(chǔ)在該共享高速緩存中。芯片組2990可經(jīng)由接口2996耦合至第一總線2916。在一個(gè)實(shí)施例中,第一總線2916可以是外圍組件互連(PCI)總線,或諸如PCI Express總線或其它第三代I/O互連總線之類的總線,但本發(fā)明的范圍并不受此限制。
如圖17所示,各種I/O設(shè)備2914可以連同總線橋2918耦合到第一總線2916,總線橋?qū)⒌谝豢偩€2916耦合至第二總線2920。在一個(gè)實(shí)施例中,諸如協(xié)處理器、高吞吐量MIC處理器、GPGPU的處理器、加速器(諸如例如圖形加速器或數(shù)字信號(hào)處理器(DSP)單元)、現(xiàn)場(chǎng)可編程門陣列或任何其他處理器的一個(gè)或多個(gè)附加處理器2915耦合到第一總線2916。在一個(gè)實(shí)施例中,第二總線2920可以是低引腳計(jì)數(shù)(LPC)總線。各種設(shè)備可以被耦合至第二總線2920,在一個(gè)實(shí)施例中這些設(shè)備包括例如鍵盤/鼠標(biāo)2922、通信設(shè)備2927以及諸如可包括指令/代碼和數(shù)據(jù)2930的盤驅(qū)動(dòng)器或其它大容量存儲(chǔ)設(shè)備的存儲(chǔ)單元2928。此外,音頻I/O 2924可以被耦合至第二總線2920。注意,其它架構(gòu)是可能的。例如,代替圖17的點(diǎn)對(duì)點(diǎn)架構(gòu),系統(tǒng)可以實(shí)現(xiàn)多分支總線或其它這類架構(gòu)。
現(xiàn)在參考圖18,示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的更專用的第二示例性系統(tǒng)3000的方框圖。圖18和19中的類似元件使用類似附圖標(biāo)記,且在圖18中省略了圖17的某些方面以避免混淆圖18的其它方面。圖18示出處理器2970、2980可分別包括集成存儲(chǔ)器和I/O控制邏輯(“CL”)2972和2982。因此,CL 2972、2982包括集成存儲(chǔ)器控制器單元并包括I/O控制邏輯。圖18不僅示出存儲(chǔ)器2932、2934耦合至CL 2972、2982,而且還示出I/O設(shè)備3014也耦合至控制邏輯2972、2982。傳統(tǒng)I/O設(shè)備3015被耦合至芯片組2990。
現(xiàn)在參照?qǐng)D19,所示出的是根據(jù)本發(fā)明一個(gè)實(shí)施例的SoC 3100的框圖。在圖15中,相似的部件具有同樣的附圖標(biāo)記。另外,虛線框是更先進(jìn)的SoC的可選特征。在圖19中,互連單元3102被耦合至:應(yīng)用處理器3110,該應(yīng)用處理器包括一個(gè)或多個(gè)核202A-N的集合以及共享高速緩存單元2706;系統(tǒng)代理單元2710;總線控制器單元2716;集成存儲(chǔ)器控制器單元2714;一組或一個(gè)或多個(gè)協(xié)處理器3120,其可包括集成圖形邏輯、圖像處理器、音頻處理器和視頻處理器;靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)單元3130;直接存儲(chǔ)器存取(DMA)單元3132;以及用于耦合至一個(gè)或多個(gè)外部顯示器的顯示單元3140。在一個(gè)實(shí)施例中,協(xié)處理器3120包括專用處理器,諸如例如網(wǎng)絡(luò)或通信處理器、壓縮引擎、GPGPU、高吞吐量MIC處理器、或嵌入式處理器等等。
本文公開(kāi)的機(jī)制的各實(shí)施例可以被實(shí)現(xiàn)在硬件、軟件、固件或這些實(shí)現(xiàn)方法的組合中。本發(fā)明的實(shí)施例可實(shí)現(xiàn)為在可編程系統(tǒng)上執(zhí)行的計(jì)算機(jī)程序或程序代碼,該可編程系統(tǒng)包括至少一個(gè)處理器、存儲(chǔ)系統(tǒng)(包括易失性和非易失性存儲(chǔ)器和/或存儲(chǔ)元件)、至少一個(gè)輸入設(shè)備以及至少一個(gè)輸出設(shè)備。
可將程序代碼(諸如圖17中示出的代碼2930)應(yīng)用于輸入指令,以執(zhí)行本文描述的各功能并生成輸出信息。可以按已知方式將輸出信息應(yīng)用于一個(gè)或多個(gè)輸出設(shè)備。為了本申請(qǐng)的目的,處理系統(tǒng)包括具有諸如例如數(shù)字信號(hào)處理器(DSP)、微控制器、專用集成電路(ASIC)或微處理器之類的處理器的任何系統(tǒng)。
程序代碼可以用高級(jí)程序化語(yǔ)言或面向?qū)ο蟮木幊陶Z(yǔ)言來(lái)實(shí)現(xiàn),以便與處理系統(tǒng)通信。在需要時(shí),也可用匯編語(yǔ)言或機(jī)器語(yǔ)言來(lái)實(shí)現(xiàn)程序代碼。事實(shí)上,本文中描述的機(jī)制不限于任何特定編程語(yǔ)言的范圍。在任一情形下,該語(yǔ)言可以是編譯語(yǔ)言或解釋語(yǔ)言。
至少一個(gè)實(shí)施例的一個(gè)或多個(gè)方面可以由存儲(chǔ)在機(jī)器可讀介質(zhì)上的表示性指令來(lái)實(shí)現(xiàn),指令表示處理器中的各種邏輯,指令在被機(jī)器讀取時(shí)使得該機(jī)器制作用于執(zhí)行本文所述的技術(shù)的邏輯。被稱為“IP核”的這些表示可以被存儲(chǔ)在有形的機(jī)器可讀介質(zhì)上,并被提供給多個(gè)客戶或生產(chǎn)設(shè)施以加載到實(shí)際制造該邏輯或處理器的制造機(jī)器中。
這樣的機(jī)器可讀存儲(chǔ)介質(zhì)可以包括但不限于通過(guò)機(jī)器或設(shè)備制造或形成的物品的非瞬態(tài)的有形安排,其包括存儲(chǔ)介質(zhì),諸如:硬盤;任何其它類型的盤,包括軟盤、光盤、緊致盤只讀存儲(chǔ)器(CD-ROM)、緊致盤可重寫(CD-RW)以及磁光盤;半導(dǎo)體器件,例如只讀存儲(chǔ)器(ROM)、諸如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)和靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)之類的隨機(jī)存取存儲(chǔ)器(RAM)、可擦除可編程只讀存儲(chǔ)器(EPROM)、閃存、電可擦除可編程只讀存儲(chǔ)器(EEPROM);相變存儲(chǔ)器(PCM);磁卡或光卡;或適于存儲(chǔ)電子指令的任何其它類型的介質(zhì)。
因此,本發(fā)明的各實(shí)施例還包括非瞬態(tài)的有形機(jī)器可讀介質(zhì),該介質(zhì)包含指令或包含設(shè)計(jì)數(shù)據(jù),諸如硬件描述語(yǔ)言(HDL),它定義本文中描述的結(jié)構(gòu)、電路、裝置、處理器和/或系統(tǒng)特征。這些實(shí)施例也被稱為程序產(chǎn)品。
在一些情況下,指令轉(zhuǎn)換器可用來(lái)將指令從源指令集轉(zhuǎn)換至目標(biāo)指令集。例如,指令轉(zhuǎn)換器可以變換(例如使用靜態(tài)二進(jìn)制變換、包括動(dòng)態(tài)編譯的動(dòng)態(tài)二進(jìn)制變換)、變形、仿真或以其它方式將指令轉(zhuǎn)換成將由核來(lái)處理的一個(gè)或多個(gè)其它指令。指令轉(zhuǎn)換器可以用軟件、硬件、固件、或其組合實(shí)現(xiàn)。指令轉(zhuǎn)換器可以在處理器上、在處理器外、或者部分在處理器上且部分在處理器外。
圖20是根據(jù)本發(fā)明的實(shí)施例的對(duì)比使用軟件指令變換器將源指令集中的二進(jìn)制指令變換成目標(biāo)指令集中的二進(jìn)制指令的框圖。在所示的實(shí)施例中,指令轉(zhuǎn)換器是軟件指令轉(zhuǎn)換器,但作為替代,該指令轉(zhuǎn)換器可以用軟件、固件、硬件或其各種組合來(lái)實(shí)現(xiàn)。圖20示出可以使用x86編譯器3204來(lái)編譯利用高級(jí)語(yǔ)言3202的程序,以生成可以由具有至少一個(gè)x86指令集核的處理器3216原生執(zhí)行的x86二進(jìn)制代碼3206。具有至少一個(gè)x86指令集核的處理器3216表示任何處理器,這些處理器能通過(guò)兼容地執(zhí)行或以其他方式處理以下內(nèi)容來(lái)執(zhí)行與具有至少一個(gè)x86指令集核的英特爾處理器基本相同的功能:1)英特爾x86指令集核的指令集的本質(zhì)部分,或2)目標(biāo)為在具有至少一個(gè)x86指令集核的英特爾處理器上運(yùn)行的應(yīng)用或其它程序的目標(biāo)代碼版本,以便取得與具有至少一個(gè)x86指令集核的英特爾處理器基本相同的結(jié)果。x86編譯器3204表示用于生成x86二進(jìn)制代碼3206(例如,目標(biāo)代碼)的編譯器,該二進(jìn)制代碼3206可通過(guò)或不通過(guò)附加的鏈接處理在具有至少一個(gè)x86指令集核的處理器3216上執(zhí)行。類似地,圖20示出可以使用替代的指令集編譯器3208來(lái)編譯利用高級(jí)語(yǔ)言3202的程序,以生成可以由不具有至少一個(gè)x86指令集核的處理器3214(例如具有執(zhí)行加利福尼亞州桑尼維爾市的MIPS技術(shù)公司的MIPS指令集、和/或執(zhí)行加利福尼亞州桑尼維爾市的ARM控股公司的ARM指令集的核的處理器)原生執(zhí)行的替代指令集二進(jìn)制代碼3210。指令轉(zhuǎn)換器3212被用來(lái)將x86二進(jìn)制代碼3206轉(zhuǎn)換成可以由不具有x86指令集核的處理器3214原生執(zhí)行的代碼。該轉(zhuǎn)換后的代碼不大可能與替代性指令集二進(jìn)制代碼3210相同,因?yàn)槟軌蜻@樣做的指令轉(zhuǎn)換器難以制造;然而,轉(zhuǎn)換后的代碼將完成一般操作并由來(lái)自替代指令集的指令構(gòu)成。因此,指令轉(zhuǎn)換器3212通過(guò)仿真、模擬或任何其它過(guò)程來(lái)表示允許不具有x86指令集處理器或核的處理器或其它電子設(shè)備執(zhí)行x86二進(jìn)制代碼3206的軟件、固件、硬件或其組合。
前面的詳細(xì)描述的某些部分以算法、和/或?qū)τ?jì)算機(jī)存儲(chǔ)器內(nèi)的數(shù)據(jù)位的操作的符號(hào)表示法的形式存在。這些算法描述和表示法是那些精通數(shù)據(jù)處理技術(shù)的人所使用的最有效地將他們的工作的實(shí)質(zhì)傳遞到精通技術(shù)的其他人的方式。算法,這里一般是指導(dǎo)致所希望的結(jié)果的操作的獨(dú)立的序列。操作是那些需要對(duì)物理量進(jìn)行物理操縱的操作。
然而,應(yīng)該記住,所有這些和/或類似的術(shù)語(yǔ)將與適當(dāng)?shù)奈锢砹筷P(guān)聯(lián),僅僅是應(yīng)用于這些量的方便的標(biāo)記。除非特別聲明,從上文的討論中顯而易見(jiàn)地看出,應(yīng)該理解,在整個(gè)本說(shuō)明書中,利用諸如在下面的權(quán)利要求中所闡述的術(shù)語(yǔ)的討論,引用了計(jì)算機(jī)系統(tǒng),和/或類似的電子計(jì)算設(shè)備的動(dòng)作和/或進(jìn)程,它們操縱和/或轉(zhuǎn)換表示為計(jì)算機(jī)系統(tǒng)的寄存器和存儲(chǔ)器內(nèi)的物理(電子)量的數(shù)據(jù),將這些數(shù)據(jù)轉(zhuǎn)換為類似地表示為計(jì)算機(jī)系統(tǒng)存儲(chǔ)器或寄存器和/或其他這樣的信息存儲(chǔ)器、傳輸和/或顯示設(shè)備內(nèi)的物理量的其他數(shù)據(jù)。
圖形所示出的技術(shù)可以使用在一個(gè)或多個(gè)電子設(shè)備上存儲(chǔ)和執(zhí)行的代碼和數(shù)據(jù)來(lái)實(shí)現(xiàn)。這樣的電子設(shè)備使用計(jì)算機(jī)可讀介質(zhì),諸如非瞬時(shí)的計(jì)算機(jī)可讀取的存儲(chǔ)介質(zhì)(例如,磁盤;光盤;隨機(jī)存取存儲(chǔ)器;只讀存儲(chǔ)器;閃存設(shè)備;相變存儲(chǔ)器)和瞬時(shí)的計(jì)算機(jī)可讀取的傳輸介質(zhì)(例如,電氣,光學(xué),聲音或其他形式的傳播的信號(hào)——諸如載波,紅外信號(hào)、數(shù)字信號(hào)等等),存儲(chǔ)和傳遞(內(nèi)部和/或與其他電子設(shè)備,通過(guò)網(wǎng)絡(luò))代碼和數(shù)據(jù)。
前面的圖形中所描繪的進(jìn)程或方法可以通過(guò)包括硬件(例如,電路、專用邏輯等等)、固件、軟件(例如,在非瞬時(shí)的計(jì)算機(jī)可讀介質(zhì)上實(shí)現(xiàn)),或兩者的組合的處理邏輯來(lái)執(zhí)行。雖然上文是利用某些順序操作來(lái)描述進(jìn)程或方法的,但是,應(yīng)該理解,所描述的某些操作可以以不同的順序來(lái)執(zhí)行。此外,某些操作也可以并行地而并非按順序執(zhí)行。
在前述的說(shuō)明書中,參考其特定示例性實(shí)施例描述了本發(fā)明的各實(shí)施例。顯然,在不偏離如下面的權(quán)利要求所闡述的本發(fā)明的更廣泛的精神和范圍的情況下,可以作出各種修改。相應(yīng)地,說(shuō)明書和附圖應(yīng)被視為說(shuō)明性的,而不是限制性的。