專利名稱:控制使用動(dòng)態(tài)反饋的指令轉(zhuǎn)換的制作方法
背景技術(shù):
發(fā)明領(lǐng)域本發(fā)明涉及計(jì)算機(jī)系統(tǒng),尤其涉及用于提高微處理器的操作效率的方法,該微處理器動(dòng)態(tài)地將指令從一個(gè)目標(biāo)指令集轉(zhuǎn)換到一個(gè)主機(jī)指令集并推測(cè)被轉(zhuǎn)換的操作。
原先技術(shù)的歷史最近,開(kāi)發(fā)了一種新的微處理器,它將一個(gè)簡(jiǎn)單但快速的主機(jī)處理器(被稱作“變體主機(jī)”)和軟件(被稱作“代碼變體軟件”)組合起來(lái),以便執(zhí)行為“目標(biāo)”處理器設(shè)計(jì)的應(yīng)用程序,該目標(biāo)處理器具有與變體主機(jī)處理器的指令集不同的指令集。變體主機(jī)處理器執(zhí)行代碼變體軟件,以便將應(yīng)用程序動(dòng)態(tài)地轉(zhuǎn)換成能夠?qū)崿F(xiàn)原來(lái)的目標(biāo)軟件的目的的變體主機(jī)處理器指令。當(dāng)目標(biāo)指令被轉(zhuǎn)換時(shí),新的主機(jī)指令被執(zhí)行并被存儲(chǔ)在轉(zhuǎn)換緩沖器中,在那里,它們可以被存取而無(wú)須進(jìn)一步轉(zhuǎn)換。雖然過(guò)程的起始轉(zhuǎn)換緩慢,但是,一旦被轉(zhuǎn)換,硬件執(zhí)行過(guò)程通常所需的其中的許多步驟就被取消了。新的微處理器已經(jīng)證明,被設(shè)計(jì)成擴(kuò)展很少功率的簡(jiǎn)單的快速處理器能夠以等同于“目標(biāo)”處理器(程序?yàn)樗O(shè)計(jì))的速率的一個(gè)速率來(lái)執(zhí)行被轉(zhuǎn)換的“目標(biāo)”指令。
為了能夠以快的速率運(yùn)行為其他處理器設(shè)計(jì)的程序,變體主機(jī)處理器包括許多硬件改進(jìn)。這些改進(jìn)中的一個(gè)改進(jìn)是門控存儲(chǔ)緩沖器,它位于主機(jī)存儲(chǔ)器與轉(zhuǎn)換緩沖器之間。第二項(xiàng)改進(jìn)是一套主機(jī)寄存器(除了正常工作的寄存器以外),它們存儲(chǔ)任何序列的正在被轉(zhuǎn)換的目標(biāo)指令開(kāi)始時(shí)目標(biāo)處理器的已知狀態(tài)。執(zhí)行各個(gè)序列的變體主機(jī)指令時(shí)生成的內(nèi)存存儲(chǔ)被放置在門控存儲(chǔ)緩沖器中。如果變體主機(jī)指令的執(zhí)行沒(méi)有出現(xiàn)例外,則該序列指令開(kāi)始時(shí)的目標(biāo)狀態(tài)被更新到該被轉(zhuǎn)換指令序列完成點(diǎn)處的目標(biāo)狀態(tài),內(nèi)存存儲(chǔ)被記住。
如果在執(zhí)行一系列主機(jī)指令期間發(fā)生例外,則處理停止;整個(gè)操作可返回到該序列指令的開(kāi)端(其處存在目標(biāo)處理器的已知狀態(tài))。這允許非??焖?、準(zhǔn)確地處理例外——原先技術(shù)從未實(shí)現(xiàn)的一個(gè)結(jié)果。
將注意到,通過(guò)將由執(zhí)行生成的效果放置在臨時(shí)存儲(chǔ)器中直到完成轉(zhuǎn)換的執(zhí)行為止,新的微處理器處理轉(zhuǎn)換的執(zhí)行所用的方法是推測(cè)的一種非??焖俚挠行Х椒?。實(shí)際上,新的微處理器使用相同的線路,用于推測(cè)其他操作的結(jié)果。例如,通過(guò)臨時(shí)保存來(lái)自自然轉(zhuǎn)換的指令的一個(gè)軟件調(diào)度程序重新安排的指令的執(zhí)行結(jié)果,與原先技術(shù)的嘗試相比,可以實(shí)現(xiàn)更積極進(jìn)取的重新安排。當(dāng)這種被重新安排的序列的指令執(zhí)行以產(chǎn)生一個(gè)正確的結(jié)果時(shí),由執(zhí)行被重新安排的序列產(chǎn)生的內(nèi)存存儲(chǔ)可以被記住,目標(biāo)狀態(tài)可以被更新。如果被重新安排的序列在執(zhí)行時(shí)生成一個(gè)例外,那么,處理器的狀態(tài)可以被返回序列開(kāi)始時(shí)的目標(biāo)狀態(tài)并且采用的一種更保守的方法來(lái)轉(zhuǎn)換序列。
新的微處理器最有利的特點(diǎn)中的一個(gè)特點(diǎn)是它鏈接長(zhǎng)序列的轉(zhuǎn)換指令的能力。一旦短序列的目標(biāo)指令已被轉(zhuǎn)換并被發(fā)現(xiàn)執(zhí)行沒(méi)有例外,就可以鏈接大量這些短序列,以便形成長(zhǎng)序列的指令。這允許高速執(zhí)行一個(gè)轉(zhuǎn)換程序,因?yàn)槲⑻幚砥鞑恍枰?jīng)歷通常由硬件處理器采取的所有步驟(例如,查找每個(gè)較短的轉(zhuǎn)換序列)來(lái)執(zhí)行指令。甚至可以達(dá)到比可能預(yù)期的更高的速度,因?yàn)橐坏╅L(zhǎng)序列被鏈接,優(yōu)化器就經(jīng)常可以取消來(lái)自長(zhǎng)序列的許多步驟,而不改變產(chǎn)生的結(jié)果。硬件優(yōu)化器從未能夠優(yōu)化足夠長(zhǎng)的各個(gè)序列的指令,以便使允許重要的優(yōu)化的方式能夠變得顯而易見(jiàn)。
新的處理器所發(fā)生的一個(gè)問(wèn)題涉及只被執(zhí)行很少次數(shù)的各個(gè)序列的指令。例如,一個(gè)特殊的應(yīng)用程序所需的初始化操作指令,經(jīng)常是只有當(dāng)該應(yīng)用初次調(diào)用時(shí)才被執(zhí)行;終止應(yīng)用程序所需操作的指令,經(jīng)常只是當(dāng)實(shí)際上終止程序時(shí)才執(zhí)行。新處理器的原來(lái)的實(shí)施例通常按相同的方式來(lái)對(duì)待所有的指令。它為一個(gè)目標(biāo)指令解碼,生成執(zhí)行目標(biāo)指令為其設(shè)計(jì)的功能的原始主機(jī)指令,優(yōu)化該序列的主機(jī)指令,然后將被轉(zhuǎn)換和被優(yōu)化的指令存儲(chǔ)在轉(zhuǎn)換緩沖存儲(chǔ)器中。當(dāng)新的處理器的操作繼續(xù)進(jìn)行時(shí),各個(gè)序列的轉(zhuǎn)換指令相互鏈接并被進(jìn)一步優(yōu)化;較長(zhǎng)序列的被鏈接指令被存儲(chǔ)在轉(zhuǎn)換緩沖器中。最后,大批轉(zhuǎn)換指令被存儲(chǔ)為特大批的主機(jī)指令。當(dāng)在一個(gè)特殊的主機(jī)指令或一套被鏈接指令的執(zhí)行期間發(fā)生一個(gè)例外時(shí),新的處理器履行返回目標(biāo)處理器的最近正確狀態(tài)的進(jìn)程,然后把目標(biāo)指令的單步轉(zhuǎn)換從最近正確狀態(tài)的點(diǎn)提供到例外再次發(fā)生的點(diǎn)。這些轉(zhuǎn)換也被存儲(chǔ)在轉(zhuǎn)換緩沖器中。Kelly等人于1998年11月3日發(fā)行的第5,832,205號(hào)美國(guó)專利中詳細(xì)描述了新處理器的這個(gè)實(shí)施例,并授讓給了本發(fā)明的授讓人。
雖然這個(gè)程序創(chuàng)建快速執(zhí)行的代碼,但是,該程序所擁有的許多效果會(huì)限制可達(dá)到的總速度并可能引起其他不合乎需要的效果。首先,該程序要求大量轉(zhuǎn)換指令的存儲(chǔ)容量。很多時(shí)候,一套相同的目標(biāo)指令存在許多不同的轉(zhuǎn)換,因?yàn)楦鱾€(gè)序列從不同的分支被輸入。一旦被存儲(chǔ),轉(zhuǎn)換指令就占據(jù)轉(zhuǎn)換緩沖器,直到為某種肯定的原因被除去為止。其次,如果一系列指令將只被執(zhí)行幾次,則轉(zhuǎn)換和優(yōu)化所需的時(shí)間可能比執(zhí)行最初目標(biāo)指令的逐步轉(zhuǎn)換所需的時(shí)間要多許多。很少被使用的各個(gè)序列的轉(zhuǎn)換指令的優(yōu)化趨向于降低新的處理器的平均速度。
由于這些原因,新處理器的所述實(shí)施例被修改,以便包括一個(gè)解釋程序(作為代碼變體軟件的一部分),該解釋程序?qū)崿F(xiàn)每個(gè)目標(biāo)指令的逐步轉(zhuǎn)換。解釋程序本質(zhì)上取出一個(gè)目標(biāo)指令,為該指令解碼,提供一個(gè)主機(jī)過(guò)程以便實(shí)現(xiàn)目標(biāo)指令的目的,并執(zhí)行該主機(jī)過(guò)程。當(dāng)完成解釋和執(zhí)行一個(gè)目標(biāo)指令時(shí),目標(biāo)處理器的狀態(tài)被達(dá)到最新的研究水平;解釋程序進(jìn)行到下一個(gè)目標(biāo)指令。這個(gè)過(guò)程實(shí)質(zhì)上一步步通過(guò)對(duì)目標(biāo)指令的解釋和執(zhí)行。由解釋程序產(chǎn)生的主機(jī)指令通常不被存儲(chǔ)在轉(zhuǎn)換緩沖器中,因此,在不執(zhí)行鏈接后,可以實(shí)行優(yōu)化、鏈接和進(jìn)一步的優(yōu)化。解釋程序?yàn)樵撔蛄械哪繕?biāo)指令的剩余部分繼續(xù)進(jìn)行這個(gè)過(guò)程。
一般而言,確定直到已發(fā)生對(duì)任何序列的指令的某些執(zhí)行,所有以前的解釋和執(zhí)行所需的時(shí)間才等同于轉(zhuǎn)換和優(yōu)化該序列所需的時(shí)間。所以,對(duì)于在一個(gè)應(yīng)用程序的執(zhí)行過(guò)程中很少被使用的一系列指令而言,當(dāng)其只被解釋而不被轉(zhuǎn)換時(shí),它們執(zhí)行得更快。
為了使用這個(gè)優(yōu)點(diǎn),只要一系列目標(biāo)指令首先被遇到,就可修改被改善的處理器,以便使用解釋程序。解釋程序軟件與一個(gè)計(jì)數(shù)器有關(guān),該計(jì)數(shù)器了解執(zhí)行各個(gè)序列的指令的次數(shù)。每當(dāng)序列被遇到時(shí),就可以運(yùn)行解釋程序,直到已執(zhí)行該序列某些次數(shù)而不生成一個(gè)例外為止。當(dāng)各個(gè)序列的目標(biāo)指令已被解釋和執(zhí)行所選的一定次數(shù)時(shí),代碼變體軟件從解釋程序轉(zhuǎn)換到翻譯程序及其附帶的優(yōu)化與存儲(chǔ)程序。當(dāng)發(fā)生這種情況時(shí),將已經(jīng)發(fā)生足夠數(shù)量的執(zhí)行,該序列指令的進(jìn)一步執(zhí)行可能會(huì)發(fā)生,被存儲(chǔ)的優(yōu)化轉(zhuǎn)換將會(huì)提供總體上速度大大加快的應(yīng)用程序的執(zhí)行。
當(dāng)代碼變體軟件切換到正常的轉(zhuǎn)換過(guò)程時(shí),轉(zhuǎn)換被優(yōu)化并被存儲(chǔ)在轉(zhuǎn)換緩沖器中。其后,那個(gè)轉(zhuǎn)換可以被進(jìn)一步優(yōu)化并被鏈接到其他的轉(zhuǎn)換,以便可以獲得從這些過(guò)程實(shí)現(xiàn)的非常高速度的執(zhí)行。
如果除一個(gè)特殊序列的目標(biāo)指令已被執(zhí)行的次數(shù)以外,解釋程序還被用來(lái)收集統(tǒng)計(jì)數(shù)字,則可以獲得額外的重要優(yōu)點(diǎn)。例如,如果目標(biāo)指令包括一個(gè)分支,則對(duì)其分支的指令的地址與分支已被執(zhí)行的次數(shù)可以一起被記錄下來(lái)。然后,當(dāng)許多連續(xù)的指令由解釋程序來(lái)執(zhí)行時(shí),將會(huì)已經(jīng)建立了分支的歷史和分支地址。這些統(tǒng)計(jì)數(shù)字可以被用來(lái)推測(cè)一個(gè)特殊序列的指令是否可能將成為特大批轉(zhuǎn)換指令。在被解釋所選次數(shù)之后,該序列可以被轉(zhuǎn)換、被優(yōu)化、通過(guò)各種分支被鏈接而不必經(jīng)歷一項(xiàng)分開(kāi)的鏈接操作,并這樣被存儲(chǔ)在轉(zhuǎn)換緩沖器中。如果推測(cè)是正確的,則在處理指令的過(guò)程中節(jié)省了大量時(shí)間。如果不正確,則操作只產(chǎn)生將代碼變體軟件返回解釋程序的一個(gè)例外。
解釋程序不僅用于為很少使用的序列生成主機(jī)代碼,它也用于處理例外的過(guò)程中。只要被修改的處理器在執(zhí)行任何被轉(zhuǎn)換的目標(biāo)應(yīng)用程序時(shí)遇到一個(gè)目標(biāo)例外,代碼變體軟件就使目標(biāo)處理器的最近已知的正確狀態(tài)發(fā)生退回重來(lái)。然后,代碼變體軟件使用解釋程序(而非翻譯程序),來(lái)提供一套新的主機(jī)指令。解釋程序一步步通過(guò)目標(biāo)指令的生成和執(zhí)行。當(dāng)每個(gè)指令被解釋時(shí),使目標(biāo)狀態(tài)達(dá)到最新的研究水平。
解釋程序在該序列的目標(biāo)指令中繼續(xù)進(jìn)行這個(gè)過(guò)程,直到再次發(fā)生例外。在這一點(diǎn)上,目標(biāo)處理器的狀態(tài)對(duì)于解釋的狀態(tài)而言是正確的,以便可以正確、迅速地處理該例外。因?yàn)榻忉尦绦蚴侨绱撕?jiǎn)單,所以,確定目標(biāo)例外的發(fā)生點(diǎn)的過(guò)程要大大快于對(duì)由轉(zhuǎn)換過(guò)程執(zhí)行的這種點(diǎn)的確定。這種點(diǎn)經(jīng)歷上述的轉(zhuǎn)換和優(yōu)化過(guò)程,然后被存儲(chǔ)在轉(zhuǎn)換緩沖器中。而且,解釋不生成額外序列的主機(jī)指令,它們被存儲(chǔ)在轉(zhuǎn)換緩沖器中并有助于過(guò)度充填該緩沖器。
通過(guò)將解釋程序與優(yōu)化翻譯程序(用作各個(gè)序列的轉(zhuǎn)換指令的一個(gè)動(dòng)態(tài)編輯器)組合,代碼變體軟件除去許多限制,這些是對(duì)新的處理器高速執(zhí)行目標(biāo)應(yīng)用程序的限制。使用解釋程序來(lái)處理各個(gè)序列指令的早期執(zhí)行取消了優(yōu)化在應(yīng)用程序執(zhí)行期間很少被使用的指令的需求,從而提高了操作的速度。取消將這些很少被使用的指令存儲(chǔ)在轉(zhuǎn)換緩沖器中的需求減少了對(duì)存儲(chǔ)的要求,并取消了放棄許多轉(zhuǎn)換指令的要求。使用解釋程序來(lái)處理例外產(chǎn)生了與使用翻譯程序相同的有用效果,但卻加快了操作,減少了存儲(chǔ)要求。
R.Bedichek等人于偶數(shù)日提交并授讓給本發(fā)明的授讓人的系列號(hào)為_______的美國(guó)專利申請(qǐng)“綜合微處理器中的解釋和轉(zhuǎn)換的方法”中詳細(xì)描述了新處理器的被改善的實(shí)施例。
最近,該處理器進(jìn)一步被修改,以提高解釋程序和翻譯程序的應(yīng)用。已經(jīng)通過(guò)提供兩種以上的操作模式來(lái)實(shí)現(xiàn)這一點(diǎn)。因?yàn)榧词剐蛄性谵D(zhuǎn)換之前已被頻繁使用,一旦被完成和優(yōu)化,轉(zhuǎn)換也還是得不到廣泛的使用,所以,在簡(jiǎn)單的解釋與被優(yōu)化的轉(zhuǎn)換之間提供了額外模式的操作。例如,一系列目標(biāo)指令可以首先由解釋程序執(zhí)行許多次,然后,利用最小的優(yōu)化來(lái)被轉(zhuǎn)換并被存儲(chǔ)在轉(zhuǎn)換緩沖器中。被轉(zhuǎn)換的序列是可操作的,并且執(zhí)行的速度比解釋更快;但是,如果分配足夠的時(shí)間,則可以將它優(yōu)化到一個(gè)更大的程度。為了決定是否通過(guò)在其他事物中將它鏈接到其他序列來(lái)進(jìn)一步優(yōu)化該序列,可以運(yùn)行第二項(xiàng)測(cè)試。這項(xiàng)測(cè)試本質(zhì)上檢查在解釋或轉(zhuǎn)換過(guò)程中正在使用的時(shí)間數(shù)量,以便確定系統(tǒng)正在有效地運(yùn)行。
具有從一個(gè)層次移到另一個(gè)層次的不同測(cè)試的多層次轉(zhuǎn)換供應(yīng)改進(jìn)了改善過(guò)的處理器的操作。Torvalds等人于偶數(shù)日提交并授讓給本發(fā)明的授讓人的系列號(hào)為______的美國(guó)專利申請(qǐng)“改變代碼生成模式的方法”中詳細(xì)描述了新處理器的這個(gè)被改善的實(shí)施例。
即使解釋程序和翻譯程序的各種組合用于大大改善獨(dú)特的微處理器的操作,在操作過(guò)程中也仍然留有一些問(wèn)題。一般可以將這些問(wèn)題描述為不能最適宜地使用各種存在的功能。當(dāng)包括一個(gè)內(nèi)部分支的一系列指令根據(jù)將采用一個(gè)特殊分支的假定來(lái)被進(jìn)行轉(zhuǎn)換時(shí),發(fā)生這種情況的一個(gè)例子。當(dāng)該序列被轉(zhuǎn)換時(shí),比較另一個(gè)可能的分支而言,可以更經(jīng)常地一致采用那個(gè)分支。但是,當(dāng)環(huán)境變化時(shí),比較為其優(yōu)化轉(zhuǎn)換的分支而言,可以更經(jīng)常地采用另一個(gè)分支。發(fā)生這種情況是因?yàn)榭刂品种У臄?shù)據(jù)可能會(huì)發(fā)生變化,或因?yàn)樵趩?dòng)或關(guān)閉期間被使用的程序的運(yùn)作不同于在程序的正常操作期間被使用的情況。在這種情況下,原來(lái)的轉(zhuǎn)換仍然可完美地操作;但是,它被優(yōu)化,以支持錯(cuò)誤的分支。采用該分支而不采用為其優(yōu)化序列的分支,這使轉(zhuǎn)換退回重來(lái)并使用解釋程序來(lái)提供一套連續(xù)的主機(jī)指令。當(dāng)這種情況的發(fā)生比轉(zhuǎn)換的執(zhí)行更頻繁時(shí),總體處理器速度被大大減小。
但是,轉(zhuǎn)換保留在轉(zhuǎn)換緩沖器中。轉(zhuǎn)換仍然可完美地操作,并且以后可被用于運(yùn)行應(yīng)用程序中。轉(zhuǎn)換緩沖器繼續(xù)存儲(chǔ)正確執(zhí)行的每個(gè)新的轉(zhuǎn)換。在已提供某些新的轉(zhuǎn)換之后,轉(zhuǎn)換緩沖器趨向于供應(yīng)限制可被存儲(chǔ)的新的轉(zhuǎn)換。于是,這減慢了被改善的處理器的操作。
需要提高被改善的微處理器的操作速度,以便通過(guò)響應(yīng)于在改善過(guò)的處理器的操作期間所經(jīng)歷的變化的條件來(lái)修改用于控制使用代碼變體軟件的解釋程序和翻譯程序軟件的處理器,它可以更快速地加以執(zhí)行。
發(fā)明概要所以,本發(fā)明的一個(gè)目的是提供一種更快的微處理器,它可兼容并能夠運(yùn)行應(yīng)用程序和以更快的速率操作為其他微處理器設(shè)計(jì)的系統(tǒng)。
本發(fā)明的這個(gè)和其他目的通過(guò)一種方法來(lái)加以實(shí)現(xiàn),該方法用于修改計(jì)算機(jī)內(nèi)的操作條件,它將指令從一個(gè)目標(biāo)指令集轉(zhuǎn)換到一個(gè)主機(jī)指令集,包括的步驟是監(jiān)控在計(jì)算機(jī)的一個(gè)部件內(nèi)發(fā)生的一個(gè)事件;計(jì)算在選擇的間隔內(nèi)發(fā)生的事件;如果選擇的間隔內(nèi)的事件總數(shù)超過(guò)規(guī)定的限制,則生成例外;以及,通過(guò)改變一個(gè)被轉(zhuǎn)換序列的主機(jī)指令,來(lái)響應(yīng)該例外。
通過(guò)參考以下詳細(xì)的描述并結(jié)合附圖,將會(huì)更好地理解本發(fā)明的這些和其他的目的與特點(diǎn)。在附圖中,類似的元素在幾幅視圖中有類似的名稱。
附圖簡(jiǎn)述
圖1是展示根據(jù)本發(fā)明的一種方法的流程圖。
圖2是展示根據(jù)本發(fā)明的一種方法的另一幅流程圖。
圖3展示了對(duì)一種類型的事件的檢測(cè)。
圖4是展示根據(jù)本發(fā)明來(lái)設(shè)計(jì)的線路的方框圖。
詳細(xì)描述如上所述,一個(gè)轉(zhuǎn)換可以展示至少兩種不同的行為,需要對(duì)其加以改善,以便提高總體的處理速度。一系列指令可能一直拙劣地被轉(zhuǎn)換,因?yàn)樵谵D(zhuǎn)換時(shí)要確定應(yīng)該對(duì)其更高度地加以優(yōu)化的經(jīng)驗(yàn)不足。如果這種轉(zhuǎn)換(而非只是緩慢)生成大量的退回重來(lái),則轉(zhuǎn)換也許需要被放棄和重做。另一方面,轉(zhuǎn)換可能最初一直被較佳地轉(zhuǎn)換并得到很好的優(yōu)化,但是,環(huán)境可能已發(fā)生變化,以致優(yōu)化條件不再存在。所以,這種轉(zhuǎn)換也導(dǎo)致多得多的退回重來(lái),而不是按需要維持處理速度。
根據(jù)本發(fā)明,計(jì)算機(jī)的操作條件在操作期間被評(píng)估,所獲得的結(jié)果被用來(lái)修改正在執(zhí)行的轉(zhuǎn)換。在一個(gè)實(shí)施例中,如果轉(zhuǎn)換大大減慢計(jì)算機(jī)的操作,則該轉(zhuǎn)換被放棄,以便處理器及其代碼變體軟件可以生成更有效序列的主機(jī)指令。
作為一項(xiàng)一般的建議,可以計(jì)數(shù)單個(gè)序列的轉(zhuǎn)換,以便確定所采用的分支并從這些統(tǒng)計(jì)數(shù)字中確定特殊的轉(zhuǎn)換何時(shí)正在經(jīng)歷太多的退回重來(lái)。例如,如圖1中的流程圖所示,通過(guò)跟蹤使用轉(zhuǎn)換緩沖器中序列的內(nèi)存地址的所有序列的轉(zhuǎn)換指令的執(zhí)行,可以確定一個(gè)序列執(zhí)行,而無(wú)需退回重來(lái)的次數(shù)和所采用的分支。預(yù)期所采用的分支和轉(zhuǎn)換被執(zhí)行的次數(shù)的比較提供了退回重來(lái)與該序列執(zhí)行的比率。該結(jié)果可以被用來(lái)放棄引起過(guò)多的退回重來(lái)從而減慢系統(tǒng)總體操作的各個(gè)序列的轉(zhuǎn)換。
但是,為了用這種方法確定退回重來(lái)的效果,要求大量的系統(tǒng)資源。一個(gè)計(jì)數(shù)器必須被分配給每個(gè)序列的指令或在各個(gè)序列之間被共享,必須為每個(gè)序列、分支地址和分支被采用的次數(shù)提供存儲(chǔ)器,必須計(jì)算比率并根據(jù)所需的值對(duì)其加以測(cè)試。對(duì)于任何實(shí)際尺寸的一個(gè)程序,這種努力會(huì)成為系統(tǒng)的一個(gè)過(guò)度的負(fù)擔(dān)。
結(jié)果,發(fā)現(xiàn)了一種更好的方法,該方法幾乎不需要系統(tǒng)資源,但卻迅速實(shí)現(xiàn)了理想的結(jié)果。更先進(jìn)的方法克服了導(dǎo)致不合乎需要的轉(zhuǎn)換并允許在轉(zhuǎn)換中進(jìn)行其他合乎需要的修改的這兩個(gè)問(wèn)題。本質(zhì)上,圖2所示的方法直接跟蹤某個(gè)系統(tǒng)事件(例如,退回重來(lái))。如果該事件發(fā)生的次數(shù)超過(guò)一個(gè)間隔期間所規(guī)定的次數(shù),則修改轉(zhuǎn)換,以便按一種更有效的方式來(lái)處理它。在退回重來(lái)事件的情況下,這可能意味著第一個(gè)序列的轉(zhuǎn)換指令被放棄并總是從那個(gè)點(diǎn)被加以解釋,因?yàn)樵撔蛄械膱?zhí)行很少?;蛘?,它可能意味著該序列被立即重新轉(zhuǎn)換和優(yōu)化,以符合執(zhí)行該程序時(shí)存在的新的操作條件。
一般而言,本發(fā)明利用通過(guò)使用最少的資源就可達(dá)到的系統(tǒng)事件。使用容易達(dá)到的系統(tǒng)事件可以獲得本發(fā)明理想的結(jié)果,幾乎沒(méi)有硬件或處理時(shí)間方面的開(kāi)支。例如,通過(guò)計(jì)數(shù)被執(zhí)行的每個(gè)退回重來(lái)指令,可以確定退回重來(lái)發(fā)生的次數(shù)。確定正在被執(zhí)行的指令是退回重來(lái)指令要求按圖3所示的方法將每個(gè)指令與表示退回重來(lái)的一個(gè)登記值進(jìn)行簡(jiǎn)單的比較。如果兩者相同,則生成一個(gè)事件計(jì)數(shù)。許多其他的事件可以用類似的方法被生成和計(jì)數(shù)。
一些事件通常已經(jīng)在硬件中,用于測(cè)試或其他的目的。例如,通常通過(guò)倒數(shù)計(jì)時(shí)系統(tǒng)時(shí)鐘來(lái)生成一個(gè)定時(shí)事件。
即使先進(jìn)的方法在與已被監(jiān)控的事件并用時(shí)是最有效的,通過(guò)只增加其他的事件計(jì)數(shù)器和按本發(fā)明所教授的方式使用計(jì)數(shù)器產(chǎn)生的結(jié)果,本發(fā)明也可以被容易地?cái)U(kuò)展到其他的系統(tǒng)事件。用于這個(gè)目的的硬件要求很少的額外開(kāi)支。
根據(jù)本發(fā)明,計(jì)算一個(gè)特殊的選擇事件在一個(gè)間隔期間發(fā)生的次數(shù),如果多于任何選擇事件的最大數(shù)量,則使用該事實(shí)來(lái)改變引起事件的轉(zhuǎn)換。例如,對(duì)于退回重來(lái)事件,在某個(gè)選擇的間隔內(nèi)計(jì)數(shù)退回重來(lái)的數(shù)量。如果該間隔內(nèi)的退回重來(lái)太多,則放棄在一個(gè)實(shí)施例中使退回重來(lái)數(shù)量超過(guò)限制的轉(zhuǎn)換序列。
通過(guò)確定被放棄每個(gè)退回重來(lái)的指令數(shù)量和找出每個(gè)退回重來(lái)的執(zhí)行時(shí)間的平均損失,可以建立有限數(shù)量的退回重來(lái)。根據(jù)這個(gè)平均值,可以計(jì)算退回重來(lái)所用時(shí)間和執(zhí)行所用的總時(shí)間的理想的百分比。在一種情況下,選擇小于2%的總執(zhí)行時(shí)間的一個(gè)百分比。通過(guò)只增長(zhǎng)或縮短間隔(其間,退回重來(lái)事件的數(shù)量被相加,以確定總數(shù)是否超過(guò)該值),就可以將這個(gè)值設(shè)置為需要的值。當(dāng)間隔已被設(shè)置為一個(gè)容許的值時(shí),如果總數(shù)超過(guò)這個(gè)值,則放棄使該值增加超過(guò)限制的轉(zhuǎn)換序列。
在本發(fā)明的一個(gè)實(shí)施例中,通過(guò)生成一個(gè)例外,來(lái)實(shí)現(xiàn)放棄。該例外選擇放棄執(zhí)行轉(zhuǎn)換序列的一個(gè)例外處理程序。應(yīng)該注意,被放棄的該序列的轉(zhuǎn)換指令實(shí)際上可能不是正在使大量退回重來(lái)發(fā)生的一個(gè)序列。它可能只是這樣一個(gè)序列,它偶爾會(huì)引起一個(gè)退回重來(lái),碰巧會(huì)發(fā)生在所選間隔期間的許多其他的退回重來(lái)之后。但是,由于如果頻繁使用該序列則原來(lái)的轉(zhuǎn)換不久將被類似的有效轉(zhuǎn)換代替,因此,放棄一系列有效的轉(zhuǎn)換指令將很少會(huì)減慢執(zhí)行。另一方面,使退回重來(lái)計(jì)數(shù)增大的運(yùn)作拙劣的各個(gè)序列的轉(zhuǎn)換不久將由相同的過(guò)程放棄,因?yàn)槿魏芜@樣的序列更可能是使退回重來(lái)計(jì)數(shù)超過(guò)限制并生成使一個(gè)轉(zhuǎn)換被放棄的例外的序列。一旦一個(gè)拙劣轉(zhuǎn)換已被放棄,就開(kāi)始首先解釋、然后生成一個(gè)新的轉(zhuǎn)換,以后廣泛優(yōu)化該新轉(zhuǎn)換來(lái)符合新的操作條件的開(kāi)始。
至少有兩種可以根據(jù)本發(fā)明來(lái)使用的間隔,用于評(píng)估一個(gè)事件(特別是一個(gè)退回重來(lái)事件)的計(jì)數(shù)。這些間隔中的一個(gè)間隔是時(shí)間間隔。這種間隔可以由事件計(jì)數(shù)器來(lái)確定,只要已發(fā)生一定數(shù)量的處理器周期,該事件計(jì)數(shù)器就生成一個(gè)輸出。例如,可以將間隔選擇為具有現(xiàn)代處理器的千分之一秒。另一種間隔趨向于在測(cè)量由一個(gè)事件(例如,退回重來(lái))所用的總執(zhí)行時(shí)間的百分比時(shí)提供更加準(zhǔn)確的結(jié)果,該間隔基于執(zhí)行選擇數(shù)量的指令。這樣,指令執(zhí)行可以被認(rèn)為是一個(gè)事件,所執(zhí)行的指令的數(shù)量增加到某個(gè)最大限度,以確定一個(gè)間隔。通過(guò)使用對(duì)間隔的這種測(cè)量,在確定退回重來(lái)時(shí)間的百分比時(shí),將每個(gè)指令的實(shí)際效果考慮進(jìn)去。
使用本發(fā)明的方法具有許多優(yōu)點(diǎn)。首先,如果在一個(gè)間隔期間計(jì)數(shù)所有的退回重來(lái)以便確定是否放棄轉(zhuǎn)換程序,并且使計(jì)數(shù)超過(guò)最大限度的一個(gè)序列被放棄,那么,只放棄實(shí)際正在被執(zhí)行的序列。該方法對(duì)不正在運(yùn)行的好轉(zhuǎn)換或壞轉(zhuǎn)換沒(méi)有影響。該方法只放棄已經(jīng)導(dǎo)致最大限度被超過(guò)的一個(gè)轉(zhuǎn)換。一旦序列已被放棄,確定序列解釋、轉(zhuǎn)換和優(yōu)化的一般方法就控制序列的處理。如果序列在被放棄后沒(méi)有被加以執(zhí)行,則它不可能被重新轉(zhuǎn)換,并且非常不可能被廣泛地優(yōu)化。另一方面,如果經(jīng)常在第一個(gè)轉(zhuǎn)換已被放棄之后執(zhí)行一個(gè)序列,則它非常有可能被廣泛地重新轉(zhuǎn)換和優(yōu)化,以配合新的環(huán)境。
可以被用來(lái)提供有關(guān)各個(gè)序列的轉(zhuǎn)換的動(dòng)態(tài)反饋的其他類型的事件是由重新安排錯(cuò)誤而引起的例外。被改善的處理器使用線路,該線路包括用于如果嘗試寫(xiě)到一個(gè)被保護(hù)的內(nèi)存位置則生成一個(gè)例外的裝置。
用于為寫(xiě)到被保護(hù)的內(nèi)存位置生成例外的線路被用來(lái)提高改善過(guò)的處理器的能力,以便生成更快執(zhí)行的代碼。線路允許調(diào)度程序安排也許不會(huì)弄錯(cuò)的各個(gè)序列的推測(cè)轉(zhuǎn)換。通過(guò)將由調(diào)度程序重新安排的指令存儲(chǔ)在被保護(hù)的內(nèi)存位置中,來(lái)實(shí)現(xiàn)這一點(diǎn),以便嘗試寫(xiě)一個(gè)被保護(hù)的位置可生成一個(gè)例外。如果轉(zhuǎn)換通過(guò)嘗試寫(xiě)到一個(gè)被保護(hù)的位置來(lái)生成一個(gè)例外,則采取退回重來(lái)。G.Rozas等人于1999年6月14日提交并授讓于本發(fā)明的授讓人的美國(guó)專利申請(qǐng)(系列號(hào)為09/332,338)“用于改進(jìn)高級(jí)微處理器中的調(diào)度的方法和裝置”中詳細(xì)描述了該技術(shù)。
這種內(nèi)存保護(hù)例外的生成提供了一個(gè)事件,該事件根據(jù)本發(fā)明可被用于確定轉(zhuǎn)換無(wú)法經(jīng)常提供正確的結(jié)果。由于這種例外不一定表示轉(zhuǎn)換是錯(cuò)誤的(因?yàn)檗D(zhuǎn)換可能經(jīng)常成功),因此,系統(tǒng)可能在間隔期間計(jì)數(shù)這些例外,并且,每當(dāng)它生成一個(gè)例外的時(shí)間大于最大數(shù)量十分之一時(shí),放棄一個(gè)轉(zhuǎn)換。如果轉(zhuǎn)換真的非常拙劣并正在經(jīng)常生成這種形式的例外,則該轉(zhuǎn)換將幾乎立即被放棄。如果不是這樣,那么,轉(zhuǎn)換可留在適當(dāng)?shù)奈恢貌⒗^續(xù)生成很少的例外。只有當(dāng)一項(xiàng)不合適的操作發(fā)生許多次數(shù)時(shí)才放棄轉(zhuǎn)換的這種相同的方法可以根據(jù)本發(fā)明被用于其他的事件。
另一項(xiàng)操作提供可被用來(lái)提供動(dòng)態(tài)反饋(可根據(jù)它來(lái)修改轉(zhuǎn)換)的一個(gè)事件,該操作被稱作“T位例外”。T位與項(xiàng)目一起被放置在新處理器的轉(zhuǎn)換后備緩沖器中,以便用信號(hào)通知被尋址的內(nèi)存頁(yè)面包括轉(zhuǎn)換指令。當(dāng)嘗試寫(xiě)到保存目標(biāo)指令(已經(jīng)被轉(zhuǎn)換成主機(jī)指令)的內(nèi)存頁(yè)面時(shí),生成T位例外。
T位的目的是當(dāng)從其生成轉(zhuǎn)換的目標(biāo)指令發(fā)生變化時(shí),取消一個(gè)轉(zhuǎn)換。但是,利用一些目標(biāo)處理器(特別是因特爾X86種類),內(nèi)存頁(yè)面可以包括被轉(zhuǎn)換的指令和數(shù)據(jù);應(yīng)該允許將數(shù)據(jù)寫(xiě)到頁(yè)面。所以,已經(jīng)設(shè)計(jì)了一種新的過(guò)程,通過(guò)該過(guò)程,代碼變體軟件可以確定嘗試寫(xiě)到內(nèi)存頁(yè)面是到存儲(chǔ)已經(jīng)被轉(zhuǎn)換的目標(biāo)指令的區(qū)域,還是到數(shù)據(jù)區(qū)域。通過(guò)將內(nèi)存頁(yè)面分成較小的區(qū)域并存儲(chǔ)每個(gè)這些較小的區(qū)域是否包括已經(jīng)被轉(zhuǎn)換的指令的指示,來(lái)實(shí)現(xiàn)該過(guò)程。通過(guò)只要發(fā)生一個(gè)T位例外就核查這些指示,軟件可以取代T位例外,以便如果寫(xiě)到數(shù)據(jù)區(qū)域,則忽略該例外。但是,如果一個(gè)特殊的頁(yè)面正在生成許多這些例外(它們都被駁回),則足夠的開(kāi)支被加于各項(xiàng)操作,經(jīng)常需要只放棄整個(gè)頁(yè)面和重新進(jìn)行轉(zhuǎn)換,以便在安排上加以改善。為了實(shí)現(xiàn)這一點(diǎn),當(dāng)一定數(shù)量的錯(cuò)誤(例如,100)已經(jīng)在一個(gè)特殊的間隔期間發(fā)生時(shí),系統(tǒng)計(jì)數(shù)T位例外并放棄整個(gè)內(nèi)存頁(yè)面。
通過(guò)使用本發(fā)明,另一個(gè)特別難的問(wèn)題也可以得到緩和。轉(zhuǎn)換經(jīng)常被最低程度地優(yōu)化,因?yàn)樵谵D(zhuǎn)換發(fā)生的時(shí)候,有關(guān)正在被轉(zhuǎn)換的序列的經(jīng)驗(yàn)很少。如果不經(jīng)常使用該序列,則廣泛優(yōu)化的費(fèi)用會(huì)太高。這種轉(zhuǎn)換可以完美地運(yùn)作,因?yàn)椴粫?huì)發(fā)生退回重來(lái)。但是,被更好地優(yōu)化的轉(zhuǎn)換將節(jié)省大量的處理時(shí)間。
如果轉(zhuǎn)換已經(jīng)被最低程度地優(yōu)化,那么,在被轉(zhuǎn)換的序列中通常有許多位置,“無(wú)操作”指令(“nops”)被插入該序列中,以便出于各種目的(例如,處理從屬性)在不同的指令之間提供正確的定時(shí)。當(dāng)已經(jīng)決定將為轉(zhuǎn)換(例如,有關(guān)一系列指令的第一個(gè)轉(zhuǎn)換)進(jìn)行最低程度的優(yōu)化時(shí),正常的nop指令可以由“特殊的nops”代替,“特殊的nops”實(shí)際上表示優(yōu)化過(guò)程中最小的努力。如果“特殊的nops”的數(shù)量在執(zhí)行間隔期間按與計(jì)數(shù)退回重來(lái)指令相同的方式被加以計(jì)數(shù)和合計(jì),那么,多于所選數(shù)量的這些特殊的nops將表示被轉(zhuǎn)換的序列應(yīng)該被廣泛地優(yōu)化,以便提供更好的執(zhí)行次數(shù)。
圖4示出線路的一個(gè)實(shí)施例,用于使用系統(tǒng)事件來(lái)動(dòng)態(tài)地確定由被改善的處理器生成的轉(zhuǎn)換是否應(yīng)該被加以修改。許多系統(tǒng)功能單元(例如,算術(shù)與邏輯單元(ALU)41、浮點(diǎn)單元(FPU)42、總線單元43和根據(jù)本發(fā)明生成將被使用的事件的存儲(chǔ)器單元44)被示出。在一個(gè)特殊的實(shí)施例中,從這些功能單元中的每個(gè)功能單元提供了到計(jì)數(shù)器單元45的四個(gè)單獨(dú)的信號(hào)路徑(這個(gè)數(shù)字可以根據(jù)系統(tǒng)而廣泛地變化)。例如,ALU 41可以根據(jù)許多不同類型的指令來(lái)提供事件。對(duì)于構(gòu)成將被計(jì)數(shù)的一個(gè)事件的每個(gè)指令(例如,退回重來(lái)指令或特殊的nop指令)而言,指出該命令的指令的一個(gè)部分與作為將被發(fā)現(xiàn)的指令的一個(gè)值進(jìn)行比較。例如,退回重來(lái)指令包括具有一個(gè)特殊值的某個(gè)序列的獨(dú)特的位。指令的值被保存在值寄存器中,當(dāng)指令的各個(gè)位與寄存器進(jìn)行比較時(shí),生成一個(gè)退回重來(lái)事件(見(jiàn)圖3)。這個(gè)事件被發(fā)送到中心計(jì)數(shù)器單元45,該中心計(jì)數(shù)器單元包括被分配給不同事件的許多計(jì)數(shù)器47。其他這樣的計(jì)數(shù)器(未示出)可以更方便地位于各種功能單元中,在這些功能單元中,事件本身是某種計(jì)數(shù)的結(jié)果。計(jì)數(shù)器單元45也包括由選擇邏輯46(通過(guò)它,可以將不同的標(biāo)準(zhǔn)用于計(jì)數(shù))定義的一個(gè)規(guī)則網(wǎng)絡(luò)。例如,可以計(jì)數(shù)在某個(gè)其他的事件期間發(fā)生的一個(gè)退回重來(lái)事件。由于退回重來(lái)問(wèn)題,因此,只有事件本身需要被計(jì)數(shù),所以,這些事件被直接發(fā)送到計(jì)數(shù)器。選擇邏輯允許系統(tǒng)軟件為事件或?qū)?dǎo)致轉(zhuǎn)換修改的事件的組合編程。在其他的實(shí)施例中,組合可以由事件的其他組合的結(jié)果構(gòu)成;例如,如果兩個(gè)事件都存在,兩個(gè)其他的事件都不存在,則生成一個(gè)結(jié)果。
B.Coon等人于偶數(shù)日提交并授讓給本發(fā)明的授讓人的系列號(hào)為______的美國(guó)專利申請(qǐng)“可編程事件計(jì)數(shù)器”中詳細(xì)描述了線路的一個(gè)實(shí)施例。在該實(shí)施例中,選擇邏輯包括能夠測(cè)試以便確定以下條件是否被輸入事件滿足的線路。條件如下所示X,Y,!X,!Y,X&Y,X|Y,X^Y,!(X&Y),!(X^Y),!(X)|Y,X|(!Y),X&(!Y),!(X|Y),其中,所用的符號(hào)是典型的C語(yǔ)言位操縱器。
其他的事件(例如,特殊的例外)可以按類似的方式來(lái)計(jì)數(shù)。
同時(shí),可以計(jì)數(shù)處理器的周期數(shù)量,以便提供一個(gè)定時(shí)事件,由此可生成一個(gè)時(shí)間間隔。或者,可以計(jì)數(shù)由處理器處理的指令的數(shù)量,以便提供一個(gè)處理器時(shí)間計(jì)數(shù)。這些事件中的任何一個(gè)事件可以被用來(lái)重置退回重來(lái)或另一個(gè)事件計(jì)數(shù)器。這樣,如果退回重來(lái)計(jì)數(shù)器在由定時(shí)器或處理器指令計(jì)數(shù)器設(shè)置的一個(gè)時(shí)期內(nèi)計(jì)數(shù)少于選擇的一定數(shù)量的退回重來(lái)事件,則退回重來(lái)計(jì)數(shù)器被重置,不發(fā)生什么情況。但是,如果在定時(shí)器或處理器指令計(jì)數(shù)器提供一項(xiàng)重置之前,退回重來(lái)計(jì)數(shù)器計(jì)數(shù)到最大的值,那么,生成例外并放棄轉(zhuǎn)換。用于實(shí)施本發(fā)明的其他線路對(duì)于精通該技術(shù)領(lǐng)域的人員而言也將顯而易見(jiàn)。
雖然已經(jīng)根據(jù)一個(gè)較佳實(shí)施例描述了本發(fā)明,但是,將理解,在不脫離本發(fā)明的精神和范圍的前提下,精通該技術(shù)領(lǐng)域的人員可以進(jìn)行各種修改和變化。所以,本發(fā)明應(yīng)該按照以下的權(quán)利要求來(lái)被衡量。
權(quán)利要求
1.用于修改計(jì)算機(jī)內(nèi)的操作條件的一種方法,它將指令從一個(gè)目標(biāo)指令集轉(zhuǎn)換到一個(gè)主機(jī)指令集,其特征在于包括以下步驟監(jiān)控在計(jì)算機(jī)的一個(gè)部件內(nèi)發(fā)生的一個(gè)事件,計(jì)數(shù)在一個(gè)選擇的間隔內(nèi)發(fā)生的事件,如果選擇的間隔內(nèi)的事件總數(shù)超過(guò)規(guī)定的限制,則生成一個(gè)例外,以及,通過(guò)修改被轉(zhuǎn)換的一系列主機(jī)指令,來(lái)響應(yīng)該例外。
2.如權(quán)利要求1中所聲明的一種方法,其特征在于其中,事件是退回重來(lái),修改被轉(zhuǎn)換的序列的步驟是放棄該序列。
3.如權(quán)利要求1中所聲明的一種方法,其特征在于其中,事件表示最小限度地嘗試優(yōu)化轉(zhuǎn)換,修改被轉(zhuǎn)換的序列的步驟是進(jìn)一步優(yōu)化該序列。
4.如權(quán)利要求1中所聲明的一種方法,其特征在于其中,事件表示嘗試寫(xiě)到被保護(hù)的存儲(chǔ)器。
5.如權(quán)利要求1中所聲明的一種方法,其特征在于其中,事件表示優(yōu)化轉(zhuǎn)換過(guò)程中的一個(gè)調(diào)度錯(cuò)誤。
6.如權(quán)利要求1中所聲明的一種方法,其特征在于其中,選擇的間隔是時(shí)間間隔。
7.如權(quán)利要求1中所聲明的一種方法,其特征在于其中,選擇的間隔是許多指令。
8.如權(quán)利要求1中所聲明的一種方法,其特征在于其中,通過(guò)修改被轉(zhuǎn)換的一系列主機(jī)指令而響應(yīng)該例外的步驟在選擇的多個(gè)次數(shù)后發(fā)生一次,其中,選擇的間隔內(nèi)的事件總數(shù)超過(guò)規(guī)定的限制。
9.如權(quán)利要求1中所聲明的一種方法,其特征在于其中,事件是可編程的。
10.如權(quán)利要求1中所聲明的一種方法,其特征在于其中,事件是多個(gè)事件的組合。
全文摘要
用于修改計(jì)算機(jī)內(nèi)的操作條件的一種方法,它將指令從一個(gè)目標(biāo)指令集轉(zhuǎn)換到主機(jī)指令集,包括的步驟是:監(jiān)控在計(jì)算機(jī)的部件內(nèi)發(fā)生的事件;計(jì)數(shù)在一個(gè)選擇的間隔內(nèi)發(fā)生的事件;如果選擇的間隔內(nèi)的事件總數(shù)超過(guò)規(guī)定的限制,則生成例外;以及,通過(guò)修改被轉(zhuǎn)換的一系列主機(jī)指令來(lái)響應(yīng)該例外。
文檔編號(hào)G06F9/318GK1390329SQ00814338
公開(kāi)日2003年1月8日 申請(qǐng)日期2000年9月6日 優(yōu)先權(quán)日1999年10月13日
發(fā)明者L·托瓦爾德斯, D·坎培爾 申請(qǐng)人:全斯美達(dá)有限公司