專(zhuān)利名稱(chēng):執(zhí)行部分寬度壓縮數(shù)據(jù)指令的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及計(jì)算機(jī)系統(tǒng)領(lǐng)域。更具體地,本發(fā)明涉及用于由利用諸如SIMD技術(shù)的處理器高效地執(zhí)行諸如標(biāo)量壓縮數(shù)據(jù)指令等的部分寬度壓縮數(shù)據(jù)指令的方法與設(shè)備。
背景技術(shù):
諸如2D/3D圖形、圖像處理、視頻壓縮/解壓縮、話(huà)音識(shí)別算法與音頻處理等多媒體應(yīng)用通常要求在大量數(shù)據(jù)項(xiàng)上執(zhí)行相同的操作(稱(chēng)作“數(shù)據(jù)并行性”)。每種多媒體應(yīng)用通常實(shí)現(xiàn)需要若干諸如加(ADD)或乘(MULTIPLY)(以后稱(chēng)為MUL)等浮點(diǎn)或整數(shù)運(yùn)算的一種或多種算法。通過(guò)提供其執(zhí)行導(dǎo)致處理器并行地在多個(gè)數(shù)據(jù)項(xiàng)上執(zhí)行相同運(yùn)算的宏指令,諸如Pentium處理器體系結(jié)構(gòu)與MMxTM指令集等采用的單指令多數(shù)據(jù)(SIMD)技術(shù)已使多媒體應(yīng)用性能有了明顯的改進(jìn)(Pentium及MMxTM為Santa Clara,CA的Intel公司的注冊(cè)商標(biāo)或商標(biāo))。
SIMD技術(shù)特別適用于提供壓縮數(shù)據(jù)格式的系統(tǒng)。壓縮數(shù)據(jù)格式便是將寄存器中的位邏輯上分成若干固定大小的數(shù)據(jù)元素的一種數(shù)據(jù)格式,其中各元素表示獨(dú)立的值。例如,64位寄存器可分解成四個(gè)16位元素,每個(gè)表示獨(dú)立的16位值。然后,壓縮數(shù)據(jù)指令便可并行地分開(kāi)處理這些壓縮數(shù)據(jù)類(lèi)型中的每個(gè)元素。
參見(jiàn)圖1,其中示出了示例性壓縮數(shù)據(jù)指令。在這一示例中,壓縮加法指令(如SIMD ADD)將第一壓縮數(shù)據(jù)運(yùn)算數(shù)X與第二壓縮數(shù)據(jù)運(yùn)算數(shù)Y的對(duì)應(yīng)數(shù)據(jù)元素相加生成壓縮數(shù)據(jù)結(jié)果Z,即X0+Y0=Z0,X1+Y1=Z1,X2+Y2=Z2及X3+Y3=Z3。將許多數(shù)據(jù)元素壓縮到一個(gè)寄存器或存儲(chǔ)器單元中并采用并行硬件執(zhí)行使SIMD體系結(jié)構(gòu)一次能執(zhí)行多個(gè)操作,而得到明顯的性能改進(jìn)。例如,在這一示例中,在以前獲得單一結(jié)果所需的時(shí)間中可獲得四個(gè)獨(dú)立的結(jié)果。
雖然利用SIMD體系結(jié)構(gòu)實(shí)現(xiàn)的優(yōu)點(diǎn)是顯而易見(jiàn)的,仍存在著希望只對(duì)于壓縮數(shù)據(jù)元素的子集返回單個(gè)結(jié)果的情況。
發(fā)明內(nèi)容
描述了用于執(zhí)行部分寬度壓縮數(shù)據(jù)指令的方法與設(shè)備。按照本發(fā)明的一個(gè)方面,處理器包括多個(gè)寄存器、耦合到這多個(gè)寄存器上的寄存器重新命名單元、耦合到寄存器重新命名單元上的解碼器及耦合到該解碼器上的部分寬度執(zhí)行單元。該寄存器重新命名單元提供了體系結(jié)構(gòu)寄存器堆(register file)來(lái)存儲(chǔ)各包含多個(gè)數(shù)據(jù)元素的壓縮數(shù)據(jù)操作數(shù)。將解碼器配置成解碼其每個(gè)指定體系結(jié)構(gòu)寄存器堆中的一個(gè)或多個(gè)寄存器的第一與第二指令集。第一指令集中的各指令指定要在存儲(chǔ)在一個(gè)或多個(gè)指定的寄存器中的所有數(shù)據(jù)元素上執(zhí)行的操作。反之,第二指令集中的各指令指定只在存儲(chǔ)在一個(gè)或多個(gè)指定的寄存器中的數(shù)據(jù)元素子集上執(zhí)行的操作。將部分寬度執(zhí)行單元配置成執(zhí)行由第一或第二指令集之一指定的操作。
根據(jù)本發(fā)明的一個(gè)實(shí)施例,為了執(zhí)行第二指令集中的指令,處理器或其他設(shè)備可以包括解碼器來(lái)接收指定第一壓縮數(shù)據(jù)操作數(shù)和第二壓縮數(shù)據(jù)操作數(shù)的指令。該指令可以指定只對(duì)第一和第二壓縮數(shù)據(jù)操作數(shù)的相應(yīng)數(shù)據(jù)元素對(duì)的子集執(zhí)行的操作。該解碼器可以包括將該指令變換為包括第一微指令的一個(gè)或多個(gè)微指令的邏輯。該設(shè)備可以進(jìn)一步包括與解碼器相耦合的執(zhí)行單元,所述執(zhí)行單元可以接收利用第一微指令指定的第一和第二壓縮數(shù)據(jù)操作數(shù)的部分。所述執(zhí)行單元可以提供與第一微指令相關(guān)的結(jié)果給利用該指令指定的目的地。
根據(jù)本發(fā)明的一個(gè)實(shí)施例,一種方法可以包括接收指定第一壓縮數(shù)據(jù)操作數(shù)和第二壓縮數(shù)據(jù)操作數(shù)的指令。該指令可以指定只對(duì)第一和第二壓縮數(shù)據(jù)操作數(shù)的相應(yīng)數(shù)據(jù)元素對(duì)的子集執(zhí)行的操作??梢詫⒃撝噶钭儞Q為包括第一微指令的一個(gè)或多個(gè)微指令??梢允褂玫谝晃⒅噶钪唤邮盏谝缓偷诙嚎s數(shù)據(jù)操作數(shù)的一部分??梢酝ㄟ^(guò)處理第一和第二壓縮數(shù)據(jù)操作數(shù)的部分生成結(jié)果。并且,可以將該結(jié)果提供給利用該指令指定的目的地。
從附圖及詳細(xì)描述中,本發(fā)明的其它特征與優(yōu)點(diǎn)將是顯而易見(jiàn)的。
本發(fā)明是參照附圖中的圖以示例方式而非限制性方式描述的,附圖中相同的標(biāo)號(hào)指示相同的元素,在附圖中圖1示出將來(lái)自第一壓縮數(shù)據(jù)操作數(shù)與第二壓縮數(shù)據(jù)操作數(shù)的對(duì)應(yīng)數(shù)據(jù)元素一起相加的壓縮加法(ADD)指令。
圖2A為展示按照本發(fā)明的一個(gè)實(shí)施例的示例性計(jì)算機(jī)系統(tǒng)的簡(jiǎn)化方框圖。
圖2B為展示按照本發(fā)明的一個(gè)實(shí)施例的示例性邏輯寄存器組的簡(jiǎn)化方框圖。
圖2C為展示按照本發(fā)明的另一實(shí)施例的示例性邏輯寄存器組的簡(jiǎn)化方框圖。
圖3為展示按照本發(fā)明的一個(gè)實(shí)施例的指令執(zhí)行的流程圖。
圖4概念性地展示執(zhí)行按照本發(fā)明的各種實(shí)施例的部分寬度壓縮數(shù)據(jù)指令的結(jié)果。
圖5A概念性地展示用于執(zhí)行按照本發(fā)明的一個(gè)實(shí)施例的全寬度壓縮數(shù)據(jù)指令及部分寬度壓縮數(shù)據(jù)指令的電路。
圖5B概念性地展示用于執(zhí)行按照本發(fā)明的另一實(shí)施例的全寬度壓縮數(shù)據(jù)與部分寬度壓縮數(shù)據(jù)指令的電路。
圖5C概念性地展示用于執(zhí)行按照本發(fā)明的又一實(shí)施例的全寬度壓縮數(shù)據(jù)及部分寬度壓縮數(shù)據(jù)指令的電路。
圖6展示按照SIMD的示例性處理器實(shí)現(xiàn)的能分別作為四個(gè)獨(dú)立的加法(ADD)執(zhí)行單元與四個(gè)獨(dú)立的乘法(MUL)執(zhí)行單元操作的ADD執(zhí)行單元與MUL執(zhí)行單元。
圖7A-7B概念性地展示分別以“交錯(cuò)”方式執(zhí)行的全寬度壓縮數(shù)據(jù)操作與部分寬度壓縮數(shù)據(jù)操作。
圖8A概念性地展示在操作數(shù)的一半寬度上執(zhí)行操作的同時(shí)一次從邏輯寄存器中存取全寬度操作數(shù)的處理器內(nèi)的電路。
圖8B為進(jìn)一步展示圖8A的電路的定時(shí)圖。
圖9概念性地展示通過(guò)將宏指令轉(zhuǎn)換成各處理操作數(shù)的一部分全寬度的多條宏指令以“交錯(cuò)”方式在操作數(shù)上執(zhí)行操作的無(wú)次序的流水線(pipeline)的一個(gè)實(shí)施例。
圖10為進(jìn)一步展示圖9中描述的實(shí)施例的定時(shí)圖。
圖11為展示可采用來(lái)完成按照本發(fā)明的一個(gè)實(shí)施例的解碼處理的解碼邏輯的方框圖。
具體實(shí)施例方式
本文描述了用于執(zhí)行部分寬度壓縮數(shù)據(jù)指令的方法與設(shè)備。這里名詞“全寬度壓縮數(shù)據(jù)指令”意在指稱(chēng)在一個(gè)或多個(gè)壓縮數(shù)據(jù)操作數(shù)的所有數(shù)據(jù)元素上操作的壓縮數(shù)據(jù)指令(如SIMD指令)。反之,名詞“部分寬度壓縮數(shù)據(jù)指令”意在廣泛地指稱(chēng)被設(shè)計(jì)成只在一個(gè)或多個(gè)壓縮數(shù)據(jù)操作數(shù)的數(shù)據(jù)元素的子集上運(yùn)算并返回壓縮數(shù)據(jù)結(jié)果(到諸如壓縮數(shù)據(jù)寄存器堆)的壓縮數(shù)據(jù)指令。例如,標(biāo)量SIMD指令可能只需要壓縮數(shù)據(jù)操作數(shù)的最低有效對(duì)之間的操作結(jié)果。在這一示例中,壓縮數(shù)據(jù)結(jié)果的其余數(shù)據(jù)元素是忽略不計(jì)的,因?yàn)樗鼈儗?duì)標(biāo)量SIMD指令無(wú)意義(例如,其余數(shù)據(jù)元素是不關(guān)心的)。按照本發(fā)明的各種實(shí)施例,可以以這樣的方式來(lái)配置執(zhí)行單元,以便高效地容納全寬度壓縮數(shù)據(jù)指令(如SIMD指令)及部分寬度壓縮數(shù)據(jù)指令集(如標(biāo)量SIMD指令)兩者。
在下面的詳細(xì)描述中,為了說(shuō)明的目的,提出了許多特定細(xì)節(jié)以便提供對(duì)本發(fā)明的徹底理解。然而,對(duì)于本技術(shù)中的普通技術(shù)人員很明顯,不一定用這些特定細(xì)節(jié)來(lái)實(shí)踐本發(fā)明。在其它實(shí)例中,并未示出或以方框圖形式示出眾所周知的器件、結(jié)構(gòu)、接口及進(jìn)程。
部分寬度壓縮數(shù)據(jù)指令的合理性考慮到已為在單精度浮點(diǎn)數(shù)據(jù)、雙精度浮點(diǎn)數(shù)據(jù)及整數(shù)數(shù)據(jù)上采用標(biāo)量運(yùn)算的標(biāo)量體系結(jié)構(gòu)(如單指令單數(shù)據(jù)(SISD)體系結(jié)構(gòu))編寫(xiě)的軟件的數(shù)量,希望向開(kāi)發(fā)人員提供將他們的軟件移植到諸如SIMD體系結(jié)構(gòu)等支持壓縮數(shù)據(jù)指令的體系結(jié)構(gòu)上的選擇,而沒(méi)有必要改寫(xiě)他們的軟件與/或?qū)W習(xí)新的指令。通過(guò)提供部分寬度壓縮數(shù)據(jù)指令,簡(jiǎn)單的翻譯便能將老的標(biāo)量代碼變換成標(biāo)量壓縮數(shù)據(jù)代碼。例如,對(duì)于編譯程序非常容易從標(biāo)量代碼生成標(biāo)量SIMD指令。然后,隨著開(kāi)發(fā)人員理解能用SIMD指令優(yōu)化的他們的軟件部分,他們便可逐漸地利用壓縮數(shù)據(jù)指令。當(dāng)然采用SIMD技術(shù)的計(jì)算機(jī)系統(tǒng)可能也通過(guò)同樣支持SISD指令來(lái)保持向后兼容。然而,許多最近的體系結(jié)構(gòu)改進(jìn)及這里討論的其它因素有利于開(kāi)發(fā)人員過(guò)渡到并利用SIMD技術(shù),即使首先只采用標(biāo)量SIMD指令也如此。
提供部分寬度壓縮數(shù)據(jù)指令的另一合理性在于可通過(guò)只在全寬度運(yùn)算數(shù)的子集上操作可達(dá)到的許多好處,其中包含降低功耗、提高速率、簡(jiǎn)潔的異常模型及提高的存儲(chǔ)量。如下所示,根據(jù)用部分寬度壓縮數(shù)據(jù)指令提供的指示,通過(guò)有選擇地關(guān)閉對(duì)執(zhí)行當(dāng)前操作不必要的那些硬件單元可達(dá)到功率節(jié)省。
另一種不希望強(qiáng)制壓縮數(shù)據(jù)指令返回各對(duì)數(shù)據(jù)元素的單個(gè)結(jié)果的情況包含在提供部分寬度硬件的環(huán)境中的算術(shù)運(yùn)算。由于成本與/或印模(die)限制,通常不提供對(duì)諸如除法等某些算術(shù)運(yùn)算的全面支持。從其性質(zhì)上,即使在實(shí)現(xiàn)全寬度硬件(如執(zhí)行單元與數(shù)據(jù)元素之間的一一對(duì)應(yīng))時(shí),除法運(yùn)算也非常長(zhǎng)。因此,在提供部分寬度硬件的同時(shí)只支持全寬度壓縮數(shù)據(jù)運(yùn)算的環(huán)境中,等待時(shí)間變得甚至更長(zhǎng)。如下面進(jìn)一步所示,諸如部分寬度壓縮數(shù)據(jù)除法運(yùn)算等部分寬度壓縮數(shù)據(jù)運(yùn)算可有選擇地允許其運(yùn)算數(shù)的某些部分繞過(guò)除法硬件。以這一方法,只在壓縮數(shù)據(jù)運(yùn)算數(shù)中的數(shù)據(jù)元素的子集上運(yùn)算并不招致性能惡化。
此外,與外來(lái)數(shù)據(jù)元素一起產(chǎn)生的異??赡軐?dǎo)致對(duì)開(kāi)發(fā)人員的混淆與/或SISD與SIMD機(jī)器之間的不兼容性。因此,只為指令意欲在其上面操作的那些數(shù)據(jù)元素報(bào)告異常是有利的。部分寬度壓縮數(shù)據(jù)指令支持通過(guò)將異常條件的觸發(fā)限制到結(jié)合正在對(duì)其操作的數(shù)據(jù)元素引起的那些異常條件或有可能引起混淆或SISD與SIMD機(jī)器之間不兼容的外來(lái)數(shù)據(jù)元素所產(chǎn)生的異常條件來(lái)允許實(shí)現(xiàn)可預(yù)測(cè)異常模型。
最后,在作為執(zhí)行部分寬度壓縮數(shù)據(jù)操作的結(jié)果而不破壞目的地壓縮數(shù)據(jù)操作數(shù)部分的實(shí)施例中,部分寬度壓縮數(shù)據(jù)指令有效地提供用于存儲(chǔ)數(shù)據(jù)的附加寄存器空間。例如,如果正在壓縮數(shù)據(jù)操作數(shù)的低位部分上操作,可將數(shù)據(jù)存儲(chǔ)在高位部分中,反之亦然。
示例性計(jì)算機(jī)系統(tǒng)圖2A為按照本發(fā)明的一個(gè)實(shí)施例的示例性計(jì)算機(jī)系統(tǒng)的簡(jiǎn)化方框圖。在所描繪的實(shí)施例中,計(jì)算機(jī)系統(tǒng)200包含處理器205、存儲(chǔ)設(shè)備210及總線215。處理器205用總線215耦合在存儲(chǔ)設(shè)備上。此外,諸如鍵盤(pán)220及顯示器225等若干用戶(hù)輸入/輸出設(shè)備也耦合在總線215上。還可通過(guò)總線215將計(jì)算機(jī)系統(tǒng)200耦合在網(wǎng)絡(luò)230上。處理器205表示諸如CISC、RISC、VLIW或混合體系結(jié)構(gòu)等任何類(lèi)型體系結(jié)構(gòu)的中央處理單元。此外,處理器205可實(shí)現(xiàn)在一片或多片芯片上。存儲(chǔ)設(shè)備210表示一個(gè)或多個(gè)用于存儲(chǔ)數(shù)據(jù)的機(jī)構(gòu)。例如,存儲(chǔ)設(shè)備210可包含只讀存儲(chǔ)器(ROM)、隨機(jī)存取存儲(chǔ)器(RAM)、磁盤(pán)存儲(chǔ)媒體、光學(xué)存儲(chǔ)媒體、快速存儲(chǔ)設(shè)備與/或其它機(jī)器可讀的媒體??偩€215表示一條或多條總線(如AGP、PCI、ISA、X-Bus、EISA、VESA等)及橋接器(也稱(chēng)作總線控制器)。雖然這一實(shí)施例是相對(duì)于單處理器計(jì)算機(jī)系統(tǒng)描述的,應(yīng)理解本發(fā)明也可在多處理器計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)。此外雖然本實(shí)施例是相對(duì)于32位與64位計(jì)算機(jī)系統(tǒng)描述的,本發(fā)明不限于這些計(jì)算機(jī)系統(tǒng)。
圖2A附加示出處理器205包含指令集單元260。當(dāng)然,處理器205包含其它電路;然而,這種其它電路對(duì)理解本發(fā)明不是必要的。在任何情況中,指令集單元260包含硬件與/或固件來(lái)解碼與執(zhí)行一或多個(gè)指令集。在所描繪的實(shí)施例中,指令集單元260包含解碼/執(zhí)行單元275。解碼單元將處理器205接收的指令解碼成一或多條微指令。執(zhí)行單元響應(yīng)從解碼單元接收的微指令執(zhí)行適當(dāng)?shù)牟僮鳌=獯a單元可采用若干不同機(jī)構(gòu)實(shí)現(xiàn)(如查找表、硬件實(shí)現(xiàn)、PLA等)。
在本例中,解碼/執(zhí)行單元275示出為包含既擁有全寬度壓縮數(shù)據(jù)指令又擁有部分寬度壓縮數(shù)據(jù)指令的指令集280。這些壓縮數(shù)據(jù)指令在執(zhí)行時(shí)可導(dǎo)致處理器205去執(zhí)行全/部分寬度壓縮浮點(diǎn)運(yùn)算與/或全/部分寬度壓縮整數(shù)運(yùn)算。除了壓縮數(shù)據(jù)指令,指令集280可包含在現(xiàn)有微處理器中找得到的其它指令。作為示例,在一個(gè)實(shí)施例中處理器205支持與Intel 32位體系結(jié)構(gòu)(IA-32)與/或Intel 64位體系結(jié)構(gòu)(IA-64)兼容的指令集。
指令集單元260中還包含存儲(chǔ)器單元285。存儲(chǔ)器單元285可包含處理器205用來(lái)存儲(chǔ)包含浮點(diǎn)數(shù)據(jù)及壓縮浮點(diǎn)數(shù)據(jù)的信息的一或多組體系結(jié)構(gòu)寄存器(也稱(chēng)作邏輯寄存器)。此外,可包含其它邏輯寄存器用于存儲(chǔ)整數(shù)數(shù)據(jù)、壓縮整數(shù)數(shù)據(jù)、及諸如棧頂指示之類(lèi)各種控制數(shù)據(jù)。這里使用了名詞體系結(jié)構(gòu)寄存器與邏輯寄存器來(lái)指稱(chēng)指令指定包含單個(gè)操作數(shù)的存儲(chǔ)區(qū)的方式的概念。從而,邏輯寄存器可用任何數(shù)目的公知技術(shù)在硬件中實(shí)現(xiàn),包含專(zhuān)用的物理寄存器、利用寄存器重新命名機(jī)制(下面更詳細(xì)地描述)的一或多個(gè)動(dòng)態(tài)分配的物理寄存器等。在任何情況中,邏輯寄存器代表可用壓縮數(shù)據(jù)指令尋址的最小存儲(chǔ)單元。
在所描繪的實(shí)施例中,已在存儲(chǔ)設(shè)備210中存儲(chǔ)了操作系統(tǒng)235及壓縮數(shù)據(jù)例程240供計(jì)算機(jī)系統(tǒng)200執(zhí)行。壓縮數(shù)據(jù)例程240為可包含諸如標(biāo)量SIMD指令或SIMD指令等一或多條壓縮數(shù)據(jù)指令的指令序列,如下面進(jìn)一步討論的,存在著包含速度、功耗及異常處理在內(nèi)的這樣的情況,希望只在壓縮數(shù)據(jù)操作數(shù)或一對(duì)壓縮數(shù)據(jù)操作數(shù)中的數(shù)據(jù)元素的子集上執(zhí)行操作(或返回單個(gè)的結(jié)果),因此,處理器205能區(qū)分全寬度壓縮數(shù)據(jù)指令與部分寬度壓縮數(shù)據(jù)指令并相應(yīng)地執(zhí)行它們是有利的。
圖2B為展示按照本發(fā)明的一個(gè)實(shí)施例的示范性邏輯寄存器組的簡(jiǎn)化方框圖。在這一示例中,存儲(chǔ)器單元285包含多個(gè)標(biāo)量浮點(diǎn)寄存器291(標(biāo)量寄存器堆)及多個(gè)壓縮浮點(diǎn)寄存器292(壓縮數(shù)據(jù)寄存器堆)。在執(zhí)行浮點(diǎn)指令時(shí)可將標(biāo)量浮點(diǎn)寄存器291(如寄存器R0-R7)實(shí)現(xiàn)為棧訪問(wèn)的寄存器堆以便與為Intel體系結(jié)構(gòu)編寫(xiě)的現(xiàn)有軟件兼容。然而,在替代實(shí)施例中,可將寄存器291作為平面寄存器堆對(duì)待。在所描繪的實(shí)施例中,將各壓縮浮點(diǎn)寄存器(如XMM0-XMM7)實(shí)現(xiàn)為單一128位邏輯寄存器。然而,應(yīng)理解可采用更寬或更窄的寄存器來(lái)符合使用更多或更少數(shù)據(jù)元素或更大或更小數(shù)據(jù)元素的實(shí)現(xiàn)。此外,可提供更多或更少的壓縮浮點(diǎn)寄存器282。類(lèi)似于標(biāo)量浮點(diǎn)寄存器291,在執(zhí)行壓縮浮點(diǎn)指令時(shí)可將壓縮浮點(diǎn)寄存器292實(shí)現(xiàn)為棧訪問(wèn)的寄存器堆或平面寄存器堆。
圖2C為展示按照本發(fā)明的另一實(shí)施例的示范性邏輯寄存器組的簡(jiǎn)化方框圖。在這一示例中,存儲(chǔ)器單元285再一次包含多個(gè)標(biāo)量浮點(diǎn)寄存器291(標(biāo)量寄存器堆)及多個(gè)壓縮浮點(diǎn)寄存器292(壓縮數(shù)據(jù)寄存器堆)。然而,在所描繪的實(shí)施例中,將各壓縮浮點(diǎn)寄存器(如XMM0-XMM7)實(shí)現(xiàn)為高位293與低位寄存器294的對(duì)應(yīng)的對(duì)。如下面進(jìn)一步討論的,為了指令解碼的目的的而將壓縮浮點(diǎn)寄存器292的邏輯寄存器地址空間組織成使高位與低位寄存器對(duì)用單一的位區(qū)別是有利的。例如,XMM0-XMM7的高位與低位部分可用MSR來(lái)區(qū)分。最好,各壓縮浮點(diǎn)寄存器291寬到足以容納四個(gè)32位單精度浮點(diǎn)數(shù)據(jù)元素。然而,如上所述,可采用更寬或更窄的寄存器來(lái)符合使用更多或更少數(shù)據(jù)元素或更大或更小數(shù)據(jù)元素的實(shí)現(xiàn)。此外,雖然本例中的邏輯壓縮浮點(diǎn)寄存器292各包括對(duì)應(yīng)的64位寄存器對(duì),在替代實(shí)施例中各壓縮浮點(diǎn)寄存器可包括任何數(shù)目的寄存器。
指令執(zhí)行概述已描述了可在其中實(shí)現(xiàn)本發(fā)明的一個(gè)實(shí)施例的示范性計(jì)算機(jī)系統(tǒng),下面描述指令執(zhí)行。
圖3為展示按照本發(fā)明的一個(gè)實(shí)施例的指令執(zhí)行的流程圖。在步驟310,處理器205接收指令。在步驟320,根據(jù)指令的類(lèi)型,部分寬度壓縮數(shù)據(jù)指令(如標(biāo)量SIMD指令)或全寬度壓縮數(shù)據(jù)指令(如SIMD指令),處理以步驟330或340繼續(xù)。通常在解碼單元中指令的類(lèi)型是根據(jù)包含在指令內(nèi)的信息確定的。例如,信息可包含在附著在操作碼上的前綴或后綴中,或通過(guò)立即值提供指示對(duì)應(yīng)的操作要在壓縮數(shù)據(jù)操作數(shù)的所有數(shù)據(jù)元素還是其子集上執(zhí)行。以這一方式,相同的操作碼既可用于全寬度壓縮數(shù)據(jù)操作也可用于部分寬度壓縮數(shù)據(jù)操作。作為代替,一組操作碼可用于部分寬度壓縮數(shù)據(jù)操作而不同的操作碼組可用于全寬度壓縮數(shù)據(jù)操作。
在任何情況中,如果指令為傳統(tǒng)的全寬度壓縮數(shù)據(jù)指令,則在步驟330通過(guò)在操作數(shù)中的各數(shù)據(jù)元素上執(zhí)行指令規(guī)定的操作來(lái)確定壓縮數(shù)據(jù)結(jié)果。然而,如果指令為部分寬度壓縮數(shù)據(jù)指令,則在步驟340通過(guò)在數(shù)據(jù)元素的子集上執(zhí)行指令規(guī)定的操作來(lái)確定結(jié)果的第一部分,而其余結(jié)果則設(shè)定為一個(gè)或多個(gè)預(yù)定的值。在一個(gè)實(shí)施例中,預(yù)定的值便是操作數(shù)之一中對(duì)應(yīng)數(shù)據(jù)元素的值。這便是,可將數(shù)據(jù)元素從操作數(shù)之一的數(shù)據(jù)元素“傳遞通過(guò)”到壓縮數(shù)據(jù)結(jié)果中的對(duì)應(yīng)數(shù)據(jù)元素。在另一實(shí)施例中,全部清除(清零)結(jié)果的其余部分中的數(shù)據(jù)元素。下面描述用于執(zhí)行將數(shù)據(jù)元素從操作數(shù)之一傳遞通過(guò)到結(jié)果的示范性邏輯及用于清除結(jié)果中的數(shù)據(jù)元素的示范性邏輯。
圖4概念性地展示執(zhí)行按照本發(fā)明的各種實(shí)施例的部分寬度壓縮數(shù)據(jù)指令的結(jié)果。在這一示例中,操作是由執(zhí)行單元440在兩個(gè)邏輯源寄存器410與420的數(shù)據(jù)元素上執(zhí)行的。執(zhí)行單元440包含用于執(zhí)行指令規(guī)定的操作的電路與邏輯。此外,執(zhí)行單元440可包含允許執(zhí)行單元440在部分寬度壓縮數(shù)據(jù)模式或全寬度壓縮數(shù)據(jù)模式中操作的選擇電路。例如,執(zhí)行單元440可包含傳遞通過(guò)電路將數(shù)據(jù)元素從邏輯源寄存器410、420之一傳遞到邏輯目的地寄存器430,或清除電路來(lái)清除邏輯目的地寄存器430的一或多個(gè)數(shù)據(jù)元素,等。也可采用各種其它技術(shù)來(lái)影響操作結(jié)果,包括將對(duì)操作的輸入之一強(qiáng)制成預(yù)定的值,諸如導(dǎo)致操作執(zhí)行其恒等函數(shù)的值或可傳遞通過(guò)算術(shù)運(yùn)算而不發(fā)出異常信號(hào)的值(如靜止的非數(shù)字(quiet nat-a-number)(QNaN))。
在所示的示例中,只將第一對(duì)數(shù)據(jù)元素(X0與Y0)上的操作結(jié)果(Z0)存儲(chǔ)在邏輯目的地寄存器430中。假定執(zhí)行單元440包含傳遞通過(guò)邏輯,便將邏輯目的地寄存器430的其余數(shù)據(jù)元素設(shè)置成來(lái)自邏輯源寄存器410的對(duì)應(yīng)數(shù)據(jù)元素的值(即X3、X2與X1)。雖然將邏輯目的地寄存器430示出為獨(dú)立的邏輯寄存器,指出它可以同時(shí)用作邏輯源寄存器410、420之一是重要的。因此,在這一上下文中應(yīng)理解將邏輯目的地寄存器430的數(shù)據(jù)元素設(shè)置成來(lái)自邏輯源寄存器410、420之一的值可包含什么也不做。例如,在邏輯源寄存器410既是邏輯源又是目的地寄存器的情況中,各種實(shí)施例可利用這一點(diǎn)并簡(jiǎn)單地不觸動(dòng)要傳遞通過(guò)的一或多個(gè)數(shù)據(jù)元素。
作為替代,執(zhí)行單元440可包含清除邏輯。從而,不是將值從邏輯源寄存器之一傳遞通過(guò)到邏輯目的地寄存器430,而是將結(jié)果中不必要的數(shù)據(jù)元素清除。在本例中再一次只將第一對(duì)數(shù)據(jù)元素(X0與Y0)上的操作結(jié)果(Z0)存儲(chǔ)在邏輯目的地寄存器430中。“清除”(如設(shè)置成零或該問(wèn)題的任何其它預(yù)定值)邏輯目的地寄存器430的其余數(shù)據(jù)元素。
全寬度硬件圖5A-5C分別概念性地展示既可執(zhí)行全寬度壓縮數(shù)據(jù)又可執(zhí)行部分寬度壓縮數(shù)據(jù)指令的執(zhí)行單元540、560及580。包含在圖5A與5C的執(zhí)行單元中的選擇邏輯表示示范性傳遞通過(guò)邏輯,而圖5B的選擇邏輯代表可采用的清除邏輯。在所描繪的實(shí)施例中,執(zhí)行單元540、560與580各包含適當(dāng)?shù)倪壿?、電路與/或固件用于在操作數(shù)(X與Y)的全寬度上并發(fā)執(zhí)行操作570、571與572。
現(xiàn)在參見(jiàn)圖5A,執(zhí)行單元540包含選擇邏輯(如多路復(fù)用器(MUX)555-557)用于在操作570產(chǎn)生的值與來(lái)自操作數(shù)之一的對(duì)應(yīng)數(shù)據(jù)元素的值之間進(jìn)行選擇。可用諸如指示當(dāng)前執(zhí)行的操作是全寬度壓縮數(shù)據(jù)操作還是部分寬度壓縮數(shù)據(jù)操作的信號(hào)來(lái)控制MUX555-557。在替代實(shí)施例中,通過(guò)包含數(shù)據(jù)元素0的附加MUX與/或獨(dú)立地控制各MUX可以達(dá)到附加的靈活性。提供MUX控制的各種裝置都是可能的。按照一個(gè)實(shí)施例,這種控制可從指令本身始發(fā)或?qū)С觯蚩赏ㄟ^(guò)立即值提供。例如,與指令關(guān)聯(lián)的4位立即值可用來(lái)使MUX555-557直接受軟件控制。可指導(dǎo)對(duì)應(yīng)于立即值中的1的MUX去選擇操作的結(jié)果,而可導(dǎo)致對(duì)應(yīng)于0的MUX去選擇傳遞通過(guò)數(shù)據(jù)。當(dāng)然,通過(guò)采用更多或更少位來(lái)表示立即值可以在各種實(shí)現(xiàn)中達(dá)到更多或更少的分辨率。
現(xiàn)在參見(jiàn)圖5B,執(zhí)行單元540包含選擇邏輯(如MUX565-567)用于在操作571產(chǎn)生的值與預(yù)定的值(如零)之間進(jìn)行選擇。如上所述MUX565-567可在公共控制下或獨(dú)立地受控制。
圖5C的傳遞通過(guò)邏輯(如MUX575-576)在操作數(shù)之一的數(shù)據(jù)元素與恒等函數(shù)值590之間進(jìn)行選擇。通常將恒等函數(shù)值590選擇為使得在恒等函數(shù)值590與數(shù)據(jù)元素之間執(zhí)行運(yùn)算572的結(jié)果為數(shù)據(jù)元素的值。例如,如果運(yùn)算572為乘法運(yùn)算,則恒等函數(shù)值590為1。類(lèi)似地,如果運(yùn)算572為加法運(yùn)算,恒等函數(shù)值590為0。以這一方式,可通過(guò)令對(duì)應(yīng)的MUX575-577輸出恒等函數(shù)值590將數(shù)據(jù)元素的值有選擇地傳遞通過(guò)到邏輯目的地寄存器430。
在上述實(shí)施例中,電路是硬布線成使得部分寬度操作是在最低位數(shù)據(jù)元素部分上執(zhí)行的??梢岳斫?,操作可在與所示出的不同的數(shù)據(jù)元素部分上執(zhí)行。同時(shí),如上所述,通過(guò)將所有的操作耦合到MUX之類(lèi)而不只是圖5A-5C中所描繪的操作的子集,可使要在其上操作的數(shù)據(jù)元素成為軟件可配置的。此外,雖然將傳遞通過(guò)與清除邏輯描述為用于對(duì)待對(duì)應(yīng)于要忽略的操作的得出的數(shù)據(jù)元素的兩種選擇,替代實(shí)施例可采用其它技術(shù)。例如,可以輸入QNaN作為對(duì)要忽略其結(jié)果的操作的操作數(shù)之一。以這一方式,與1985年3月21日公布的IEEE754標(biāo)準(zhǔn),IEEE std.754-1985一致的算術(shù)運(yùn)算將傳播NaN通過(guò)到結(jié)果而不觸發(fā)算術(shù)異常。
雖然由于操作數(shù)的全寬度能并行處理而在上述實(shí)施例中達(dá)不到明顯的加速,應(yīng)理解通過(guò)關(guān)閉要忽略其結(jié)果的那些操作便能降低功耗。從而,可達(dá)到明顯的功率節(jié)省。此外,采用QNaN與/或恒等函數(shù)值,可通過(guò)防止由不是部分寬度壓縮數(shù)據(jù)操作的一部分的數(shù)據(jù)元素觸發(fā)異常而維持可預(yù)測(cè)的異常模型。因此,所報(bào)告的異常局限于與部分寬度壓縮數(shù)據(jù)操作意欲在其上操作的數(shù)據(jù)元素相關(guān)產(chǎn)生的那些。
圖6展示可用來(lái)執(zhí)行全寬度壓縮數(shù)據(jù)指令的算術(shù)邏輯單元(ALU)的當(dāng)前處理器實(shí)現(xiàn)。圖6的ALU包含在操作數(shù)的全寬度(即所有數(shù)據(jù)元素)上執(zhí)行操作所必需的電路。圖6還示出該ALU包含兩個(gè)不同類(lèi)型的執(zhí)行單元,分別用于執(zhí)行不同類(lèi)型的運(yùn)算(如某些ALU使用獨(dú)立的單元來(lái)執(zhí)行加法與乘法運(yùn)算)。加法執(zhí)行單元與乘法執(zhí)行單元分別能作為四個(gè)獨(dú)立的加法執(zhí)行單元及四個(gè)獨(dú)立的乘法執(zhí)行單元操作。作為替代,ALU可包含一或多個(gè)乘累加(MAC)單元,各能執(zhí)行多于單一類(lèi)型的運(yùn)算。雖然以下示例假定采用加法與乘法執(zhí)行單元及浮點(diǎn)運(yùn)算,應(yīng)理解諸如MAC與/或整數(shù)運(yùn)算等其它執(zhí)行也可使用。此外,可能最好采用部分寬度實(shí)現(xiàn)(如在執(zhí)行單元與數(shù)據(jù)元素之間具有少于一一對(duì)應(yīng)的實(shí)現(xiàn))以及附加邏輯來(lái)協(xié)調(diào)執(zhí)行單元的重復(fù)使用,如下所述。
部分寬度硬件和“交錯(cuò)執(zhí)行”圖7A-7B概念性地展示正以“交錯(cuò)”方式分別執(zhí)行的全寬度壓縮數(shù)據(jù)操作及部分寬度壓縮數(shù)據(jù)操作。本實(shí)施例的上下文中“交錯(cuò)執(zhí)行”指將指令的操作數(shù)各分成獨(dú)立的段并使用同一硬件順序處理各段的進(jìn)程而言。通過(guò)在連接的段的處理中引入延時(shí)而順序地處理各段。如圖7A-7B中所示,將壓縮數(shù)據(jù)操作數(shù)分成“高位段”(數(shù)據(jù)元素3與2)及“低位段”(數(shù)據(jù)元素1與0)。在圖7A的示例中,低位段正在處理而高位段被延時(shí)。隨后,處理高位段而獲得全寬度結(jié)果。在圖7B的示例中,低位段正在處理,而高位數(shù)據(jù)段是否處理則取決于實(shí)現(xiàn)。例如,如果對(duì)應(yīng)的結(jié)果是要清零的則高位數(shù)據(jù)段可能不需要處理。此外應(yīng)理解如果不處理高位數(shù)據(jù)段,則高位與低位數(shù)據(jù)段可同時(shí)處理。類(lèi)似地,在全寬度實(shí)現(xiàn)(如在執(zhí)行單元與數(shù)據(jù)元素之間具有一一對(duì)應(yīng)的實(shí)現(xiàn))則高與低位數(shù)據(jù)段可同時(shí)處理或如圖7A中所示。
此外,雖然下面的實(shí)施例是描述為只具有加法與乘法執(zhí)行單元的,也可使用諸如MAC單元等其它類(lèi)型的執(zhí)行單元。
雖然存在著能達(dá)到交錯(cuò)的指令執(zhí)行的若干不同方式,以下各節(jié)描述兩個(gè)示范性實(shí)施例來(lái)說(shuō)明本發(fā)明的這一方面。具體地,所描述的兩個(gè)示范性實(shí)施例都接收指定包含128位操作數(shù)的邏輯寄存器的相同宏指令。
在第一示范性實(shí)施例中,指定包含128位操作數(shù)的邏輯寄存器的各宏指令導(dǎo)致從物理寄存器訪問(wèn)全寬度的操作數(shù)。從寄存器訪問(wèn)全寬度操作數(shù)之后,將操作數(shù)分成低與高位段(如利用鎖存器與多路復(fù)用器)及使用相同的硬件順序地執(zhí)行。采集得出的半寬度結(jié)果并同時(shí)將它們寫(xiě)入單個(gè)邏輯寄存器中。
反之,在第二示范性實(shí)施例中將指定包含128位操作數(shù)的邏輯寄存器的各宏指令分成至少兩條各只在一半操作數(shù)上操作的微指令。從而操作數(shù)是分成高與低位段的而各微指令獨(dú)立地導(dǎo)致從寄存器中只訪問(wèn)一半操作數(shù)。在SIMD體系結(jié)構(gòu)中這種分法是可能的,因?yàn)楦鞑僮鲾?shù)是互相獨(dú)立的。雖然第二實(shí)施例的實(shí)現(xiàn)能以任何次序執(zhí)行微指令(以按次序的或無(wú)次序的執(zhí)行模型),微指令分別導(dǎo)致在操作數(shù)的低位與高位段上獨(dú)立地或分開(kāi)地執(zhí)行宏指令所指定的操作。此外,各微指令導(dǎo)致將一半得出的操作數(shù)寫(xiě)入宏指令所指定的單一目的地邏輯寄存器中。
雖然將實(shí)施例描述為在其中將128位操作數(shù)分成兩段的,替代實(shí)施例能使用更大或更小的操作數(shù)與/或?qū)⑦@些操作數(shù)分成兩段以上。此外,雖然將兩個(gè)示范性實(shí)施例描述為用于執(zhí)行交錯(cuò)執(zhí)行的,替代實(shí)施例可采用其它技術(shù)。
采用“交錯(cuò)執(zhí)行”的第一示例性實(shí)施例圖8A概念性地展示從邏輯寄存器存取全寬度操作數(shù)但一次在操作數(shù)的一半寬度上執(zhí)行操作的按照第一實(shí)施例的處理器內(nèi)的電路。這一實(shí)施例假定處理器執(zhí)行機(jī)能在每一時(shí)鐘周期中處理一條指令。作為示例,假定執(zhí)行下述指令序列ADD X,Y;MUL A,B。在時(shí)間T上,通過(guò)端口1與2從它們各自的物理寄存器中各檢索出128位的X及128位的Y。將X與Y兩者的低位數(shù)據(jù)段,即低64位,傳遞給多路復(fù)用器802及804,然后向前傳遞給執(zhí)行單元供處理。將X與Y的高位數(shù)據(jù)段,高64位保存在延時(shí)元件M1與M2中。在時(shí)間T+1上,從延時(shí)元件M1與M2中讀取X與Y的高位數(shù)據(jù)段,然后向前傳遞到執(zhí)行單元供處理。通常,將高位數(shù)據(jù)段存儲(chǔ)在延時(shí)元件M1與M2中的延時(shí)機(jī)構(gòu)允許N位(在本例中N=64)硬件處理2N位數(shù)據(jù)。然后將來(lái)自執(zhí)行單元的低位結(jié)果保存在延時(shí)元件M3中直到高位結(jié)果就緒為止。然后通過(guò)端口3將兩個(gè)處理步驟的結(jié)果寫(xiě)回到寄存器堆800。回憶在部分寬度壓縮數(shù)據(jù)操作的情況中,可將低或高位結(jié)果的一或多個(gè)數(shù)據(jù)元素強(qiáng)制到預(yù)定值上(如零、X或Y之一中的對(duì)應(yīng)數(shù)據(jù)元素的值、等)而不是加法或乘法運(yùn)算的輸出。
繼續(xù)本示例,在時(shí)間T+1上,也已起動(dòng)乘法指令。從而在時(shí)間T+1上,可能已通過(guò)端口1與2從它們各自的寄存器中檢索出各128位的A與B??蓪與B兩者的低位數(shù)據(jù)段,即低64位傳遞到多路復(fù)用器806與808中。從延時(shí)元件M1與M2中清除X與Y的高位段并傳遞到多路復(fù)用器806與808中之后,可將A與B的高位段保持存儲(chǔ)在延時(shí)元件M1與M2中,通過(guò)端口3將兩個(gè)處理步驟的結(jié)果寫(xiě)回到寄存器堆800。
從而,按照本發(fā)明的實(shí)施例,設(shè)置了只包含一半硬件的執(zhí)行單元(諸如兩個(gè)單精度加法執(zhí)行單元及兩個(gè)單精度乘法執(zhí)行單元),而不是要求執(zhí)行單元如在當(dāng)前的處理器中發(fā)現(xiàn)的那樣去并行處理全寬度的操作數(shù)。本實(shí)施例利用了揭示多媒體應(yīng)用利用大約50%加法指令與50%乘法指令這一統(tǒng)計(jì)分析。根據(jù)這些統(tǒng)計(jì),本實(shí)施例假定多媒體指令通常遵照下述模式ADD,MUL,ADD,MUL,等等。通過(guò)以上述方式利用加法與乘法執(zhí)行單元,本實(shí)施例提供執(zhí)行單元的優(yōu)化使用,從而能以較低的成本達(dá)到與當(dāng)前的處理器相當(dāng)?shù)男阅堋?br>
圖8B為進(jìn)一步說(shuō)明圖8A的電路的定時(shí)圖。更具體地,如圖8B中所示,當(dāng)在時(shí)間T上發(fā)布指令“ADD X,Y”時(shí),兩個(gè)加法執(zhí)行單元首先在低位數(shù)據(jù)段或圖1的兩個(gè)低位壓縮數(shù)據(jù)段,即X0Y0及X1Y1上執(zhí)行加法。在時(shí)間T+1上,用相同的執(zhí)行單元在來(lái)自操作數(shù)的其余兩個(gè)數(shù)據(jù)元素上執(zhí)行加法運(yùn)算,并將高位數(shù)據(jù)段的后面兩個(gè)數(shù)據(jù)元素相加,即X2Y2與X3Y3。雖然上述實(shí)施例是參照利用兩個(gè)執(zhí)行單元的加法與乘法運(yùn)算描述的,替代實(shí)施例可利用任何數(shù)目的執(zhí)行單元與/或以交錯(cuò)方式執(zhí)行任何數(shù)目的不同運(yùn)算。
按照本實(shí)施例,可利用64位硬件來(lái)處理128位數(shù)據(jù)。一個(gè)128位寄存器可分成四個(gè)32位元素,各表示獨(dú)立的32位值,在時(shí)間T上,兩個(gè)加法執(zhí)行單元首先在兩個(gè)低位32位值上執(zhí)行加法,后面跟隨著在時(shí)間T+1上在高位32位值上的加法。在乘法運(yùn)算的情況中,乘法執(zhí)行單元以相同的方式工作。利用當(dāng)前可獲得的64位硬件去處理128位數(shù)據(jù)的這一能力代表了對(duì)硬件制造商的巨大成本效益。
如上所述,在后一個(gè)時(shí)鐘周期上重復(fù)使用按照本實(shí)施例的加法與乘法執(zhí)行單元重復(fù)執(zhí)行第二個(gè)加法或乘法運(yùn)算。當(dāng)然,在部分寬度壓縮數(shù)據(jù)指令的情況中,重復(fù)使用執(zhí)行單元但沒(méi)有必要重復(fù)執(zhí)行運(yùn)算,因?yàn)榭梢杂羞x擇地關(guān)閉對(duì)執(zhí)行單元的供電??傊?,如上所述,為了高效地執(zhí)行這一重復(fù)使用或“交錯(cuò)執(zhí)行”,利用了多媒體應(yīng)用的統(tǒng)計(jì)表現(xiàn)。
如果第二加法指令跟隨第一加法指令,第二加法可被調(diào)度單元延時(shí),以便加法執(zhí)行單元能完成第一加法指令,或更具體地在高位數(shù)據(jù)段上的第一加法指令。然后開(kāi)始執(zhí)行第二加法指令。作為替代,在無(wú)序處理器中,調(diào)度單元可確定是否可無(wú)序地執(zhí)行指令流中更后面的乘法指令。如果是,調(diào)度單元可通知乘法執(zhí)行單元開(kāi)始處理該乘法指令。如果在時(shí)間T+1上沒(méi)有可供處理的乘法指令,在第一加法指令后面調(diào)度程序?qū)⒉话l(fā)布指令,從而允許加法執(zhí)行單元在開(kāi)始第二加法指令之前定時(shí)完成第一加法指令。
本發(fā)明的又另一實(shí)施例,通過(guò)在一半時(shí)鐘周期而不是整個(gè)時(shí)鐘周期上在同一執(zhí)行單元上執(zhí)行指令而允許發(fā)布加倍的加法或乘法指令。在半時(shí)鐘周期上執(zhí)行一條指令有效地“雙激發(fā)”硬件,即使硬件兩倍快。以這一方式,可在每一個(gè)時(shí)鐘周期中利用加法或乘法執(zhí)行單元來(lái)處理新指令。雙激發(fā)的硬件允許硬件單元以只在整個(gè)時(shí)鐘周期上執(zhí)行的單激發(fā)硬件兩倍的效率執(zhí)行。雙激發(fā)硬件需要明顯地更多的硬件以便在半時(shí)鐘周期上高效地處理指令。
應(yīng)理解,本發(fā)明的修改與變化是被上述教導(dǎo)涵蓋的并在所附權(quán)利要求的視界內(nèi),并不脫離本發(fā)明的精神與意向范圍。例如,上面雖然只描述了兩個(gè)執(zhí)行單元,但可提供任何數(shù)目的邏輯單元。
采用“交錯(cuò)執(zhí)行”的第二示例性實(shí)施例按照本發(fā)明的替代實(shí)施例,全寬度操作數(shù)的交錯(cuò)執(zhí)行是通過(guò)將一條全寬度宏指令轉(zhuǎn)換成至少兩條各只在一半操作數(shù)上操作的微指令來(lái)達(dá)到的。如下面進(jìn)一步描述的,通過(guò)消除沒(méi)有必要確定部分寬度結(jié)果的微指令,在宏指令指定部分寬度壓縮數(shù)據(jù)操作時(shí)能達(dá)到更佳性能。以這一方式,減少了處理器資源制約并且處理器不再被無(wú)意義的微指令無(wú)必要地占用。雖然下面的描述是按照具體的寄存器重新命名法編寫(xiě)的,應(yīng)理解也可與本發(fā)明協(xié)調(diào)利用其它寄存器重新命名機(jī)制。下面描述的寄存器重新命名方法假設(shè)采用寄存器別名表(RAT)、排序緩沖器(ROB)及退役緩沖器,如在美國(guó)專(zhuān)利號(hào)5,446,912中詳細(xì)描述的。也可實(shí)現(xiàn)諸如在美國(guó)專(zhuān)利號(hào)5,197,132中描述的替代寄存器重新命名方法。
圖9概念性地展示通過(guò)將宏指令轉(zhuǎn)換成各處理全寬度操作數(shù)的一部分的多條微指令以“交錯(cuò)”方式在操作數(shù)上執(zhí)行操作的流水線的一個(gè)實(shí)施例。應(yīng)指出為了避免不必要地使本發(fā)明難以理解,并未詳細(xì)示出諸如取指令階段等流水線的各種其它階段。如所示,在流水線的解碼階段,接收全寬度宏指令,指定各存儲(chǔ)全寬度操作數(shù)(如128位)的邏輯源寄存器。作為示例,所描述的操作數(shù)為128位壓縮浮點(diǎn)數(shù)據(jù)操作數(shù)。在本例中,處理器支持用于存儲(chǔ)壓縮浮點(diǎn)數(shù)據(jù)的Y個(gè)邏輯寄存器。將宏指令轉(zhuǎn)換成各導(dǎo)致宏指令在半寬度操作數(shù)(如64位)上執(zhí)行操作的微指令,即“高位操作”與“低位操作”。
兩條半寬度微指令然后進(jìn)入流水線的寄存器重新命名階段。寄存器重新命名階段包含各種寄存器圖及排序緩沖器。各微指令的邏輯源寄存器為對(duì)寄存器映象表(如RAT)中的特定寄存器項(xiàng)的指針。寄存器映象表中的項(xiàng)又指向ROB中或退役寄存器中的物理源單元的位置。按照一個(gè)實(shí)施例,為了提供上述半寬度高與低位操作,壓縮浮點(diǎn)數(shù)據(jù)的RAT設(shè)置有Y*2個(gè)項(xiàng)。從而,例如,不是帶有8個(gè)邏輯寄存器項(xiàng)的RAT,而是建立帶16個(gè)項(xiàng)的RAT,各項(xiàng)編址為“高”或“低”。各項(xiàng)標(biāo)識(shí)對(duì)應(yīng)于128位邏輯寄存器的高或低部分之一的64位源。
從而各高與低位微指令在對(duì)應(yīng)于各自的操作數(shù)的寄存器映象表中具有相關(guān)的項(xiàng)。然后微指令進(jìn)入調(diào)度階段(對(duì)無(wú)序處理)或執(zhí)行階段(對(duì)按序處理器)。各微指令檢索與分開(kāi)處理128位操作數(shù)的64位段。64硬件單元首先執(zhí)行操作之一(如低位操作)。然后,同一64位硬件單元執(zhí)行高位操作。應(yīng)理解,在低與高位操作之間可執(zhí)行零或數(shù)條指令。
雖然上述實(shí)施例描述將宏指令分成兩條微指令,替代實(shí)施例可將宏指令分成更多的微指令。雖然圖9示出將壓縮浮點(diǎn)數(shù)據(jù)返回給帶有各指定為高或低的Y*2個(gè)64位寄存器的退役寄存器堆,替代實(shí)施例可采用帶有Y個(gè)128位寄存器的退役寄存器堆。此外,雖然將一個(gè)實(shí)施例描述為具有帶排序緩沖器與退役寄存器堆的寄存器重新命名機(jī)構(gòu)的,替代實(shí)施例可使用任何寄存器重新命名機(jī)構(gòu)。例如,美國(guó)專(zhuān)利號(hào)5,197,132的寄存器重新命名機(jī)構(gòu)采用歷史隊(duì)列與后備圖。
圖10為進(jìn)一步說(shuō)明圖9中所描述的實(shí)施例的定時(shí)圖。在時(shí)間T上,宏指令“ADD X,Y”進(jìn)入圖9的流水線的解碼階段。作為示例,該宏指令為128位指令。將該128位宏指令轉(zhuǎn)換成兩條64位微指令,即高位運(yùn)算“ADD XH,YH”及低位運(yùn)算“ADD XL,YL”。然后各微指令處理包含兩個(gè)數(shù)據(jù)元素的一段數(shù)據(jù)。例如,在時(shí)間T上,可由64位執(zhí)行單元執(zhí)行低位操作。然后在不同的時(shí)間上(如時(shí)間T+N),同一64位執(zhí)行單元執(zhí)行高位操作。從而本發(fā)明的這一實(shí)施例特別適用于利用現(xiàn)有的64位硬件系統(tǒng)處理128位指令,而無(wú)須對(duì)硬件作重大改變?,F(xiàn)有的系統(tǒng)除了現(xiàn)有的邏輯寄存器圖之外,很容易擴(kuò)展成包含新圖來(lái)處理壓縮的浮點(diǎn)。
現(xiàn)在參見(jiàn)圖11,其中描述了按照本發(fā)明的一個(gè)實(shí)施例可以采用的解碼邏輯。簡(jiǎn)要地說(shuō),在所描繪的實(shí)施例中,多個(gè)解碼器1110、1120及1130各接收一條宏指令并將其轉(zhuǎn)換成微指令。然后將微操作向下送到流水線的其余部分。當(dāng)然,執(zhí)行每一條宏指令不一定需要N條微指令。因此,通常的情況是只排隊(duì)微指令的子集供流水線的其余部分處理。
如上所述,壓縮數(shù)據(jù)操作可實(shí)現(xiàn)為兩條半寬度微指令(如高位操作與低位操作)。不是象先有處理器實(shí)現(xiàn)所要求的用兩個(gè)解碼器獨(dú)立地解碼宏指令來(lái)生成高與低位操作,作為本實(shí)施例的特征可用同一解碼器生成兩條微指令。在本例中,這是用復(fù)制邏輯1150完成的,它復(fù)制高或低位操作,并隨后適當(dāng)?shù)匦拚玫降膹?fù)制操作來(lái)建立剩下的操作。重要的是,如上所述,通過(guò)小心地編碼寄存器地址空間,能用單一的位來(lái)區(qū)分宏指令引用的寄存器(如邏輯源與目的地寄存器)。結(jié)果,最簡(jiǎn)單的形式的修正邏輯1160可包括一或多個(gè)反相器來(lái)反相適當(dāng)?shù)奈灰员銖牡臀徊僮鳟a(chǎn)生高位操作及反過(guò)來(lái)。在任何情況中,然后將復(fù)制的宏指令傳遞給多路復(fù)用器1170。多路復(fù)用器1170也接收解碼器1120生成的微指令。在本例中,多路復(fù)用器1170在有效性解碼器1180的控制下輸出用于壓縮數(shù)據(jù)操作(包含部分寬度壓縮數(shù)據(jù)操作)的復(fù)制的微指令,并輸出從解碼器1120接收的用于壓縮數(shù)據(jù)操作以外的操作的微指令。因此,優(yōu)化操作碼圖來(lái)簡(jiǎn)化復(fù)制邏輯1150對(duì)壓縮數(shù)據(jù)操作的檢測(cè)是有利的。例如,如果只需要檢驗(yàn)宏指令的一小部分來(lái)區(qū)別壓縮數(shù)據(jù)操作與其它操作,則有效性解碼器1180可采用較少的電路。
在為了執(zhí)行部分寬度壓縮數(shù)據(jù)操作的目的而將源數(shù)據(jù)元素傳遞通過(guò)到邏輯目的地寄存器的實(shí)現(xiàn)中,除了類(lèi)似于相對(duì)于圖5A與5C描述的選擇邏輯之外,可包含邏輯來(lái)消除(消滅)高或低位操作之一,為了性能原因,最好及早在流水線中消除無(wú)關(guān)的微指令。這一消除可按照通過(guò)利用從微指令長(zhǎng)度確定電路1190輸出的微指令選擇信號(hào)描繪的實(shí)施例來(lái)完成。該微指令長(zhǎng)度確定邏輯1190檢驗(yàn)一部分宏指令并生成指示要在流水線中向下進(jìn)行的一或多條微指令的特定組合的微指令選擇信號(hào)。在標(biāo)量SIMD指令的情況中,只允許進(jìn)行得出的高與低位操作之一。例如,微指令選擇信號(hào)可表示為標(biāo)識(shí)哪些微指令要保留及哪些要消除的位屏蔽。作為替代,微指令選擇信號(hào)可簡(jiǎn)單地指示從預(yù)定的起點(diǎn)開(kāi)始要消除或保留的微指令的數(shù)目。執(zhí)行上述消除所需的邏輯取決于引導(dǎo)微指令通過(guò)流水線的其余部分的導(dǎo)航機(jī)制而變化。例如,如果微指令是排隊(duì)的,可能要增加邏輯來(lái)操作微指令隊(duì)列的頭與尾指針以導(dǎo)致用后面生成的有效微指令來(lái)改寫(xiě)無(wú)效的微指令,許多其它的消除技術(shù)對(duì)于本技術(shù)中的普通技術(shù)人員是熟知的。
雖然為了簡(jiǎn)單起見(jiàn)在所描繪的實(shí)施例中一次只示出為解碼單一宏指令,但在替代實(shí)施例中可同時(shí)解碼多條宏指令,同時(shí)可理解,微指令復(fù)制具有比上述實(shí)施例所示更廣闊的應(yīng)用性。例如,以類(lèi)似于上述的方式,可用同一解碼器解碼全寬度及部分寬度壓縮數(shù)據(jù)宏指令。如果用前綴來(lái)區(qū)分全寬度與部分寬度壓縮數(shù)據(jù)宏指令,解碼器可簡(jiǎn)單地忽略該前綴并以相同方式解碼兩種類(lèi)型的指令。然后,可以修改得出的微操作中的適當(dāng)?shù)奈粊?lái)有選擇地為數(shù)據(jù)元素全體或其子集啟動(dòng)處理。以這一方式,可從部分寬度壓縮數(shù)據(jù)微操作生成全寬度壓縮數(shù)據(jù)微操作,反之亦然,借此降低解碼器的復(fù)雜性。
從而公開(kāi)了用于高效地執(zhí)行部分寬度壓縮數(shù)據(jù)指令的方法與設(shè)備。這里描述的這些特定的設(shè)備與方法只是為了展示本發(fā)明的原理。本技術(shù)中的普通技術(shù)人員可作出形式上與細(xì)節(jié)上的許多修改而不脫離本發(fā)明的范圍。雖然對(duì)于特定的最佳實(shí)施例示出了本發(fā)明,但不應(yīng)認(rèn)為局限于此。反之,本發(fā)明只受所附權(quán)利要求書(shū)的范圍的限制。
權(quán)利要求
1.一種方法,包括接收部分寬度壓縮數(shù)據(jù)指令,所述部分寬度壓縮數(shù)據(jù)指令指定第一壓縮數(shù)據(jù)操作數(shù)和第二壓縮數(shù)據(jù)操作數(shù)在存儲(chǔ)器中的位置,所述部分寬度壓縮數(shù)據(jù)指令指定壓縮數(shù)據(jù)結(jié)果的生成,壓縮數(shù)據(jù)結(jié)果具有對(duì)第一和第二壓縮數(shù)據(jù)操作數(shù)的一個(gè)或多個(gè)數(shù)據(jù)元素對(duì)執(zhí)行的一個(gè)或多個(gè)操作的一個(gè)或多個(gè)結(jié)果作為一個(gè)或多個(gè)數(shù)據(jù)元素,并且壓縮數(shù)據(jù)結(jié)果具有一個(gè)或多個(gè)預(yù)定值作為一個(gè)或多個(gè)剩余數(shù)據(jù)元素;和生成壓縮數(shù)據(jù)結(jié)果,其中所述生成壓縮數(shù)據(jù)結(jié)果包括生成微指令,和使用微指令來(lái)只存取第一和第二壓縮數(shù)據(jù)操作數(shù)的部分。
2.根據(jù)權(quán)利要求1的方法,其中第一和第二壓縮數(shù)據(jù)操作數(shù)包括128位操作數(shù),以及其中壓縮數(shù)據(jù)結(jié)果包括128位壓縮數(shù)據(jù)結(jié)果。
3.根據(jù)權(quán)利要求1的方法,其中一個(gè)或多個(gè)預(yù)定值包括第一壓縮數(shù)據(jù)操作數(shù)的數(shù)據(jù)元素的值。
4.根據(jù)權(quán)利要求1的方法,其中所述生成壓縮數(shù)據(jù)結(jié)果包括清除壓縮數(shù)據(jù)結(jié)果的數(shù)據(jù)元素。
5.根據(jù)權(quán)利要求1的方法,其中部分寬度壓縮數(shù)據(jù)指令包括標(biāo)量壓縮數(shù)據(jù)指令,和其中壓縮數(shù)據(jù)結(jié)果包括只對(duì)第一和第二壓縮數(shù)據(jù)操作數(shù)的單個(gè)數(shù)據(jù)元素對(duì)執(zhí)行的操作的結(jié)果。
6.根據(jù)權(quán)利要求1的方法,進(jìn)一步包括將報(bào)告的異常限制到與所述確定壓縮數(shù)據(jù)結(jié)果部分相關(guān)聯(lián)的那些異常。
7.根據(jù)權(quán)利要求1的方法,進(jìn)一步包括通過(guò)選擇性地關(guān)閉生成壓縮數(shù)據(jù)結(jié)果不需要的電路來(lái)減少功耗。
8.一種設(shè)備,包括寄存器堆,提供邏輯寄存器來(lái)存儲(chǔ)壓縮數(shù)據(jù)操作數(shù),每個(gè)壓縮數(shù)據(jù)操作數(shù)包括多個(gè)數(shù)據(jù)元素;解碼器,接收包括部分寬度壓縮數(shù)據(jù)指令的指令,所述部分寬度壓縮數(shù)據(jù)指令指定壓縮數(shù)據(jù)結(jié)果的生成,壓縮數(shù)據(jù)結(jié)果包括對(duì)第一壓縮數(shù)據(jù)操作數(shù)和第二壓縮數(shù)據(jù)操作數(shù)的一對(duì)數(shù)據(jù)元素執(zhí)行的操作的結(jié)果作為第一數(shù)據(jù)元素,并且壓縮數(shù)據(jù)結(jié)果包括預(yù)定值作為第二數(shù)據(jù)元素;和執(zhí)行單元,與所述解碼器和寄存器堆相耦合,其中執(zhí)行單元包括使用微指令來(lái)只存取第一和第二壓縮數(shù)據(jù)操作數(shù)的最低位部分的邏輯。
9.根據(jù)權(quán)利要求8的設(shè)備,其中執(zhí)行單元包括將操作數(shù)之一的數(shù)據(jù)元素傳遞到壓縮數(shù)據(jù)結(jié)果的邏輯。
10.根據(jù)權(quán)利要求8的設(shè)備,其中預(yù)定值包括恒等函數(shù)值。
11.根據(jù)權(quán)利要求8的設(shè)備,其中執(zhí)行單元包括清零壓縮數(shù)據(jù)結(jié)果的數(shù)據(jù)元素的邏輯。
12.根據(jù)權(quán)利要求8的設(shè)備,其中部分寬度壓縮數(shù)據(jù)指令包括標(biāo)量壓縮數(shù)據(jù)指令。
13.根據(jù)權(quán)利要求8的設(shè)備,其中第一和第二壓縮數(shù)據(jù)操作數(shù)包括128位操作數(shù),以及其中壓縮數(shù)據(jù)結(jié)果包括128位操作數(shù)。
14.根據(jù)權(quán)利要求8的設(shè)備,其中部分寬度壓縮數(shù)據(jù)指令指定壓縮數(shù)據(jù)結(jié)果在寄存器堆的邏輯源寄存器中存儲(chǔ)在第一壓縮數(shù)據(jù)操作數(shù)之上。
15.根據(jù)權(quán)利要求8的設(shè)備,其中執(zhí)行單元包括順序處理第一和第二壓縮數(shù)據(jù)操作數(shù)的獨(dú)立段和以交錯(cuò)方式生成第一數(shù)據(jù)元素與第二數(shù)據(jù)元素的邏輯。
16.根據(jù)權(quán)利要求8的設(shè)備,進(jìn)一步包括通過(guò)選擇性地關(guān)閉生成壓縮數(shù)據(jù)結(jié)果不需要的執(zhí)行單元的電路來(lái)減少功耗的邏輯。
17.一種方法,包括接收指定第一壓縮數(shù)據(jù)操作數(shù)和第二壓縮數(shù)據(jù)操作數(shù)的指令,該指令指定只對(duì)第一和第二壓縮數(shù)據(jù)操作數(shù)的相應(yīng)數(shù)據(jù)元素對(duì)的子集執(zhí)行的操作;將該指令變換為包括第一微指令的一個(gè)或多個(gè)微指令;使用第一微指令只接收第一和第二壓縮數(shù)據(jù)操作數(shù)的一部分;通過(guò)處理第一和第二壓縮數(shù)據(jù)操作數(shù)的部分生成結(jié)果;和將該結(jié)果提供給利用該指令指定的目的地。
18.根據(jù)權(quán)利要求17的方法,其中將該指令變換為一個(gè)或多個(gè)微指令進(jìn)一步包括將該指令變換為第二微指令,進(jìn)一步包括消除第二微指令。
19.根據(jù)權(quán)利要求17的方法,其中該指令包括標(biāo)量壓縮數(shù)據(jù)指令。
20.根據(jù)權(quán)利要求17的方法,其中第一壓縮數(shù)據(jù)操作數(shù)和第二壓縮數(shù)據(jù)操作數(shù)均包括128位壓縮浮點(diǎn)數(shù)據(jù)操作數(shù)。
21.一種設(shè)備,包括解碼器,接收指定第一壓縮數(shù)據(jù)操作數(shù)和第二壓縮數(shù)據(jù)操作數(shù)的指令,該指令指定只對(duì)第一壓縮數(shù)據(jù)操作數(shù)和第二壓縮數(shù)據(jù)操作數(shù)的相應(yīng)數(shù)據(jù)元素對(duì)的子集執(zhí)行的操作;解碼器的邏輯,將該指令變換為一個(gè)或多個(gè)微指令,所述一個(gè)或多個(gè)微指令包括第一微指令;和執(zhí)行單元,與所述解碼器相耦合,所述執(zhí)行單元接收利用第一微指令指定的第一和第二壓縮數(shù)據(jù)操作數(shù)的部分,所述執(zhí)行單元提供與第一微指令相關(guān)的結(jié)果給利用該指令指定的目的地。
22.根據(jù)權(quán)利要求21的設(shè)備,其中將該指令變換為一個(gè)或多個(gè)微指令的邏輯包括將該指令變換為第一微指令和第二微指令的邏輯,以及其中所述執(zhí)行單元包括使用相同的硬件在不同的時(shí)間處理第一和第二微指令的邏輯,并且其中執(zhí)行單元包括消除第二微指令的邏輯。
23.根據(jù)權(quán)利要求21的設(shè)備,其中該指令包括標(biāo)量壓縮數(shù)據(jù)指令。
24.根據(jù)權(quán)利要求21的設(shè)備,其中操作數(shù)包括128位壓縮浮點(diǎn)數(shù)據(jù)操作數(shù)。
全文摘要
提供用于執(zhí)行壓縮數(shù)據(jù)指令的方法與設(shè)備。根據(jù)本發(fā)明的一個(gè)方面,處理器或其他設(shè)備可以包括解碼器,接收指定第一壓縮數(shù)據(jù)操作數(shù)和第二壓縮數(shù)據(jù)操作數(shù)的指令,該指令指定只對(duì)第一壓縮數(shù)據(jù)操作數(shù)和第二壓縮數(shù)據(jù)操作數(shù)的相應(yīng)數(shù)據(jù)元素對(duì)的子集執(zhí)行的操作;解碼器的邏輯,將該指令變換為一個(gè)或多個(gè)微指令,所述一個(gè)或多個(gè)微指令包括第一微指令;和執(zhí)行單元,與所述解碼器相耦合,該執(zhí)行單元使用微指令來(lái)存取和接收利用第一微指令指定的第一和第二壓縮數(shù)據(jù)操作數(shù)的部分,該執(zhí)行單元提供與第一微指令相關(guān)的結(jié)果給利用該指令指定的目的地。
文檔編號(hào)G06F9/30GK1595389SQ20041008358
公開(kāi)日2005年3月16日 申請(qǐng)日期1999年3月31日 優(yōu)先權(quán)日1998年3月31日
發(fā)明者P·魯塞爾, T·塔卡 申請(qǐng)人:英特爾公司