專(zhuān)利名稱(chēng):帶有并行執(zhí)行指令的裝置的微處理機(jī)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明總的說(shuō)來(lái)涉及計(jì)算機(jī)領(lǐng)域,更詳細(xì)地說(shuō),本發(fā)明涉及微處理機(jī)的體系結(jié)構(gòu)和提高指令執(zhí)行速度的方法。
歷來(lái)的計(jì)算機(jī)都是設(shè)計(jì)成使其順序(即一個(gè)接一個(gè))地執(zhí)行指令的。盡管計(jì)算機(jī)指令的順序執(zhí)行確實(shí)使操作方法合乎邏輯、有條理,但始終存在著提高處理速率的要求。這就促使研究人員探索實(shí)現(xiàn)并行執(zhí)行指令方案的方法。
要成功設(shè)計(jì)出能并行執(zhí)行多個(gè)指令的計(jì)算機(jī)或微處理機(jī),必須解決許多問(wèn)題。例如,微處理機(jī)一般有一個(gè)含有上百個(gè)專(zhuān)用指令的指令集的體系結(jié)構(gòu)。而計(jì)算一下某已知體系結(jié)構(gòu)的各種不同編址方式下可能的操作碼,其總數(shù)可能達(dá)數(shù)千個(gè)之多。將某已知指令集的全部可能的第一指令和全部可能的第二指令配對(duì),不難得出數(shù)百萬(wàn)不同的組合。設(shè)計(jì)一臺(tái)能執(zhí)行所有這些各式各樣指令組合的計(jì)算機(jī)是一項(xiàng)艱巨的任務(wù)。顯然,設(shè)計(jì)的復(fù)雜性是如此之大以致難以處理。制造能在短時(shí)間內(nèi)對(duì)執(zhí)行這些指令對(duì)的并行計(jì)算機(jī)的整個(gè)指令集進(jìn)行譯碼的譯碼器很困難。
制造能并行執(zhí)行指令的計(jì)算機(jī)還涉及到這樣一個(gè)問(wèn)題,即它必須能運(yùn)用為現(xiàn)有技術(shù)的計(jì)算機(jī)而設(shè)計(jì)的軟件,即為按順序執(zhí)行程序(每一個(gè)時(shí)鐘周期執(zhí)行一個(gè)指令)進(jìn)行操作的計(jì)算機(jī)而設(shè)計(jì)的軟件。就是說(shuō),并行計(jì)算機(jī)必須看起來(lái)象在進(jìn)行順序操作一樣。
稍后即將看到,本發(fā)明公開(kāi)了一種能在一個(gè)時(shí)鐘周期內(nèi)執(zhí)行兩個(gè)指令的計(jì)算機(jī)系統(tǒng)。本發(fā)明的計(jì)算機(jī)是通過(guò)對(duì)一對(duì)選自某已知指令集的指令進(jìn)行譯碼,然后并行執(zhí)行這些指令以得出正確的結(jié)果而進(jìn)行工作的。本發(fā)明一個(gè)突出的特點(diǎn)是,本發(fā)明的計(jì)算機(jī)系統(tǒng)當(dāng)各成對(duì)的指令之間無(wú)寄存器相關(guān)性存在時(shí),只并行發(fā)送出兩個(gè)指令。
本發(fā)明公開(kāi)了一種能在一個(gè)時(shí)鐘周期內(nèi)并行執(zhí)行兩個(gè)指令的計(jì)算機(jī)系統(tǒng)。該計(jì)算機(jī)系統(tǒng)包括一個(gè)雙指令譯碼器,它在各指令之間無(wú)寄存器相關(guān)性存在時(shí)只發(fā)出兩項(xiàng)指令,且該兩項(xiàng)指令是屬于計(jì)算機(jī)指令集之中的。
在一個(gè)實(shí)施例中,本發(fā)明的計(jì)算機(jī)系統(tǒng)包括第一和第二指令流水線(xiàn)裝置,供執(zhí)行計(jì)算機(jī)各指令之用。第一流水線(xiàn)裝置工作時(shí)能執(zhí)行整個(gè)指令集發(fā)出的任何指令,第二流水線(xiàn)裝置則局限于執(zhí)行預(yù)定的指令子集。該子集是根據(jù)通常所執(zhí)行的指令而選取的。
系統(tǒng)中裝設(shè)了一個(gè)寄存器相關(guān)性檢查裝置,用以識(shí)別一系列指令中的第一指令的目標(biāo)寄存器。相關(guān)性檢查裝置還確定在執(zhí)行指令序列中的第二指令的過(guò)程中是否使用目標(biāo)寄存器。若不使用,則相關(guān)性檢查裝置指示出滿(mǎn)足了第一種情況。此外還裝設(shè)了一個(gè)用以確定該序列中的第一和第二指令是否處在預(yù)定子集內(nèi)的裝置。當(dāng)兩個(gè)指令都處在子集中時(shí),確定裝置就指示出滿(mǎn)足了第二種情況。每當(dāng)滿(mǎn)足了第一和第二兩種情況時(shí),該對(duì)指令就可以并行發(fā)送出。
本發(fā)明的另一個(gè)特點(diǎn)是,每當(dāng)?shù)谝换虻诙l件有一個(gè)得不到滿(mǎn)足時(shí),計(jì)算機(jī)系統(tǒng)就改為只發(fā)出序列中的第一指令。就是說(shuō),若第一和第二指令有寄存器相關(guān)性或者其中一個(gè)指令不是從預(yù)定子集中提取的,則計(jì)算機(jī)就改為進(jìn)入在一個(gè)時(shí)鐘周期內(nèi)只執(zhí)行第一指令的狀態(tài)。在此狀態(tài)下,序列中的第二指令是在下一個(gè)時(shí)鐘周期期間發(fā)出的。
從下面的詳細(xì)說(shuō)明和本發(fā)明最佳實(shí)施例的附圖可以更全面地理解本發(fā)明的內(nèi)容,但這些最佳實(shí)施例和附圖僅僅是為了說(shuō)明和理解本發(fā)明而提出的,不應(yīng)視為對(duì)本發(fā)明的限制。
圖1示出了現(xiàn)有技術(shù)微處理機(jī)中央處理單元流水線(xiàn)執(zhí)行機(jī)構(gòu)。
圖2示出了本發(fā)明的CPU流水線(xiàn)的執(zhí)行機(jī)構(gòu)。
圖3是本發(fā)明所采用的雙指令譯碼裝置的原理方框圖。
這里公開(kāi)了一種帶有在一個(gè)時(shí)鐘周期內(nèi)并行執(zhí)行兩項(xiàng)指令的裝置的微處理機(jī)。在下面的說(shuō)明中,為使讀者全面理解本發(fā)明的最佳實(shí)施例,談到了許多具體細(xì)節(jié),例如具體的指令類(lèi)型、微處理機(jī)類(lèi)型等。但顯然,熟悉本技術(shù)領(lǐng)域的人士都知道,沒(méi)有這些具體細(xì)節(jié)同樣還是可以實(shí)現(xiàn)本發(fā)明的。另一方面,為避免使本發(fā)明內(nèi)容的敘述過(guò)于繁雜,這里對(duì)一些公知的電路、結(jié)構(gòu)和方法就不再詳述了。
本發(fā)明涉及一種在一個(gè)時(shí)鐘周期內(nèi)并行執(zhí)行多個(gè)計(jì)算機(jī)指令的裝置和方法。本發(fā)明最好在Intel公司制造的名為i 586TM的微處理機(jī)上實(shí)施。i 586TM微處理機(jī)是i 486TM微處理機(jī)的一個(gè)改進(jìn)機(jī)種。i 486TM的體系結(jié)構(gòu)的細(xì)節(jié)在許多出版物中有介紹。(Intel i 486TM和i 586TM都是Intel公司的商標(biāo)。)雖然本發(fā)明書(shū)中經(jīng)常提到的是i 586TM的體系結(jié)構(gòu)且各實(shí)例是引自同類(lèi)指令中的,但不言而喻本發(fā)明并不局限這些特定的計(jì)算機(jī)。
流水線(xiàn)技術(shù)流水線(xiàn)技術(shù)是將多個(gè)指令在執(zhí)行過(guò)程中同時(shí)加以重疊的實(shí)用技術(shù)?,F(xiàn)有技術(shù)方法中廣泛采用流水線(xiàn)技術(shù)來(lái)提高中央處理單元(CPU)的效率和處理速度。在流水線(xiàn)結(jié)構(gòu)中,各指令在一端輸入,通過(guò)各級(jí)或流水線(xiàn)段處理之后,在另一端輸出。流水線(xiàn)的各級(jí)完成一部分指令的處理。
參看圖1,圖中示出了現(xiàn)有技術(shù)流水線(xiàn)的結(jié)構(gòu),其中指令的各級(jí)用沿左欄列出的條目來(lái)表示。各指令步之間的時(shí)鐘時(shí)間間隔用水平列出的數(shù)字表示。流水線(xiàn)中的各指令步叫做時(shí)鐘周期或機(jī)器周期。
流水線(xiàn)的第一線(xiàn)為“PF”級(jí),它表示流水線(xiàn)的預(yù)取部分。在該級(jí)中,各指令是從一個(gè)單片超高速緩存器中預(yù)取的。下一個(gè)流水線(xiàn)級(jí)以“D1”表示。在此流水線(xiàn)級(jí)中,各指令經(jīng)譯碼之后發(fā)出。D2級(jí)是個(gè)地址計(jì)算級(jí)。應(yīng)該指出的是,按照流水線(xiàn)原理,在第二時(shí)鐘周期的D1級(jí)執(zhí)行第一指令(例如I1)過(guò)程中,第二指令(例如I2)就開(kāi)始執(zhí)行其預(yù)取級(jí)。流水線(xiàn)的“EX”級(jí)表示執(zhí)行硬件中的指令,“WB”級(jí)則表示回寫(xiě)(writeback)操作。應(yīng)該指出的是,在圖1現(xiàn)有技術(shù)的結(jié)構(gòu)中,在任何已知的時(shí)鐘周期中,流水線(xiàn)中只執(zhí)行單個(gè)指令。
上面說(shuō)過(guò),本發(fā)明的計(jì)算機(jī)是個(gè)超級(jí)計(jì)算機(jī)(superscalermachine),能在一個(gè)時(shí)鐘周期內(nèi)并行執(zhí)行兩項(xiàng)指令。為達(dá)到此目的,本發(fā)明有兩個(gè)整體流水線(xiàn),各整體流水線(xiàn)能在一個(gè)時(shí)鐘內(nèi)執(zhí)行各指令。因此CPU能在兩個(gè)獨(dú)立的流水線(xiàn)中并行發(fā)出兩項(xiàng)指令。在目前最佳的實(shí)施例中,各流水線(xiàn)命名為“U”和“V”流水線(xiàn)。U流水線(xiàn)最好能執(zhí)行x86體系結(jié)構(gòu)中的任何指令,V流水線(xiàn)能執(zhí)行某些簡(jiǎn)單的指令,這在本說(shuō)明書(shū)稍后的章節(jié)中將進(jìn)一步說(shuō)明。
參看圖2,圖中示出了本發(fā)明的流水線(xiàn)結(jié)構(gòu)。應(yīng)該指出的是,在圖2的流水線(xiàn)序列中,可以看出兩個(gè)指令I(lǐng)1和I2系在一個(gè)時(shí)鐘周期內(nèi)在流水線(xiàn)的各級(jí)中執(zhí)行的。這里流水線(xiàn)的第一級(jí)也是預(yù)取級(jí),在該級(jí)中,各指令是從單片超高速緩存器中預(yù)取的。由于本發(fā)明微處理機(jī)的指令和數(shù)據(jù)的超高速緩存器是分開(kāi)的,因而跟現(xiàn)有技術(shù)CPU的情況一樣,各預(yù)取過(guò)程再也不會(huì)與存取超高速緩存器的數(shù)據(jù)基準(zhǔn)有矛盾。這就是說(shuō),在預(yù)取級(jí)期間,直接從指令超高速緩存器提取指令I(lǐng)1和I2,然后裝入U(xiǎn)和V流水線(xiàn)中。在下一個(gè)流水線(xiàn)級(jí)(即D1),指令I(lǐng)1和I2經(jīng)譯碼之后發(fā)出。
指令發(fā)送和流水線(xiàn)程序設(shè)計(jì)前面說(shuō)過(guò),本發(fā)明的微處理機(jī)能在一個(gè)時(shí)鐘周期內(nèi)發(fā)出一個(gè)或兩個(gè)指令。但為同時(shí)發(fā)出兩個(gè)指令,該指令對(duì)中的兩個(gè)指令都必須滿(mǎn)足某些條件。就是說(shuō),指令對(duì)的兩個(gè)指令必須在預(yù)定指令子集中,且彼此互不相關(guān)(稍后即將詳述本發(fā)明的這方面)。
并行發(fā)出兩項(xiàng)指令的過(guò)程叫做“指令配對(duì)”。指令經(jīng)過(guò)配對(duì)時(shí),發(fā)送到V流水線(xiàn)(第二流水線(xiàn))的指令總是發(fā)送到U流水線(xiàn)的指令的下一個(gè)順序的指令。雖然各指令可以并行執(zhí)行,但在編程員看來(lái),這個(gè)情況完全就跟它們是順序執(zhí)行時(shí)一樣(現(xiàn)有技術(shù)設(shè)計(jì)的情況就是這樣)。各指令通過(guò)D2和EX級(jí)直到它們?cè)赪B級(jí)中的完成過(guò)程都是并行進(jìn)行的。各指令通過(guò)流水線(xiàn)行進(jìn)的過(guò)程中,不難理解可出于各種原因而停止執(zhí)行各指令。當(dāng)例如U流水線(xiàn)中的指令受到延遲時(shí),則與其一起發(fā)送到V流水線(xiàn)的指令(如有的話(huà))也在流水線(xiàn)的同一級(jí)中受到延遲。各相繼的指令不可以往前送至任一流水線(xiàn)中停止執(zhí)行指令的級(jí)。停止執(zhí)行V流水線(xiàn)中的一項(xiàng)指令時(shí),與其一起發(fā)送到U流水線(xiàn)的指令可以往前發(fā)送,而這時(shí)V流水線(xiàn)停止工作。
指令配對(duì)本發(fā)明的基本構(gòu)思是計(jì)算機(jī)系統(tǒng)具有這樣一種譯碼裝置,在兩個(gè)指令之間無(wú)寄存器相關(guān)性存在且兩個(gè)指令都屬于適宜并行執(zhí)行的指令子集時(shí),該譯碼裝置只并行發(fā)出該兩個(gè)指令。該雙指令譯碼器首先識(shí)別程序序列中第一指令的目標(biāo)寄存器。該指令就成為U流水線(xiàn)指令。然后本發(fā)明的裝置確定在執(zhí)行序列中第二指令的過(guò)程中該U流水線(xiàn)指令是否被按任何方式使用。若沒(méi)有使用(即兩個(gè)指令是獨(dú)立的),則并行發(fā)出該兩項(xiàng)指令。
前面說(shuō)過(guò),本發(fā)明的超級(jí)計(jì)算機(jī)具有兩個(gè)采用整個(gè)指令集內(nèi)的并行方式的并行流水線(xiàn),叫做U流水線(xiàn)和V流水線(xiàn)。微處理機(jī)的指令部件總是將指令序列中的第一指令發(fā)送到U流水線(xiàn),把第二指令發(fā)送到V流水線(xiàn)。每當(dāng)U流水線(xiàn)的操作數(shù)不可訪(fǎng)問(wèn)、或各流水線(xiàn)之間的地址有矛盾時(shí),V流水線(xiàn)就停止工作。配對(duì)只能在兩個(gè)整數(shù)指令之間或兩個(gè)浮點(diǎn)指令之間發(fā)生。
一般說(shuō)來(lái),成對(duì)的簡(jiǎn)單指令只要它們之間沒(méi)有相關(guān)性都是可加以配對(duì)的。為了同時(shí)發(fā)出兩個(gè)整數(shù)指令,按照目前最佳實(shí)施例就必須滿(mǎn)足下列條件。首先,指令必須屬于x86指令集的預(yù)定子集。下面的表1中示出了配對(duì)整數(shù)指令用的指令子集。
(注表1中,條目“alur,r”表示包括諸如“add”、“or”、“adc”、“sbb”、“and”“xor”“cmp”之類(lèi)的一組指令。)分解成子集的概念是本發(fā)明中的一個(gè)重要概念,因?yàn)樗鼜母旧蠝p少了在并行執(zhí)行過(guò)程中應(yīng)加以處理的各不同指令可能有的組合數(shù)。從本發(fā)明的系統(tǒng)可知,指令子集是不多的(大約20個(gè)),占一般軟件所能執(zhí)行的全部指令的將近95%。上面的表1中列出了一批最常用的指令。分解成子集的應(yīng)用意味著雙指令譯碼器無(wú)需按整個(gè)指令集而進(jìn)行操作。相反,可以通過(guò)對(duì)設(shè)計(jì)的簡(jiǎn)化以大大改進(jìn)有關(guān)的定時(shí)關(guān)系。分解成子集的應(yīng)用還可以加速計(jì)算機(jī)識(shí)別兩個(gè)指令的過(guò)程,對(duì)它們快速譯碼,然后并行執(zhí)行這些指令。
對(duì)指令并行執(zhí)行的另一個(gè)重要限制是要求各對(duì)指令之間沒(méi)有寄存器相關(guān)性存在。這就是說(shuō),第一指令的目標(biāo)寄存器不能用作下一個(gè)指令的來(lái)源、目標(biāo)、基礎(chǔ)或索引。這個(gè)要求適用于寄存器對(duì)各指令的明顯性的和隱含性的應(yīng)用。(注在這方面,當(dāng)“push”和“pop”指令進(jìn)行配對(duì)的情況例外,進(jìn)行該配對(duì)時(shí),在目前最佳實(shí)施例中,在更新堆棧指示字用的分段部件中具有專(zhuān)用的硬件)。進(jìn)行相關(guān)性檢查時(shí),采用16/32位寄存器的任何部分和采用整個(gè)寄存器都一樣。若U和V流水線(xiàn)指令之間具有存儲(chǔ)器相關(guān)性,即U和V流水線(xiàn)存儲(chǔ)器的存取都是針對(duì)數(shù)據(jù)超高速緩存器的同一個(gè)庫(kù)/地址進(jìn)行的,則V流水線(xiàn)周期將被加以平衡,直到對(duì)U流水線(xiàn)的存取結(jié)束為止。
對(duì)當(dāng)前i 586TM微處理機(jī)的實(shí)施的特殊限制還包括·除OFJcc外,V流水線(xiàn)指令不能有前綴。
·代碼超高速緩存器中對(duì)應(yīng)于第一指令的結(jié)束位標(biāo)志必須適當(dāng)?shù)卦O(shè)定。(在轉(zhuǎn)讓給本發(fā)明的受讓人的、發(fā)明名稱(chēng)為“指令譯碼用的結(jié)束位標(biāo)志”的待審批的專(zhuān)利申請(qǐng)(申請(qǐng)?zhí)朹,申請(qǐng)日_)中,公開(kāi)了結(jié)束位標(biāo)志的概念)。
·預(yù)取緩沖器中具有足夠的操作碼字節(jié)供譯碼兩個(gè)指令之用。
·U或V流水線(xiàn)中的指令可取移位模式或直接模式,但不能兩者兼取。
·V流水線(xiàn)中不能有ADC和SBB指令(以避免依賴(lài)于U流水線(xiàn)進(jìn)位標(biāo)記)。
現(xiàn)在參看圖3,圖中示出了說(shuō)明本發(fā)明的廣義概念的雙指令譯碼器的方框圖。圖3中,U流水線(xiàn)操作碼和V流水線(xiàn)操作碼分別接到譯碼器12和14上。U流水線(xiàn)操作碼除接到譯碼器12外還接到另一個(gè)譯碼器13上。譯碼器12、13和14含有許多普通可編程的邏輯陣列(PLA),由這些邏輯陣列進(jìn)行全部指令的譯碼工作。舉例說(shuō),譯碼器12產(chǎn)生U流水線(xiàn)指令微代碼的第一向量,譯碼器14則有一個(gè)類(lèi)似的PLA,用于譯碼V流水線(xiàn)指令微代碼的第一向量。各微代碼向量由許多字段組成,其中含有諸如源寄存器位置、目標(biāo)寄存器、ALU操作信息、地址計(jì)算和移位直接等信息。
當(dāng)然,本發(fā)明的主要特點(diǎn)是圖3中所示的雙譯碼器能在一個(gè)周期內(nèi)發(fā)出一個(gè)或兩個(gè)指令。由于本發(fā)明的一個(gè)目的是要使本發(fā)明的微處理機(jī)能處理所有x86的指令系列,因此圖3的譯碼器分成兩個(gè)部分或分支。其中一個(gè)分支能處理x86指令集中的所有指令,另一個(gè)分支專(zhuān)門(mén)并行處理第二指令。換句話(huà)說(shuō),本發(fā)明包括這樣一個(gè)操作方式若不能滿(mǎn)足超級(jí)計(jì)算機(jī)的各項(xiàng)條件,則每個(gè)時(shí)鐘周期只執(zhí)行一項(xiàng)指令。
繼續(xù)參看圖3,兩個(gè)流水線(xiàn)非常相似,只是如不能滿(mǎn)足超級(jí)換計(jì)機(jī)的條件時(shí),U流水線(xiàn)就作為故障流水線(xiàn)而工作。這就是說(shuō),圖3中的U流水線(xiàn)分支能執(zhí)行全部x86指令,而V流水線(xiàn)則僅以全指令集中的子集為目標(biāo)。舉例說(shuō),譯碼器13和14是特為只譯碼整個(gè)x86指令集的子集而設(shè)計(jì)的。另一方面,當(dāng)計(jì)算機(jī)不履行每個(gè)時(shí)鐘周期的一個(gè)指令時(shí),譯碼器12就能譯碼整個(gè)指令集。在任何概念性序列中,U流水線(xiàn)總是表示序列中的第一指令,V流水線(xiàn)總是表示同一個(gè)序列的第二指令。
寄存器相關(guān)性的檢查由單元19進(jìn)行,單元19接收來(lái)自譯碼器13和14的輸出。譯碼器13和14的輸出(接到單元19)包括指示當(dāng)前指令的目標(biāo)寄存器的信息。單元19中的普通邏輯電路通過(guò)識(shí)別U流水線(xiàn)的目標(biāo)寄存器和保證V流水線(xiàn)指令中不使用該寄存器從而確定各指令的目標(biāo)寄存器中是否存在相關(guān)性。在進(jìn)行寄存器相關(guān)性檢查的同時(shí),單元17進(jìn)行長(zhǎng)度計(jì)算。換句話(huà)說(shuō),單元17計(jì)算指令對(duì)的長(zhǎng)度,即U流水線(xiàn)加V流水線(xiàn)指令的和。單元15只計(jì)算U流水線(xiàn)指令的長(zhǎng)度。
從根念上講,單元15和17的輸出接到多路復(fù)用器21上,該復(fù)用器輸出指令的長(zhǎng)度。多路復(fù)用器21被寄存器相關(guān)性檢查單元19輸出的、提供基本“發(fā)送1/發(fā)送2”(issueone/issuetwo)信息的信號(hào)ISELTWO所控制。信號(hào)ISELTWO是用以通過(guò)控制MUX22而有條件地執(zhí)行V流水線(xiàn)指令的同一個(gè)信號(hào)。當(dāng)寄存器相關(guān)性檢查單元19確定只能執(zhí)行一個(gè)指令時(shí),MUX21就被控制使得指令長(zhǎng)度等于U流水線(xiàn)向量當(dāng)時(shí)的長(zhǎng)度。在V流水線(xiàn)中,當(dāng)只發(fā)出一個(gè)指令時(shí),控制信號(hào)ISELTWO選擇“無(wú)操作”(“NOP”)并供多路復(fù)用器22加以輸出。在這種情況下,指令長(zhǎng)度完全來(lái)源自U流水線(xiàn)。
無(wú)寄存器相關(guān)性存在時(shí),兩個(gè)指令可并行執(zhí)行。在此情況下,選取MUX21輸出的長(zhǎng)度與U和V流水線(xiàn)一起的長(zhǎng)度計(jì)算值(即單元17的輸出)相等。在此情況下,處理機(jī)基本上把該對(duì)指令視為一個(gè)大指令。兩個(gè)指令并行執(zhí)行時(shí),MUX22就讓U流水線(xiàn)微代碼通過(guò),一直傳送到MUX22的輸出端。MUX21和MUX22輸出端處的信息耦合到微處理機(jī)的執(zhí)行機(jī)構(gòu)。執(zhí)行機(jī)構(gòu)通常包括地址計(jì)算部件、運(yùn)算邏輯部件(ALU)、數(shù)據(jù)通路、寄存器文件等。
應(yīng)該強(qiáng)調(diào)指出的是,圖3雙指令譯碼器所進(jìn)行的全部操作是在一個(gè)時(shí)鐘周期內(nèi)完成的。就是說(shuō),各操作碼都耦合到上譯碼器的輸入端,各矢量都由多路復(fù)用部件提供,這一切都在一個(gè)時(shí)鐘周期內(nèi)完成。
配對(duì)的舉例為了更好地理解和領(lǐng)會(huì)本發(fā)明的內(nèi)容,本發(fā)明提供下面的有關(guān)指令序列的一些實(shí)例。這些序列也舉例說(shuō)明了早先討論過(guò)的一些配對(duì)規(guī)則。(注在所提供的格式中,目標(biāo)操作數(shù)列在左側(cè))。
下面是成對(duì)的簡(jiǎn)單指令。
movedx,[ebx]addesi,4;
在此實(shí)例中,序列中的第一指令是“mov”,該指令由U流水線(xiàn)處理。U流水線(xiàn)指令的目標(biāo)寄存器是dex。由于在V流水線(xiàn)“add”指令中不以任何方式使用edx,而且由于兩個(gè)指令都在指令集內(nèi)(見(jiàn)表1),因而圖3的譯碼器能并行發(fā)出該兩個(gè)指令。
在執(zhí)行的過(guò)程中,第一指令操作碼(即“mov”)為U流水線(xiàn)操作碼,其中“add”為V流水線(xiàn)操作碼。上譯碼器12譯碼“mov”指令并產(chǎn)生用于將目標(biāo)寄存器確定為edx的U流水線(xiàn)向量。譯碼器還確定需要讀出存儲(chǔ)器,其中的地址由ebx確定。譯碼器12還識(shí)別地址計(jì)算的各分量,并確定那是一個(gè)向量的宏指令。同時(shí),子集譯碼器13測(cè)定“mov”是否處在適宜成雙發(fā)出的指令子集中。譯碼器13還識(shí)別將要被寄存器相關(guān)性檢查單元19使用的目標(biāo)寄存器dex。單元19會(huì)將edx與esi加以對(duì)比鑒定,并最后得出結(jié)論它們是不相同的。
在V流水線(xiàn)側(cè),V流水線(xiàn)譯碼器14檢查addesi,并識(shí)別出esi為目標(biāo)寄存器(在此實(shí)例中,esi也是源指令)。譯碼器14也識(shí)別直接分量(即4),接著單元17計(jì)算兩個(gè)指令的長(zhǎng)度。然后“add”指令沿V流水線(xiàn)往下送。這樣,由于兩個(gè)指令都是簡(jiǎn)單指令,且它們之間無(wú)相關(guān)性,因而這兩個(gè)指令可以配對(duì)。
其次再看看下面的配對(duì)實(shí)例movedx[ebx];
addedx,4;
在此實(shí)例中,U流水線(xiàn)的目標(biāo)寄存器為edx。由于V流水線(xiàn)指令中也使用這個(gè)目標(biāo)寄存器,因而相關(guān)性檢查邏輯電路確定兩個(gè)指令不能并行發(fā)出。在此情況下,先發(fā)出U流水線(xiàn)指令,而V流水線(xiàn)通路則仍然處在未被利用的狀態(tài)(即V流水線(xiàn)發(fā)出“NOP”)。在下一個(gè)時(shí)鐘周期內(nèi),在U流水線(xiàn)中執(zhí)行“add”指令。應(yīng)該理解的是,在下一個(gè)時(shí)鐘周期期間在U流水線(xiàn)中發(fā)出的add指令無(wú)論其在序列中后面所跟著的是什么指令都可以并行發(fā)出。兩個(gè)指令并行發(fā)出時(shí),序列中的下一個(gè)指令(“add”指令后面的指令)會(huì)在V流水線(xiàn)中發(fā)出。
現(xiàn)在看看下列實(shí)例lds[ebx];
pusheax;
在此實(shí)例中,裝入指令“l(fā)ds”并不在適宜并行執(zhí)行的指令子集中(見(jiàn)表1)。因此,lds指令在U流水線(xiàn)中發(fā)出,“push”指令則在下一個(gè)時(shí)鐘周期內(nèi)在U流水線(xiàn)中發(fā)出。在此情況下,U流水線(xiàn)的上譯碼器13將lds指令判定為不處在適宜并行發(fā)送的子集中。盡管兩個(gè)指令之間沒(méi)有相關(guān)性,情況也是如此。有一點(diǎn)很重要,即當(dāng)兩個(gè)指令不能并行發(fā)出時(shí),V流水線(xiàn)操作碼在下一個(gè)時(shí)鐘周期內(nèi)就成了U流水線(xiàn)操作碼,這時(shí)序列中的下一個(gè)指令成為V流水線(xiàn)操作碼。
應(yīng)該理解的是,本目前最佳實(shí)施例的x86指令子集特定的指令一覽表在不同的另一些實(shí)施例中是不同的。同時(shí),在各種不同的實(shí)施例中,如果存在容許兩項(xiàng)指令并行發(fā)出和執(zhí)行的專(zhuān)用硬件,則可以容許某些具有隱式相關(guān)性的指令配對(duì)。舉例說(shuō),目前最佳的實(shí)施例中具有可并行執(zhí)行下列指令的專(zhuān)用硬件cmpedx,o;
jnzloop在上述實(shí)例中,雖然與Z標(biāo)志具有隱式相關(guān)性,但微處理機(jī)具有能使這些指令并行發(fā)出和執(zhí)行的專(zhuān)用硬件。
配對(duì)兩個(gè)浮點(diǎn)指令時(shí),給整數(shù)指令配對(duì)而列出的最后三個(gè)條件并連同存儲(chǔ)器相關(guān)性檢查在目前這個(gè)實(shí)施例中不適用。原因在于,浮點(diǎn)指令沒(méi)有緊跟著的字節(jié)。此外,U流水線(xiàn)指令與V流水線(xiàn)中的FXCH指令之間容許有寄存器相關(guān)性。由于FXCH是寄存器與寄存器間的指令,因而存儲(chǔ)器相關(guān)性不適用。目前最佳實(shí)施例中可在兩個(gè)流水線(xiàn)中的任一流水線(xiàn)中配對(duì)的浮點(diǎn)指令子集列于表2。它們都是一個(gè)向量的指令。
熟悉本技術(shù)領(lǐng)域的普通技術(shù)人員在閱讀上述說(shuō)明之后都知道,對(duì)本發(fā)明的上述實(shí)施例是可以作種種變更和修改的,不言而喻,上述特定實(shí)施例決不能視為對(duì)本發(fā)明的限制。舉例說(shuō),盡管上述公開(kāi)內(nèi)容中表明必須滿(mǎn)足一系列特定的條件和法則,但在不脫離本發(fā)明的精神實(shí)質(zhì)或范圍的前提下也可以依賴(lài)于其它條件。因此,涉及附圖的細(xì)節(jié)并不能限制本發(fā)明權(quán)權(quán)利要求書(shū)的范圍,權(quán)利要求書(shū)則只引用了本發(fā)明的實(shí)質(zhì)性特點(diǎn)。
權(quán)利要求
1.一種可并行執(zhí)行兩個(gè)計(jì)算機(jī)指令的計(jì)算機(jī)系統(tǒng),其特征在于包括第一和第二指令流水線(xiàn)裝置,用于執(zhí)行計(jì)算機(jī)指令,所述第一流水線(xiàn)裝置工作時(shí)能執(zhí)行預(yù)定指令集發(fā)出的任何指令,所述第二流水線(xiàn)裝置工作時(shí)只能執(zhí)行來(lái)自所述預(yù)定指令集的指令子集;相關(guān)性檢查裝置,用以識(shí)別指令序列中第一指令的目標(biāo)寄存器,所述檢查裝置還確定在執(zhí)行所述序列中的第二指令過(guò)程中是否使用所述目標(biāo)寄存器,若不使用,所述相關(guān)性檢查裝置就指示第一條件得滿(mǎn)足;用于確定所述序列中的第一和第二指令是否存在于所述子集中的裝置,當(dāng)該第一和第二指令都在所述子集中時(shí),所述確定裝置指示第一條件得到滿(mǎn)足;指令配對(duì)裝置,用于在每當(dāng)所述第一和第二條件得到滿(mǎn)足時(shí)將所述第一和第二指令并行發(fā)送到所述第一和第二流水線(xiàn)裝置。
2.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其特征在于,每當(dāng)所述第一和第二條件得到滿(mǎn)足時(shí),所述第一和第二指令在一個(gè)時(shí)鐘周期內(nèi)發(fā)出。
3.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),其特征在于,每當(dāng)所述第一或第二條件得不到滿(mǎn)足時(shí),所述指令配對(duì)裝置只將所述序列中的所述第一指令發(fā)送到所述第一流水線(xiàn)裝置。
4.如權(quán)利要求3所述的計(jì)算機(jī)系統(tǒng),其特征在于,它還包括計(jì)算所述第一和第二指令的組合長(zhǎng)度的裝置。
5.如權(quán)利要求4所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述第一和第二指令各含有整數(shù)指令。
6.如權(quán)利要求4所述的計(jì)算機(jī)系統(tǒng),其特征在于,所述第一和第二指令各含有浮點(diǎn)指令。
7.一種具有一個(gè)中央處理單元(CPU)和一個(gè)執(zhí)行機(jī)構(gòu)的計(jì)算機(jī)系統(tǒng),該CPU用以處理由選自指令集的一序列指令所組成的程序,該執(zhí)行機(jī)構(gòu)用以執(zhí)行所述指令,其特征在于,所述系統(tǒng)包括第一和第二指令流水線(xiàn)裝置,用以執(zhí)行所述指令序列,其中多個(gè)指令在執(zhí)行的過(guò)程中同時(shí)重疊;譯碼裝置,用于譯碼來(lái)自所述序列的一對(duì)指令,從而產(chǎn)生第一和第二微代碼向量,以便分別在所述第一和第二指令流水線(xiàn)中執(zhí)行;所述譯碼裝置有一個(gè)用以確定所述第一和第二指令是否被包含在所述指令集的預(yù)定子集中的裝置;計(jì)算裝置,用以計(jì)算所述第一指令的長(zhǎng)度和所述第一和第二指令的組合長(zhǎng)度;用以確定所述一對(duì)指令之間不存在寄存器相關(guān)性的裝置,所述確定裝置在每當(dāng)存在相關(guān)性時(shí)產(chǎn)生一個(gè)信號(hào);多路復(fù)用裝置,用于在每當(dāng)收到所述信號(hào)且所述預(yù)定子集中含有所述第一和第二指令時(shí),將所述第一和第二微代碼向量和所述組合長(zhǎng)度發(fā)送到所述執(zhí)行機(jī)構(gòu),否則所述多路復(fù)用裝置發(fā)出所述長(zhǎng)度的所述微代碼指令。
8.如權(quán)利要求7所述的系統(tǒng),其特征在于,每當(dāng)所述多路復(fù)用裝置收到所述信號(hào)且所述預(yù)定子集中含有所述第一和第二指令時(shí),在所述系統(tǒng)的一個(gè)時(shí)鐘周期內(nèi)執(zhí)行所述第一和第二指令。
9.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述第一和第二指令包括整數(shù)指令。
10.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述第一和第二指令包括浮點(diǎn)指令。
全文摘要
一種計(jì)算機(jī)系統(tǒng)有一個(gè)雙指令譯碼器,當(dāng)兩指令之間無(wú)寄存器相關(guān)性,且它們都屬于整個(gè)指令集的預(yù)定子集時(shí),該雙指令譯碼器在一個(gè)時(shí)鐘周期內(nèi)并行發(fā)出該兩指令。該系統(tǒng)有執(zhí)行指令集中任何指令的第一指令流水線(xiàn)和只執(zhí)行按局部性原理選取的預(yù)定指令子集的第二流水線(xiàn)。寄存器相關(guān)性檢查器確定在執(zhí)行指令序列中的第二指令的過(guò)程中是否使用第一指令的目標(biāo)寄存器。當(dāng)兩個(gè)指令都在子集內(nèi)且無(wú)相關(guān)性時(shí),可在第一和第二流水線(xiàn)中發(fā)出第一和第二指令。
文檔編號(hào)G06F9/30GK1074771SQ93101139
公開(kāi)日1993年7月28日 申請(qǐng)日期1993年1月21日 優(yōu)先權(quán)日1992年1月23日
發(fā)明者E·T·格羅喬斯基, K·D·舒梅克, A·蔡迪, D·B·阿爾珀特 申請(qǐng)人:英特爾公司