專利名稱:掛起線程執(zhí)行直到發(fā)生指定的存儲(chǔ)器訪問(wèn)的方法和設(shè)備的制作方法
技術(shù)領(lǐng)域:
本公開(kāi)涉及處理器領(lǐng)域。具體而言,本公開(kāi)涉及多線程處理器和用于在對(duì)多線程處理器中暫時(shí)掛起一個(gè)線程的處理的技術(shù)。
背景技術(shù):
多線程處理器能夠同時(shí)處理多個(gè)不同指令序列。驅(qū)動(dòng)在單個(gè)處理器中多個(gè)指令流的執(zhí)行的主要推動(dòng)因素,是對(duì)處理器利用率所得到的改善。高并行體系結(jié)構(gòu)已經(jīng)發(fā)展了多年,但經(jīng)常難以從單個(gè)指令流中提取出足夠的并行性,以利用多個(gè)執(zhí)行單元。并發(fā)多線程處理器允許多個(gè)指令流在不同執(zhí)行資源中同時(shí)執(zhí)行,以試圖更好地利用這些資源。對(duì)于遇到高等待時(shí)間延遲或者經(jīng)常等待事件發(fā)生的程序,多線程可能尤其有利。當(dāng)一個(gè)線程在等待高等待時(shí)間任務(wù)完成或者在等待特定事件時(shí),可以處理不同的線程。
已經(jīng)提出了許多不同技術(shù)來(lái)控制處理器何時(shí)在線程之間切換。例如,一些處理器檢測(cè)諸如L2高速緩存未命中(cache miss)之類的特長(zhǎng)的等待時(shí)間事件,并響應(yīng)于這些被檢測(cè)的長(zhǎng)的等待時(shí)間事件而切換線程。雖然在某些環(huán)境中對(duì)這種長(zhǎng)的等待時(shí)間事件的檢測(cè)可能是有效的,但這種事件檢測(cè)不太可能檢測(cè)出所有這樣的點(diǎn),即此時(shí)切換線程可能是高效的。尤其是,基于事件的線程切換可能檢測(cè)不出程序中程序員有意延遲的點(diǎn)。
實(shí)際上,通常程序員處于最佳的位置來(lái)確定何時(shí)切換線程是高效的,以避免浪費(fèi)的螺旋等待循環(huán)(spin-wait loop)或其他消耗資源的延遲技術(shù)。這樣,允許程序控制線程切換可能使得程序能夠更高效地工作。影響線程選擇的顯式程序指令可能對(duì)此有利。例如,在2000年1月21日遞交的美國(guó)專利申請(qǐng)No.09/489,130中描述了“暫停(Pause)”指令。暫停指令允許暫時(shí)掛起線程的執(zhí)行,或者直到達(dá)到計(jì)數(shù)值,或者直到指令已通過(guò)處理器流水線。可以使用不同的技術(shù)來(lái)使得程序員能夠更為高效地利用多線程處理器的資源。
以下通過(guò)以附圖的圖形作為示例而不是作為限制的方式對(duì)本發(fā)明進(jìn)行了說(shuō)明。
圖1圖示了多線程處理器的一個(gè)實(shí)施例,所述多線程處理器具有用來(lái)監(jiān)視存儲(chǔ)器訪問(wèn)的監(jiān)視器。
圖2是圖示了根據(jù)一個(gè)實(shí)施例的圖1的多線程處理器的操作的流程圖。
圖3圖示了多線程處理器的一個(gè)實(shí)施例的進(jìn)一步的細(xì)節(jié)。
圖4圖示了根據(jù)一個(gè)實(shí)施例的資源分區(qū)、共享和復(fù)制。
圖5是圖示了根據(jù)一個(gè)實(shí)施例掛起和恢復(fù)線程的執(zhí)行的流程圖。
圖6a是圖示了根據(jù)一個(gè)實(shí)施例的監(jiān)視邏輯的激活和操作的流程圖。
圖6b是圖示了根據(jù)一個(gè)實(shí)施例提高寫(xiě)操作的可觀察性的流程圖。
圖7是圖示了根據(jù)一個(gè)實(shí)施例的監(jiān)視器操作的流程圖。
圖8圖示了根據(jù)一個(gè)實(shí)施例的系統(tǒng)。
圖9a~9c圖示了利用所公開(kāi)的處理器指令和技術(shù)的軟件序列的各種實(shí)施例。
圖10圖示了使得被監(jiān)視地址能夠保持被高速緩存的另一個(gè)實(shí)施例。
圖11圖示了用于模擬、仿真和制造使用所公開(kāi)技術(shù)的設(shè)計(jì)的各種設(shè)計(jì)表示或格式。
具體實(shí)施例方式
以下描述了用于掛起線程的執(zhí)行直至指定的存儲(chǔ)器訪問(wèn)發(fā)生的技術(shù)。在以下說(shuō)明中,給出了大量的具體細(xì)節(jié)以提供對(duì)本發(fā)明更充分的理解,例如邏輯實(shí)現(xiàn)、操作碼、指定操作數(shù)的裝置、資源分區(qū)/共享/復(fù)制實(shí)現(xiàn)、系統(tǒng)元件的類型和相互關(guān)系、以及邏輯分區(qū)/集成的選擇。但是,本領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到,沒(méi)有這些具體細(xì)節(jié)也可以實(shí)施本發(fā)明。在其他情況下,沒(méi)有詳細(xì)示出控制結(jié)構(gòu)、門級(jí)電路和完整的軟件指令序列,以免模糊本發(fā)明。本領(lǐng)域普通技術(shù)人員閱讀所包含的說(shuō)明后,不進(jìn)行過(guò)多實(shí)驗(yàn)就能夠?qū)崿F(xiàn)合適的功能。
所公開(kāi)的技術(shù)可以使得程序員能夠在一個(gè)線程中實(shí)現(xiàn)等待機(jī)制而同時(shí)使其它線程利用處理資源。可以設(shè)立監(jiān)視器,使得線程可以被掛起直至特定存儲(chǔ)器訪問(wèn)發(fā)生,例如向指定的存儲(chǔ)器單元寫(xiě)入。因此,線程可以基于指定的事件被恢復(fù),而不用執(zhí)行浪費(fèi)處理器資源的例程,例如螺旋等待循環(huán)。在一些實(shí)施例中,先前專用于被掛起線程的分區(qū)(partition)在該線程被掛起時(shí)可以被釋放。這些和/或其它的公開(kāi)技術(shù)可以有利地提高處理器的總吞吐量。
圖1圖示了具有用來(lái)監(jiān)視存儲(chǔ)器訪問(wèn)的存儲(chǔ)器訪問(wèn)監(jiān)視器110的多線程處理器100的一個(gè)實(shí)施例。在一些實(shí)施例中,“處理器”可以被形成作為單個(gè)集成電路。在其它實(shí)施例中,多個(gè)集成電路可以一起形成處理器,而在另一些實(shí)施例中,硬件和軟件例程(例如進(jìn)制轉(zhuǎn)換例程)可以共同形成處理器。在圖1的實(shí)施例中,總線/存儲(chǔ)器控制器120向前端130提供指令用于執(zhí)行。前端130根據(jù)指令指針170來(lái)指示從各個(gè)線程檢索獲取指令。指令指針邏輯被復(fù)制以支持多線程。
前端130將指令送入線程可分區(qū)資源140中以進(jìn)一步處理。線程可分區(qū)資源140包括邏輯上分離的分區(qū),當(dāng)處理器100中有多個(gè)線程是活動(dòng)的時(shí),這些分區(qū)專用于特定線程。在一個(gè)實(shí)施例中,每個(gè)單獨(dú)的分區(qū)僅包含來(lái)自該分區(qū)所專用于的線程的指令。線程可分區(qū)資源140可以包括例如指令隊(duì)列。當(dāng)在單線程模式時(shí),線程可分區(qū)資源140的分區(qū)可以被合并形成專用于這一個(gè)線程的單個(gè)大分區(qū)。
處理器100還包括復(fù)制狀態(tài)180。復(fù)制狀態(tài)180包括足以維護(hù)邏輯處理器上下文的狀態(tài)變量。使用復(fù)制狀態(tài)180,可以執(zhí)行多個(gè)線程而不會(huì)有狀態(tài)變量存儲(chǔ)的競(jìng)爭(zhēng)。此外,可以對(duì)每個(gè)線程都復(fù)制寄存器分配邏輯。被復(fù)制的狀態(tài)相關(guān)邏輯可以使用恰當(dāng)?shù)馁Y源分區(qū)進(jìn)行工作,以準(zhǔn)備執(zhí)行進(jìn)入的指令。
線程可分區(qū)資源140將指令傳遞到共享資源150。共享資源150不考慮其來(lái)源地按指令來(lái)操作。例如,調(diào)度器和執(zhí)行單元可以是對(duì)線程透明的共享資源。線程可分區(qū)資源140可以通過(guò)以公平的方式在線程之間變換,而將來(lái)自多個(gè)線程的指令輸送給共享資源150,所述公平方式使每個(gè)活動(dòng)線程都連續(xù)地進(jìn)行。這樣,共享資源可以在恰當(dāng)狀態(tài)上執(zhí)行所提供的指令,而不必考慮線程混和。
共享資源150后可以接著另一組線程可分區(qū)資源160。線程可分區(qū)資源160可以包括收回資源(retirement resources),例如重排緩沖器等等。因此,線程可分區(qū)資源160可以確保來(lái)自每個(gè)線程的指令的執(zhí)行正確結(jié)束,并確保恰當(dāng)?shù)馗略摼€程的恰當(dāng)狀態(tài)。
如前所述,人們可能希望為程序員提供一項(xiàng)技術(shù),以在不需要對(duì)存儲(chǔ)器單元進(jìn)行持續(xù)查詢或者甚至不需要執(zhí)行指令的情況下實(shí)現(xiàn)螺旋等待循環(huán)的功能。因此,圖1的處理器100包括存儲(chǔ)器訪問(wèn)監(jiān)視器110。可以用關(guān)于存儲(chǔ)器訪問(wèn)周期的信息來(lái)對(duì)存儲(chǔ)器訪問(wèn)監(jiān)視器110編程,所述周期中監(jiān)視器110可被使能來(lái)監(jiān)視。相應(yīng)地,監(jiān)視器110包括監(jiān)視周期信息寄存器112,比較邏輯114將其與從總線/存儲(chǔ)器控制器120接收到的總線周期信息比較。如果相符,則產(chǎn)生恢復(fù)線程信號(hào)以重新啟動(dòng)被掛起的線程。存儲(chǔ)器訪問(wèn)信息可以從處理器的內(nèi)部和/或外部總線獲得。
監(jiān)視周期信息寄存器112可以包含指定會(huì)觸發(fā)線程恢復(fù)的周期類型和/或地址的詳細(xì)內(nèi)容。在一個(gè)實(shí)施例中,監(jiān)視周期信息寄存器112存儲(chǔ)物理地址,并且監(jiān)視器對(duì)指示了對(duì)該物理地址的實(shí)際或可能寫(xiě)入的任何總線周期進(jìn)行監(jiān)視。這樣的周期可以是顯式的寫(xiě)周期,并且/或者可以是另一代理所進(jìn)行的無(wú)效化周期(invalidating cycle)或占有權(quán)讀取,其中該代理試圖獲得對(duì)可高速緩存行的獨(dú)占權(quán),以使得其能夠在沒(méi)有外部總線事務(wù)的情況下對(duì)該行寫(xiě)入??傊诓煌膶?shí)施例中監(jiān)視器可以被編程以對(duì)各種事務(wù)觸發(fā)。
圖1的實(shí)施例的操作可以通過(guò)參考圖2的流程圖被進(jìn)一步說(shuō)明。在一個(gè)實(shí)施例中,處理器100的指令集包括建立監(jiān)視事務(wù)信息的MONITOR操作碼(指令)。在框200中,接收作為第一線程(T1)的指令序列一部分的MONITOR操作碼。如框210中所示,響應(yīng)于該MONITOR操作碼,處理器100允許監(jiān)視器110針對(duì)指定存儲(chǔ)器訪問(wèn)來(lái)監(jiān)視存儲(chǔ)器訪問(wèn)。引起觸發(fā)的存儲(chǔ)器訪問(wèn)可以由隱式或者顯式操作數(shù)所指定。因此,由于監(jiān)視地址能夠作為隱式操作數(shù)被預(yù)先存儲(chǔ)在寄存器或者其它位置,所以執(zhí)行MONITOR操作碼可以指定監(jiān)視地址。如框215所示,監(jiān)視器測(cè)試是否檢測(cè)到被指定的周期。如果沒(méi)有,則監(jiān)視器繼續(xù)監(jiān)視存儲(chǔ)器訪問(wèn)。如果檢測(cè)到引起觸發(fā)的周期,則如框220所示設(shè)置監(jiān)視事件懸置指示符。
對(duì)MONITOR操作碼的執(zhí)行觸發(fā)對(duì)監(jiān)視器110的激活。監(jiān)視器110可以并行于處理器中的其它操作開(kāi)始操作。在一個(gè)實(shí)施例中,MONITOR指令本身僅利用正確的存儲(chǔ)器周期信息來(lái)設(shè)置監(jiān)視器110并激活該監(jiān)視器110,而不去除對(duì)監(jiān)視事件的屏蔽。也就是說(shuō),在該實(shí)施例中,在執(zhí)行MONITOR操作碼之后,監(jiān)視事件可能發(fā)生,但是不會(huì)被識(shí)別,直至顯式地去除對(duì)它們的屏蔽。
這樣,在框225中,存儲(chǔ)器等待的觸發(fā)被示為單獨(dú)的事件。在一些實(shí)施例中,存儲(chǔ)器等待(MWAIT)操作碼可以被用來(lái)觸發(fā)對(duì)監(jiān)視事件的識(shí)別以及T1的掛起。利用兩個(gè)單獨(dú)的指令來(lái)設(shè)置和觸發(fā)線程掛起可以為程序員提供更多的靈活性,并使得能夠更高效地編程。但是,另一個(gè)實(shí)施例由還設(shè)置監(jiān)視器110的第一操作碼來(lái)觸發(fā)存儲(chǔ)器等待。在兩種情況的任一種之下,一個(gè)或者多個(gè)指令準(zhǔn)備好監(jiān)視器并允許對(duì)監(jiān)視事件的識(shí)別。
在使用單獨(dú)的操作碼來(lái)準(zhǔn)備好監(jiān)視器110并觸發(fā)識(shí)別監(jiān)視事件的實(shí)施例中,如框230中所示,在掛起線程之前進(jìn)行測(cè)試以確保監(jiān)視器已經(jīng)被激活將是有利的。另外,通過(guò)測(cè)試是否已經(jīng)有監(jiān)視事件懸置(未示出),可以避免T1的掛起,并且在框250可以繼續(xù)操作。假設(shè)監(jiān)視器110已經(jīng)被使能,并且沒(méi)有監(jiān)視事件已經(jīng)被懸置,則可以如框235所示掛起T1。
在T1被掛起的情況下,處理器進(jìn)入取決于實(shí)現(xiàn)的狀態(tài),這使得其它線程能夠更充分地利用處理器資源。在一些實(shí)施例中,處理器可以釋放可分區(qū)資源140和160的專用于T1的分區(qū)中的一些或者全部。在其它實(shí)施例中,MONITOR操作碼的不同排列(permutation)或者與其相關(guān)聯(lián)的設(shè)置可以指示如果有資源要被釋放的話,哪些資源被釋放。例如,當(dāng)程序員預(yù)測(cè)到較短的等待時(shí),則線程可以被掛起,但是保持其資源分區(qū)。由于在線程掛起期間共享資源可以被其它線程獨(dú)占使用,所以總的處理能力還是增強(qiáng)了。當(dāng)預(yù)測(cè)到較長(zhǎng)的等待時(shí),釋放與被掛起的線程相關(guān)聯(lián)的所有分區(qū)使得其它線程能夠具有額外的資源,潛在地提高了其它線程的處理能力。但是,得到這種額外的處理能力是以與線程分別被掛起和恢復(fù)時(shí)去除和添加分區(qū)相關(guān)聯(lián)的開(kāi)銷為代價(jià)的。
T1保持掛起狀態(tài),直至監(jiān)視事件懸置。如前所述,監(jiān)視器110獨(dú)立操作以檢測(cè)并發(fā)信號(hào)通知有監(jiān)視事件(框215~220)。如果在框240中處理器檢測(cè)到監(jiān)視事件懸置,則如框250所示恢復(fù)T1。不需要為了喚醒T1的監(jiān)視事件而對(duì)T1中的指令進(jìn)行主動(dòng)處理。相反,T1保持掛起,而被使能的監(jiān)視器110發(fā)信號(hào)向處理器通知有事件。處理器處理該事件,識(shí)別該事件指示了T1應(yīng)該被恢復(fù),并進(jìn)行適當(dāng)?shù)膭?dòng)作以恢復(fù)T1。
這樣,圖1和2的實(shí)施例提供了這樣的技術(shù),其用于使被程序掛起的線程能夠在發(fā)生指定存儲(chǔ)器訪問(wèn)時(shí)被恢復(fù)。在一個(gè)實(shí)施例中,其它的事件同樣導(dǎo)致T1被恢復(fù)。例如,中斷可以導(dǎo)致T1恢復(fù)。這樣的實(shí)現(xiàn)有利地允許監(jiān)視器可以不是那么完美,因?yàn)槠淇赡苠e(cuò)過(guò)(未檢測(cè)到)某些存儲(chǔ)器訪問(wèn)或者其它應(yīng)該導(dǎo)致線程恢復(fù)的情況。這樣,T1有時(shí)可能被不必要地喚醒。但是,這樣的實(shí)現(xiàn)減小了T1會(huì)由于錯(cuò)過(guò)的事件而被永久凍結(jié)的可能性,簡(jiǎn)化了硬件設(shè)計(jì)和檢驗(yàn)。不必要地喚醒T1可能僅僅是一個(gè)很小的不便,因?yàn)榭赡芤獦?gòu)建循環(huán)來(lái)雙重檢驗(yàn)(double-check)T1其所等待的情況是否真的發(fā)生了,并且如果沒(méi)有發(fā)生則要再次將其自己掛起。
在一些實(shí)施例中,線程可分區(qū)資源、復(fù)制資源以及共享資源可以被不同地布置。在一些實(shí)施例中,在共享資源的兩端可以沒(méi)有可分區(qū)資源。在一些實(shí)施例中,可分區(qū)資源可以不被嚴(yán)格地分區(qū),而是可以允許一些指令跨越分區(qū),或者可以允許分區(qū)根據(jù)該分區(qū)中正在執(zhí)行的線程或者正在執(zhí)行的線程的總量而改變大小。另外,資源的不同組合可以被指派作為共享、復(fù)制和可分區(qū)資源。
圖3圖示了多線程處理器的一個(gè)實(shí)施例的進(jìn)一步的細(xì)節(jié)。圖3的實(shí)施例包括一致性相關(guān)邏輯350、監(jiān)視器310的一種實(shí)現(xiàn)以及線程掛起和恢復(fù)邏輯377的一種具體實(shí)現(xiàn)等。在圖3的實(shí)施例中,總線接口300包括總線控制器340、事件檢測(cè)邏輯345、監(jiān)視器310和一致性相關(guān)邏輯350。
總線接口300向前端365提供指令,該前端365生成微操作數(shù)(uOP),即由宏指令產(chǎn)生uOP。執(zhí)行資源370從前端365接收uOP,而后端邏輯380在各種uOP被執(zhí)行之后將其收回。在一個(gè)實(shí)施例中,前端、后端和執(zhí)行資源支持亂序執(zhí)行。
參照?qǐng)D5~9進(jìn)一步討論操作的各種細(xì)節(jié)。但是,簡(jiǎn)而言之,MONITOR操作碼可以通過(guò)總線接口300進(jìn)入處理器,并由前端365準(zhǔn)備以用于執(zhí)行。在一個(gè)實(shí)施例中,產(chǎn)生具體的MONITOR uOP以由執(zhí)行資源370來(lái)執(zhí)行。MONITOR uOP可以類似于存儲(chǔ)操作地被執(zhí)行單元所處理,其中監(jiān)視地址由地址轉(zhuǎn)換邏輯375譯成物理地址,該物理地址被提供給監(jiān)視器310。監(jiān)視器310與線程掛起和恢復(fù)邏輯377通信以引發(fā)對(duì)線程的恢復(fù)。線程掛起和恢復(fù)邏輯可以在活動(dòng)線程的數(shù)量改變的時(shí)候進(jìn)行對(duì)資源的分區(qū)和退火。
例如,圖4圖示了根據(jù)一個(gè)實(shí)施例的資源分區(qū)、復(fù)制和共享。分區(qū)資源可以根據(jù)機(jī)器中活動(dòng)線程的變化而被分區(qū)和退火(融回為一體以供其它線程重新使用)。在圖4的實(shí)施例中,復(fù)制資源包括流水線的取指令部分中的指令指針邏輯、流水線的重命名部分中的寄存器重命名邏輯、狀態(tài)變量(未示出,但是在流水線的各級(jí)中被引用)以及中斷控制器(未示出,一般與流水線異步)。圖4實(shí)施例中的共享資源包括流水線的調(diào)度階段中的調(diào)度器、流水線的寄存器讀寫(xiě)部分中的寄存器池、流水線的執(zhí)行部分中的執(zhí)行資源。另外,追蹤高速緩存(Trace Cache)和L1數(shù)據(jù)高速緩存可以是不考慮線程上下文而根據(jù)存儲(chǔ)器訪問(wèn)分配的共享資源。在其它的實(shí)施例中,對(duì)線程上下文的考慮可以被用于決定高速緩存。圖4實(shí)施例中的分區(qū)資源包括流水線排隊(duì)階段中的兩個(gè)隊(duì)列、流水線收回階段中的重排緩沖器以及存儲(chǔ)緩沖器。線程選擇復(fù)用邏輯在各個(gè)被復(fù)制和被分區(qū)資源之間變換,以提供對(duì)兩個(gè)線程的合理訪問(wèn)。
為了示例的目的,在對(duì)圖3處理器實(shí)施例的操作的進(jìn)一步描述中,假設(shè)結(jié)合圖3的實(shí)施例利用了圖4所示的分區(qū)、共享和復(fù)制。具體而言,現(xiàn)在將參考圖5的流程圖討論圖3實(shí)施例的操作的進(jìn)一步細(xì)節(jié)。假設(shè)處理器以多線程模式來(lái)執(zhí)行,其中至少兩個(gè)線程是活動(dòng)的。
在框500中,前端365在執(zhí)行第一線程T1的過(guò)程中接收MONITOR操作碼。在一個(gè)實(shí)施例中,前端365產(chǎn)生特殊的uOP。該MONITOR uOP被傳送給執(zhí)行資源370。監(jiān)視uOP具有指示了要被監(jiān)視的地址(監(jiān)視地址)的相關(guān)聯(lián)地址。相關(guān)聯(lián)地址可以采用顯式操作數(shù)或者隱式操作數(shù)(即,該相關(guān)聯(lián)地址將從預(yù)定的寄存器或者其它存儲(chǔ)器單元取得)的形式。相關(guān)聯(lián)地址“指示”了監(jiān)視地址,這是由于該相關(guān)聯(lián)地址傳達(dá)了足以確定監(jiān)視地址的信息(可能與其它寄存器或信息結(jié)合)。例如,相關(guān)聯(lián)地址可以是線性地址,其中該線性地址具有作為正確監(jiān)視地址的對(duì)應(yīng)物理地址?;蛘?,監(jiān)視地址可以以虛擬地址的格式給出,或者可以被指示為相對(duì)地址,或以其它已知或方便的地址指定方式被指定。如果使用虛擬地址操作數(shù),則可能希望允許將一般性保護(hù)錯(cuò)誤識(shí)別為斷點(diǎn)事件(breakevent)。
監(jiān)視地址可以指示存儲(chǔ)器的任何適宜的單元用于監(jiān)視。例如,在一個(gè)實(shí)施例中,監(jiān)視地址可以指示高速緩存行。但是,在其它實(shí)施例中,監(jiān)視地址可以指示高速緩存行的一部分、可能與不同處理器的高速緩存行大小有不同關(guān)系的存儲(chǔ)器的特定/選定大小的部分或單元、或單個(gè)地址。因此,監(jiān)視地址可以指示包括了操作數(shù)所指定的數(shù)據(jù)(和更多數(shù)據(jù))的單元,或者可以具體指示所需數(shù)據(jù)單元的地址。
在圖3的實(shí)施例中,監(jiān)視地址被提供給地址轉(zhuǎn)換邏輯375,并傳送給監(jiān)視器310,在該處它被存儲(chǔ)在監(jiān)視地址寄存器335中。響應(yīng)于MONITOR操作碼,執(zhí)行資源370隨后使能并激活監(jiān)視器310,如框510中所示以及在圖6中進(jìn)一步詳述的。如以下將參照?qǐng)D6進(jìn)一步討論的,對(duì)于任何在MONITOR操作碼之后發(fā)生的存儲(chǔ)操作進(jìn)行防護(hù),以確保該存儲(chǔ)在任何線程掛起發(fā)生之前被處理并進(jìn)而被檢測(cè)到,這可能是很有利的。因此,在該實(shí)施例中在執(zhí)行任何后續(xù)的指令之前,作為激活監(jiān)視器310的結(jié)果,可能需要進(jìn)行一些操作。但是,框510被示為并行于框505發(fā)生,因?yàn)樵谠搶?shí)施例中一旦監(jiān)視器310被MONITOR操作碼所激活,它就繼續(xù)并行于其它操作而操作直至斷點(diǎn)事件發(fā)生。
在框505中,存儲(chǔ)器等待(MWAIT)操作碼在線程1中被接收到,并被傳送以用于執(zhí)行。在圖5的實(shí)施例中,MWAIT操作碼的執(zhí)行去除了對(duì)監(jiān)視事件的屏蔽。響應(yīng)于MWAIT操作碼,如框515所示進(jìn)行測(cè)試,以確定是否有監(jiān)視事件懸置。如果沒(méi)有監(jiān)視事件懸置,則在框520進(jìn)行測(cè)試以確保該監(jiān)視器是活動(dòng)的。例如,如果在之前沒(méi)有執(zhí)行過(guò)MONITOR的情況下執(zhí)行了MWAIT,則監(jiān)視器310不會(huì)是活動(dòng)的。如果監(jiān)視器是非活動(dòng)的或者有監(jiān)視事件懸置,則在框580繼續(xù)線程1的執(zhí)行。
如果監(jiān)視器310是活動(dòng)的并且沒(méi)有監(jiān)視事件懸置,則如框525所示掛起線程1的執(zhí)行。線程掛起/恢復(fù)邏輯377包括流水線刷新邏輯(pipelineflush logic)382,如框530所示,其清空處理器流水線以清除所有指令。一旦流水線被清空,分區(qū)/退火邏輯385使與線程1獨(dú)占關(guān)聯(lián)的任何分區(qū)資源被釋放以被其它線程使用,如框535所示。這些被釋放的資源被退火以形成一組更大的資源供其余的活動(dòng)線程利用。例如,參照?qǐng)D4的兩個(gè)線程示例,與線程1相關(guān)的所有指令從兩個(gè)隊(duì)列被清空。然后每一對(duì)隊(duì)列被合并來(lái)為第二個(gè)線程提供更大的隊(duì)列。類似地,使得來(lái)自寄存器池的更多的寄存器對(duì)第二線程可用,釋放來(lái)自存儲(chǔ)緩沖器的更多的條目來(lái)用于第二線程,并且使得重排緩沖器中的更多條目對(duì)第二線程可用。實(shí)際上,這些結(jié)構(gòu)被恢復(fù)成兩倍大小的單個(gè)專用結(jié)構(gòu)。當(dāng)然,使用不同數(shù)量線程的實(shí)現(xiàn)可能得到不同的比例。
在框540、545和550中,各種事件被測(cè)試以確定線程1是否應(yīng)該被恢復(fù)。值得注意的是,這些測(cè)試不是由作為線程1的一部分而被執(zhí)行的指令所進(jìn)行的。相反,這些操作由處理器并行于其對(duì)其它線程的處理而進(jìn)行。如將要參照?qǐng)D6進(jìn)一步詳細(xì)地討論的那樣,監(jiān)視器自己檢查是否發(fā)生了監(jiān)視寫(xiě)事件,并從而通過(guò)設(shè)置事件懸置指示符來(lái)指示。事件懸置指示符經(jīng)由EVENT信號(hào)被提供給掛起/恢復(fù)邏輯377(例如,微代碼)。在一個(gè)實(shí)施例中微代碼可以在適當(dāng)?shù)闹噶钸吔?instruction boundary)處識(shí)別監(jiān)視事件(框540),因?yàn)樵诳?05中MWAIT去除了該事件的屏蔽。事件檢測(cè)邏輯345可以檢測(cè)被指派為斷點(diǎn)事件的其它事件,例如中斷(框545)。另外,可選的定時(shí)器可以被用來(lái)周期性地退出存儲(chǔ)器等待狀態(tài),以確保處理器不因?yàn)橐恍┨囟ǖ氖录蛄卸粌鼋Y(jié)(框550)。如果這些事件中沒(méi)有一個(gè)來(lái)發(fā)信號(hào)通知退出存儲(chǔ)器等待狀態(tài),則線程1保持被掛起。
如果線程1被恢復(fù),則線程掛起/恢復(fù)邏輯377在檢測(cè)到適當(dāng)?shù)氖录r(shí)再次被激活。同樣,如框560所示的,流水線被刷新以從流水線清空指令,使得資源能夠再次被分區(qū)以適應(yīng)即將被喚醒的線程1。在框570中,重新分區(qū)適當(dāng)?shù)馁Y源,并且在框580中恢復(fù)線程1。
圖6a圖示了監(jiān)視器310的激活和操作的進(jìn)一步的細(xì)節(jié)。在框600中,為線程1取指令的前端被停止以防止其他線程1操作進(jìn)入機(jī)器。在框605中,相關(guān)聯(lián)的地址操作數(shù)被地址轉(zhuǎn)換邏輯375從線性地址變換成物理地址。在框610中,提高了對(duì)該被監(jiān)視地址的寫(xiě)入的可觀察性。一般,此操作的目的是強(qiáng)制高速緩存代理來(lái)使這樣的寫(xiě)操作對(duì)監(jiān)視器310本身可見(jiàn),所述寫(xiě)操作會(huì)影響存儲(chǔ)在監(jiān)視地址中的信息。參照?qǐng)D6b討論了一種具體實(shí)現(xiàn)的更多細(xì)節(jié)。在框615中,存儲(chǔ)用于監(jiān)視的物理地址,但是應(yīng)該注意可以在該序列的更早或者更晚的時(shí)候存儲(chǔ)該地址。
接下來(lái),如框620中所示,使能監(jiān)視器。監(jiān)視器監(jiān)視對(duì)物理地址寫(xiě)入的總線周期,該物理地址是被存儲(chǔ)在監(jiān)視地址寄存器335中的監(jiān)視地址。以下參照?qǐng)D7討論了監(jiān)視操作的進(jìn)一步的細(xì)節(jié)。在監(jiān)視器被使能之后,如框625中所示,執(zhí)行存儲(chǔ)防護(hù)操作。存儲(chǔ)防護(hù)幫助確保機(jī)器中的所有存儲(chǔ)都在MONITOR操作碼完成執(zhí)行的時(shí)候被處理。在來(lái)自MONITOR之前的所有存儲(chǔ)被從機(jī)器清空的情況下,減小了將錯(cuò)誤地進(jìn)入存儲(chǔ)器等待狀態(tài)的可能性。但是,存儲(chǔ)防護(hù)操作是一種預(yù)防,并且可能是耗時(shí)的操作。
存儲(chǔ)防護(hù)是可選的,因?yàn)樵搶?shí)施例的MONITOR/MWAIT機(jī)制已經(jīng)被設(shè)計(jì)為多出口機(jī)制。也就是說(shuō),例如某些中斷、系統(tǒng)或者板上定時(shí)器等的各種事件也可能導(dǎo)致退出存儲(chǔ)器等待狀態(tài)。因此,在該實(shí)施例中并不保證線程會(huì)被喚醒的唯一原因是因?yàn)楸槐O(jiān)視的數(shù)據(jù)改變了。因此(以下同時(shí)參見(jiàn)圖9a~c),在該實(shí)施例中,軟件應(yīng)該雙重檢驗(yàn)存儲(chǔ)在存儲(chǔ)器中的特定值是否改變了。在一個(gè)實(shí)施例中,包括INTR、NMI和SMI中斷的斷言、機(jī)器檢查中斷以及故障的一些事件是斷點(diǎn)事件,而包括斷電事件的其它事件不是。在一個(gè)實(shí)施例中,A20M管腳的斷言也是斷點(diǎn)事件。
如框630中所示,監(jiān)視器繼續(xù)測(cè)試總線周期發(fā)生是否指示或者似乎指示了對(duì)監(jiān)視地址的寫(xiě)入。如果檢測(cè)到這樣的總線周期,則設(shè)置監(jiān)視事件懸置指示符,如框635中所示。在執(zhí)行MWAIT操作碼(圖5中的框505)之后,該事件懸置指示符起到事件的作用,并導(dǎo)致圖5的框560~580中的線程恢復(fù)。另外,改變地址轉(zhuǎn)換的事件可能導(dǎo)致線程1恢復(fù)。例如,導(dǎo)致刷新轉(zhuǎn)換旁路緩沖器(translation look-aside buffer)的事件可能觸發(fā)線程1的恢復(fù),因?yàn)橛脕?lái)產(chǎn)生監(jiān)視地址的從線性地址到物理地址的轉(zhuǎn)換已經(jīng)不再有效。例如,在可兼容x86 Intel體系結(jié)構(gòu)的處理器中,對(duì)控制寄存器CR0、CR3和CR4、以及某些機(jī)器特定的寄存器的寫(xiě)入可能導(dǎo)致退出存儲(chǔ)器等待狀態(tài)。
如以上提到的,圖6b圖示了提高對(duì)監(jiān)視地址的寫(xiě)入的可觀察性(圖6a中的框610)的進(jìn)一步細(xì)節(jié)。在一個(gè)實(shí)施例中,處理器從處理器的所有內(nèi)部高速緩存中清空與監(jiān)視地址相關(guān)聯(lián)的高速緩存行,如框650中所示。該清空的結(jié)果是,任何隨后向監(jiān)視地址的寫(xiě)入都到達(dá)總線接口300,使得能夠被包括在總線接口300中的監(jiān)視器310所檢測(cè)。在一個(gè)實(shí)施例中,MONITOR uOP被模仿,并且與作為x86指令集中的已有指令的高速緩存行清空CLFLUSH指令具有相同的錯(cuò)誤模型。該監(jiān)視器uOP進(jìn)行了線性地址到物理地址的轉(zhuǎn)換,以及就像CLFLUSH一樣的對(duì)內(nèi)部高速緩存的清空;但是總線接口識(shí)別出MONITOR和CLFLUSH的差別,并正確地處理MONITOR uOP。
然后,如框655中所示,總線接口300中的一致性相關(guān)邏輯350激活讀行產(chǎn)生邏輯(read line generation logic)355以在處理器總線上產(chǎn)生讀行事務(wù)。對(duì)監(jiān)視地址的讀行事務(wù)確??偩€上沒(méi)有處理器中的其它高速緩存以共享或者獨(dú)占的狀態(tài)在監(jiān)視地址存儲(chǔ)數(shù)據(jù)(根據(jù)公知的MESI協(xié)議)。在其它協(xié)議中,可以使用其它狀態(tài),但是,該事務(wù)被設(shè)計(jì)成減小這種可能性,即另一個(gè)代理能夠在事務(wù)不可被監(jiān)視器310所觀察的情況下向監(jiān)視地址寫(xiě)入。換句話說(shuō),寫(xiě)入或者指示寫(xiě)入的事務(wù)被隨后廣播以便能夠被監(jiān)視器檢測(cè)到。一旦完成了讀行操作,監(jiān)視器310就開(kāi)始監(jiān)視總線上的事務(wù)。
當(dāng)總線上發(fā)生其它事務(wù)時(shí),一致性相關(guān)邏輯通過(guò)試圖防止總線代理取得與被監(jiān)視地址相關(guān)聯(lián)的高速緩存行的占有權(quán),來(lái)繼續(xù)維護(hù)監(jiān)視地址的可觀察性。根據(jù)一種總線協(xié)議,這可以通過(guò)命中發(fā)生邏輯360在任何對(duì)監(jiān)視地址的讀取的監(jiān)聽(tīng)階段期間斷言HIT#(命中)信號(hào)來(lái)實(shí)現(xiàn),如框660中所示。HIT#的斷言防止其它高速緩存離開(kāi)MESI協(xié)議中的共享狀態(tài)而到獨(dú)占狀態(tài),從而可能到修改狀態(tài)。結(jié)果,如框665中所示,在選定的一致性域(coherency domain)(保持一致的存儲(chǔ)器部分)中沒(méi)有代理能夠以修改或者獨(dú)占狀態(tài)(或它們的等同狀態(tài))得到數(shù)據(jù)。在該實(shí)施例中,處理器實(shí)際上表現(xiàn)為將監(jiān)視地址的高速緩存行高速緩存,即使它已經(jīng)從內(nèi)部高速緩存被清除了。
現(xiàn)在參照?qǐng)D7,詳細(xì)描述了與圖6a中的框620相關(guān)聯(lián)的操作的進(jìn)一步的細(xì)節(jié)。具體而言,圖7圖示了監(jiān)視器310的操作的進(jìn)一步的細(xì)節(jié)。在框700中,監(jiān)視器310為總線事務(wù)而從總線控制器340接收請(qǐng)求和地址信息。如框710中所示,監(jiān)視器310檢測(cè)總線周期類型和受影響的(多個(gè))地址。具體而言,周期比較邏輯320確定總線周期是否是指定的周期。在一個(gè)實(shí)施例中,地址比較電路330將總線事務(wù)地址與存儲(chǔ)在監(jiān)視地址寄存器335中的監(jiān)視地址比較,并且寫(xiě)檢測(cè)邏輯325對(duì)來(lái)自總線控制器340的周期類型信息解碼,以檢測(cè)是否發(fā)生了寫(xiě)入。如果發(fā)生對(duì)監(jiān)視地址的寫(xiě)入,則設(shè)置監(jiān)視事件懸置指示符,如框720中所示。一個(gè)信號(hào)(WRITEDETECTED)被提供給線程掛起/恢復(fù)邏輯377以通知該事件(在假設(shè)其已經(jīng)通過(guò)執(zhí)行MWAIT被使能的情況下為其服務(wù))。最后,監(jiān)視器310被暫停,如框730中所示。暫停監(jiān)視器節(jié)省電力,但是只要錯(cuò)誤的監(jiān)視事件被屏蔽或者沒(méi)有產(chǎn)生,這就不是很重要。監(jiān)視事件指示符也可以在該點(diǎn)被復(fù)位。一般,為監(jiān)視事件服務(wù)還屏蔽對(duì)其它監(jiān)視事件的識(shí)別,直到MWAIT再次被執(zhí)行。
在對(duì)監(jiān)視地址的讀取的情況下,一致性相關(guān)邏輯350被激活。如框740中所示,一個(gè)信號(hào)(例如HIT#)被斷言以防止另一個(gè)代理獲得這樣的占有權(quán),其允許以后在沒(méi)有一致性廣播的情況下進(jìn)行寫(xiě)入。監(jiān)視器310保持為活動(dòng)的,之后返回框700,并且不受對(duì)監(jiān)視地址的讀取的影響。另外,如果事務(wù)既不是對(duì)監(jiān)視地址的讀取也不是對(duì)其的寫(xiě)入,則監(jiān)視器保持為活動(dòng)的,并返回框700。
在一些實(shí)施例中,MONITOR指令被限制,使得只有某些類型的訪問(wèn)才可以被監(jiān)視。這些訪問(wèn)可以是為體現(xiàn)高效編程技術(shù)而選取的,或者可以是為了其它原因而被選取的。例如,在一個(gè)實(shí)施例中,存儲(chǔ)器訪問(wèn)必須是自然對(duì)齊的回寫(xiě)存儲(chǔ)器(write-back memory)中的可高速緩存存儲(chǔ)。自然對(duì)齊的單元是從一個(gè)可被N整除的地址開(kāi)始的N位單元。使用自然對(duì)齊的單元的結(jié)果是,需要訪問(wèn)單個(gè)高速緩存行(而不是在數(shù)據(jù)被分到兩個(gè)高速緩存行情況下所需的兩個(gè)高速緩存行),以對(duì)監(jiān)視地址寫(xiě)入。從而,使用自然對(duì)齊的存儲(chǔ)器地址可以簡(jiǎn)化總線監(jiān)視。
圖8圖示了利用所公開(kāi)的多線程存儲(chǔ)器等待技術(shù)的系統(tǒng)的一個(gè)實(shí)施例。在圖8的實(shí)施例中,一組N個(gè)多線程處理器,處理器805-1至805-N,被耦合到總線802。在其它實(shí)施例中,可以使用單個(gè)處理器或者多線程處理器與單線程處理器的組合。另外,可以使用其它公知的或者可用的系統(tǒng)布置。例如,處理器可以以點(diǎn)對(duì)點(diǎn)的方式連接,并且諸如存儲(chǔ)器接口之類的部件可以被集成到各個(gè)處理器中。
在圖8的實(shí)施例中,耦合到總線的存儲(chǔ)器接口815被耦合到存儲(chǔ)器830和介質(zhì)接口(media interface)820。存儲(chǔ)器830包含支持多處理的操作系統(tǒng)835以及用于第一線程840的指令和用于第二線程845的指令。根據(jù)所公開(kāi)的技術(shù),指令840包括空閑循環(huán),圖9a~9c示出了其各種形式。
實(shí)現(xiàn)這些各種功能的適當(dāng)?shù)能浖梢蕴峁┯诟鞣N機(jī)器可讀介質(zhì)中的任何一種中。介質(zhì)接口820提供對(duì)這樣的軟件的接口。介質(zhì)接口820可以是對(duì)存儲(chǔ)介質(zhì)的接口(例如硬盤(pán)驅(qū)動(dòng)器、光盤(pán)驅(qū)動(dòng)器、磁帶驅(qū)動(dòng)器、易失性存儲(chǔ)器、非易失性存儲(chǔ)器等)或者對(duì)傳輸介質(zhì)的接口(例如,網(wǎng)絡(luò)接口或者其它數(shù)字或者模擬通信接口)。介質(zhì)接口820可以從介質(zhì)(例如存儲(chǔ)介質(zhì)792或者傳輸介質(zhì)795)讀取軟件例程。機(jī)器可讀介質(zhì)是能夠至少暫時(shí)地存儲(chǔ)信息的任何介質(zhì),所述信息被機(jī)器接口讀取。這可以包括信號(hào)傳輸(經(jīng)由作為介質(zhì)的線纜、光學(xué)裝置或者空氣)和/或例如各種類型的盤(pán)和存儲(chǔ)器存儲(chǔ)設(shè)備的物理存儲(chǔ)介質(zhì)792。
圖9a圖示了根據(jù)一個(gè)實(shí)施例的空閑循環(huán)。在框905中,利用地址1作為其操作數(shù)即監(jiān)視地址來(lái)執(zhí)行MONITOR命令。在同一線程中,在框910中執(zhí)行MWAIT命令。如前面所討論的,假定正確地滿足其它條件時(shí),MWAIT指令導(dǎo)致線程被掛起。當(dāng)在框915中發(fā)生斷點(diǎn)事件時(shí),例程前進(jìn)到框920以確定存儲(chǔ)在監(jiān)視地址處的值是否改變了。如果監(jiān)視地址處的值確實(shí)改變了,則繼續(xù)執(zhí)行線程,如框922中所示。如果值沒(méi)有改變,則發(fā)生錯(cuò)誤的喚醒事件。在這樣的意義上喚醒事件是錯(cuò)誤的,即沒(méi)有發(fā)生對(duì)監(jiān)視地址的存儲(chǔ)器寫(xiě)入就退出了MWAIT。如果值沒(méi)有改變,則循環(huán)返回到框905,在該處再次設(shè)置監(jiān)視器。這種循環(huán)軟件實(shí)現(xiàn)方式使得監(jiān)視器能夠被設(shè)計(jì)成允許錯(cuò)誤的喚醒事件。
圖9b圖示了另一個(gè)空閑循環(huán)。圖9b的實(shí)施例增加了額外的一次檢查,以進(jìn)一步減小MWAIT指令不能捕捉到對(duì)被監(jiān)視存儲(chǔ)器地址的寫(xiě)入的可能性。同樣,圖9b中流程從利用地址1作為其操作數(shù)來(lái)執(zhí)行MONITOR指令開(kāi)始,如框925中所示。另外,框930中,軟件例程讀取監(jiān)視地址處的存儲(chǔ)器值。在框935中,軟件雙重檢驗(yàn)以確保存儲(chǔ)器值沒(méi)有從指示了該線程應(yīng)該是閑置的值被改變。如果值被改變了,則繼續(xù)執(zhí)行線程,如框952中所示。如果值沒(méi)有改變,則執(zhí)行MWAIT指令,如框940所示。如前面所討論的,線程被掛起直至在框945中發(fā)生斷點(diǎn)事件。但是,同樣由于允許錯(cuò)誤的斷點(diǎn)事件,所以在框950再次檢查該值是否改變。如果值沒(méi)有改變,則循環(huán)通過(guò)返回到框925而返回以再次允許監(jiān)視器追蹤地址1。如果值改變了,則在框952中繼續(xù)執(zhí)行線程。在一些實(shí)施例中,在錯(cuò)誤喚醒事件之后,可以不需要在執(zhí)行MWAIT指令以再次掛起該線程之前來(lái)再執(zhí)行MONITOR指令。
圖9c圖示了利用了MONITOR和MWAIT指令的軟件序列的另一個(gè)示例。在圖9c的示例中,循環(huán)并不閑置,除非線程內(nèi)的兩個(gè)單獨(dú)的任務(wù)沒(méi)有工作可做。當(dāng)有工作要由第一例程來(lái)做時(shí),在工作單元(worklocation)WL1中存儲(chǔ)常值CV1。類似地,當(dāng)有工作要第二例程來(lái)做時(shí),在WL2中存儲(chǔ)常值CV2。為了使用單個(gè)監(jiān)視地址,WL1和WL2被選為同一高速緩存行中的存儲(chǔ)器單元?;蛘撸梢允褂脝蝹€(gè)工作單元存儲(chǔ)多個(gè)任務(wù)的狀態(tài)指示。例如,單個(gè)字節(jié)或者其它單位中的一個(gè)或者多個(gè)位可以各代表一項(xiàng)不同的任務(wù)。
如框955中所示,設(shè)置監(jiān)視器來(lái)監(jiān)視WL1。在框960中,對(duì)WL1是否存儲(chǔ)了指示有工作要做的常值進(jìn)行測(cè)試。如果是,則進(jìn)行與WL1有關(guān)的工作,如框965中所示。如果不是,則在框970中,對(duì)WL2是否存儲(chǔ)了指示有與WL2相關(guān)的工作要做的常值CV2進(jìn)行測(cè)試。如果是,則進(jìn)行與WL2有關(guān)的工作,如框975中所示。如果不是,則循環(huán)可以前進(jìn)以在框980中確定是否適于調(diào)用電源管理控制器。例如,如果經(jīng)過(guò)了選定量的時(shí)間,則可以將邏輯處理器置于降低功耗狀態(tài)(例如根據(jù)1999年2月8日發(fā)布的1.0b版本(或者更新)的高級(jí)配置和電源接口(ACPI,AdvancedConfiguration and Power Interface)規(guī)范定義的一套“C”狀態(tài)中的一種,所述ACPI規(guī)范在提交本申請(qǐng)的時(shí)候可以從www.acpi.info獲得)。如果這樣,則在框985中調(diào)用電源管理控制器。在其中有工作要做的965、975和985中的任何一種情況下,線程完成該工作并隨后返回,以在框955中設(shè)置監(jiān)視器之后再進(jìn)行相同的判斷。在另一個(gè)實(shí)施例中,只要監(jiān)視器一直是活動(dòng)的,則從965、975和985返回可以是返回至框960。
如果在框965、975和985中都遇到?jīng)]有工作要做的情況,則執(zhí)行MWAIT指令,如框990所示。當(dāng)如框995所示發(fā)生斷點(diǎn)事件時(shí),最終退出由MWAIT導(dǎo)致的線程掛起狀態(tài)。此時(shí),循環(huán)返回框955以設(shè)置監(jiān)視器,之后確定WL1或者WL2是否指示了有工作要做。如果沒(méi)有工作要做(例如在錯(cuò)誤喚醒事件的情況下),循環(huán)將返回至框990中的MWAIT,并再次掛起線程直至斷點(diǎn)事件發(fā)生。
圖10圖示了處理器的另一個(gè)實(shí)施例,該處理器使得監(jiān)視值能夠在L1高速緩存中一直被高速緩存。圖10中的處理器包括執(zhí)行單元1005、L1高速緩存1010以及L1高速緩存與非獨(dú)占(inclusive)L2高速緩存1030之間的寫(xiě)合并緩沖器(write combining buffer)。寫(xiě)合并緩沖器1020包括監(jiān)聽(tīng)端口1044,該監(jiān)聽(tīng)端口1044通過(guò)總線接口1040從總線1045接收到的操作來(lái)確保內(nèi)部高速緩存與其它存儲(chǔ)器的一致性。由于受一致性影響的事務(wù)經(jīng)由監(jiān)聽(tīng)端口1044到達(dá)寫(xiě)合并緩沖器1020,所以監(jiān)視器可以位于L1高速緩存級(jí),并仍然接收足夠的信息以確定總線1045上何時(shí)發(fā)生存儲(chǔ)器寫(xiě)入事件。這樣,存儲(chǔ)器對(duì)應(yīng)于監(jiān)視地址的行可以被保存在L1高速緩存中。監(jiān)視器能夠檢測(cè)來(lái)自執(zhí)行單元的對(duì)L1高速緩存的寫(xiě)入,以及經(jīng)由該端口來(lái)自總線1045的寫(xiě)入。
另一個(gè)實(shí)施例支持雙操作數(shù)監(jiān)視指令。一個(gè)操作數(shù)如前所述地指示存儲(chǔ)器地址。第二個(gè)操作數(shù)是一個(gè)掩碼,其指示其它情況下不會(huì)打斷存儲(chǔ)器等待狀態(tài)的各種事件中哪一個(gè)應(yīng)該導(dǎo)致打斷特定的存儲(chǔ)器等待。例如,盡管中斷被屏蔽,但是一個(gè)屏蔽位可以指示被屏蔽的中斷應(yīng)該被允許來(lái)打斷等待狀態(tài)(例如,即使在EFLAGS位IF被設(shè)置以屏蔽中斷時(shí)允許喚醒事件)??赡茈S后,在打斷存儲(chǔ)器等待狀態(tài)之后所執(zhí)行的指令之一去除對(duì)該中斷的屏蔽,使它得到服務(wù)??梢栽试S其它情況下不會(huì)打破存儲(chǔ)器等待狀態(tài)的其它事件來(lái)打破存儲(chǔ)器等待,或者相反可以禁用正常情況下打斷存儲(chǔ)器等待狀態(tài)的事件。如對(duì)第一操作數(shù)所討論的,第二操作數(shù)可以是顯式的或者隱式的。
圖11圖示了用于模擬、仿真和制造使用所公開(kāi)技術(shù)的設(shè)計(jì)的各種設(shè)計(jì)表示或格式。表示設(shè)計(jì)的數(shù)據(jù)可能以多種方式來(lái)表示該設(shè)計(jì)。首先,因?yàn)樵谀M中有用,硬件可以用硬件描述語(yǔ)言或另一種功能描述語(yǔ)言來(lái)表示,該語(yǔ)言實(shí)際上提供了期望所設(shè)計(jì)的硬件如何執(zhí)行的計(jì)算機(jī)化的模型。硬件模型1110可被存儲(chǔ)在諸如計(jì)算機(jī)存儲(chǔ)器的存儲(chǔ)介質(zhì)1100中,使得可以用模擬軟件1120來(lái)模擬該模型,其中模擬軟件1120向硬件模型1110應(yīng)用特定的測(cè)試包1130,以確定其是否如希望的那樣起作用。在一些實(shí)施例中,模擬軟件并不被記錄、捕獲或包含在介質(zhì)中。
另外,在設(shè)計(jì)過(guò)程的某些階段可能產(chǎn)生具有邏輯和/或晶體管門的電路級(jí)模型。該模型可以類似地被模擬,有時(shí)是通過(guò)使用可編程邏輯形成該模型的專用硬件模擬器來(lái)模擬。更進(jìn)一步,這種類型的模擬可以是仿真技術(shù)。無(wú)論如何,可重新配置的硬件是另一個(gè)實(shí)施例,其可以包括存儲(chǔ)有采用所公開(kāi)技術(shù)的模型的機(jī)器可讀介質(zhì)。
另外,大多數(shù)設(shè)計(jì)都在某個(gè)階段達(dá)到在硬件模型中表示各個(gè)設(shè)備的物理布置的數(shù)據(jù)水平。在使用傳統(tǒng)半導(dǎo)體制造技術(shù)的情況下,表示硬件模型的數(shù)據(jù)可以是這樣的數(shù)據(jù),其指定在用來(lái)產(chǎn)生集成電路的掩模的不同掩模層上有或沒(méi)有各種特征。同樣,表示集成電路的此數(shù)據(jù)實(shí)現(xiàn)了所公開(kāi)的技術(shù),因?yàn)樵摂?shù)據(jù)中的電路系統(tǒng)或邏輯可以被模擬或制造來(lái)執(zhí)行這些技術(shù)。
在設(shè)計(jì)的任何表示中,數(shù)據(jù)都可以被存儲(chǔ)在任何形式的計(jì)算機(jī)可讀介質(zhì)中。這種介質(zhì)可以是被調(diào)制或產(chǎn)生來(lái)傳輸這種信息的光波或電波1 160、存儲(chǔ)器1150或者諸如盤(pán)之類的磁或光存儲(chǔ)1140。描述該設(shè)計(jì)或該設(shè)計(jì)特定部分的位集是這樣的制品,其本身自己就可被銷售,或者可以被其他人進(jìn)一步地設(shè)計(jì)或制造使用。
這樣,公開(kāi)了用于掛起線程的執(zhí)行直至指定的存儲(chǔ)器訪問(wèn)發(fā)生的技術(shù)。盡管描述并在附圖中示出了某些示例性的實(shí)施例,但是應(yīng)該理解這些實(shí)施例對(duì)本概括性發(fā)明僅僅是示例說(shuō)明,而不是限制性的,并且由于本領(lǐng)域普通技術(shù)人員在研究本公開(kāi)文本后可以想到各種其它的修改,所以本發(fā)明不限于所示出和描述的具體構(gòu)造和布置。
權(quán)利要求
1.一種處理器,包括多個(gè)執(zhí)行單元,允許執(zhí)行包括第一線程的多個(gè)線程,所述第一線程具有第一指令,所述第一指令具有指示了監(jiān)視地址的相關(guān)聯(lián)地址操作數(shù);掛起邏輯,用于掛起所述第一線程的執(zhí)行;監(jiān)視器,用于響應(yīng)于對(duì)所述監(jiān)視地址的存儲(chǔ)器訪問(wèn)來(lái)使所述第一線程恢復(fù)。
2.如權(quán)利要求1所述的處理器,其中僅當(dāng)所述存儲(chǔ)器訪問(wèn)指示了對(duì)所述監(jiān)視地址的實(shí)際或者可能的寫(xiě)入的時(shí)候,所述監(jiān)視器才響應(yīng)于所述存儲(chǔ)器訪問(wèn)而導(dǎo)致恢復(fù)。
3.如權(quán)利要求1所述的處理器,其中如果所述第一線程被掛起并且監(jiān)視事件被去除屏蔽,則所述監(jiān)視器響應(yīng)于對(duì)所述監(jiān)視地址的存儲(chǔ)器訪問(wèn)來(lái)使所述第一線程恢復(fù)。
4.如權(quán)利要求3所述的處理器,還包括事件檢測(cè)邏輯,用于響應(yīng)于除所述存儲(chǔ)器訪問(wèn)以外的事件來(lái)使所述第一線程恢復(fù)。
5.如權(quán)利要求4所述的處理器,其中所述事件是中斷。
6.如權(quán)利要求1所述的處理器,其中所述相關(guān)聯(lián)地址操作數(shù)是隱式操作數(shù)。
7.如權(quán)利要求6所述的處理器,其中所述相關(guān)聯(lián)地址操作數(shù)被存儲(chǔ)在預(yù)定的寄存器中。
8.如權(quán)利要求1所述的處理器,其中所述掛起邏輯響應(yīng)于第二指令而掛起對(duì)所述第一線程的執(zhí)行,其中所述第一指令使能所述監(jiān)視器并且所述第二指令去除對(duì)所述監(jiān)視器發(fā)信號(hào)通知的事件的屏蔽。
9.如權(quán)利要求8所述的處理器,其中如果所述第一指令已經(jīng)被執(zhí)行,則所述第二指令僅僅使能所述監(jiān)視器。
10.如權(quán)利要求1所述的處理器,其中所述掛起邏輯響應(yīng)于所述第一指令而掛起所述第一線程的執(zhí)行。
11.如權(quán)利要求8所述的處理器,還包括一致性邏輯,用于提高對(duì)所述監(jiān)視地址的存儲(chǔ)的可見(jiàn)性。
12.如權(quán)利要求11所述的處理器,其中所述一致性邏輯用于確保在一致性域中沒(méi)有高速緩存以修改或者獨(dú)占狀態(tài)在所述監(jiān)視地址存儲(chǔ)信息。
13.如權(quán)利要求12所述的處理器,其中所述一致性邏輯用于從任何內(nèi)部高速緩存清空與所述監(jiān)視地址相關(guān)聯(lián)的高速緩存行,并用于向耦合到所述處理器的其它處理器產(chǎn)生對(duì)所述與所述監(jiān)視地址相關(guān)聯(lián)的高速緩存行的總線讀行事務(wù),所述總線讀行事務(wù)是根據(jù)流水線總線協(xié)議而被提供的多階段事務(wù)。
14.如權(quán)利要求11所述的處理器,其中所述一致性邏輯用于使所述處理器產(chǎn)生總線周期,以防止任何其它總線代理在沒(méi)有廣播寫(xiě)事務(wù)的情況下對(duì)所述監(jiān)視地址進(jìn)行所述寫(xiě)事務(wù)。
15.如權(quán)利要求14所述的處理器,還包括總線控制邏輯,用于響應(yīng)于另一個(gè)總線代理在所述監(jiān)視地址讀取信息而斷言命中信號(hào)。
16.如權(quán)利要求1所述的處理器,其中由所述相關(guān)聯(lián)地址操作數(shù)指示的所述監(jiān)視地址,指示高速緩存行、高速緩存行的一部分或者其他大小的單元中的一個(gè),以用于由所述相關(guān)聯(lián)地址操作數(shù)指示的地址處的數(shù)據(jù)。
17.如權(quán)利要求1所述的處理器,還包括地址轉(zhuǎn)換邏輯,用于將所述相關(guān)聯(lián)地址操作數(shù)轉(zhuǎn)換成作為物理地址的所述監(jiān)視地址。
18.如權(quán)利要求1所述的處理器,其中所述監(jiān)視地址選自由物理地址、虛擬地址、相對(duì)地址和線性地址組成的組。
19.如權(quán)利要求1所述的處理器,還包括多個(gè)可分區(qū)資源,當(dāng)有多個(gè)線程是活動(dòng)的時(shí)候,所述多個(gè)可分區(qū)資源被分區(qū)以將各個(gè)可分區(qū)資源的一部分專用于所述多個(gè)線程中的各個(gè)活動(dòng)線程,其中所述掛起邏輯響應(yīng)于掛起所述第一線程的執(zhí)行而釋放專用于所述第一線程的所述多個(gè)分區(qū)中的任一個(gè)。
20.如權(quán)利要求19所述的處理器,其中所述監(jiān)視器響應(yīng)于對(duì)所述監(jiān)視地址的所述存儲(chǔ)器訪問(wèn),而使所述多個(gè)可分區(qū)資源被重新分區(qū)以支持所述第一線程的執(zhí)行。
21.如權(quán)利要求20所述的處理器,其中所述多個(gè)可分區(qū)資源包括指令隊(duì)列;重排緩沖器;寄存器池;多個(gè)存儲(chǔ)緩沖器。
22.如權(quán)利要求21所述的處理器,還包括多個(gè)復(fù)制資源,所述多個(gè)復(fù)制資源被復(fù)制用于所述多個(gè)線程的每一個(gè),所述多個(gè)復(fù)制資源包括多個(gè)處理器狀態(tài)變量;指令指針;寄存器重命名邏輯。
23.如權(quán)利要求22所述的處理器,還包括多個(gè)共享資源,所述多個(gè)共享資源可被所述多個(gè)線程中的任一個(gè)所使用,所述多個(gè)共享資源包括所述多個(gè)執(zhí)行單元;高速緩存;調(diào)度器。
24.一種處理器,包括前端,用于接收來(lái)自第一線程的第一指令和來(lái)自所述第一線程的第二指令,所述第一指令指示監(jiān)視地址;執(zhí)行資源,用于執(zhí)行所述第一指令和所述第二指令,并響應(yīng)于所述第二指令而掛起所述第一線程的執(zhí)行;監(jiān)視器,用于響應(yīng)于對(duì)所述監(jiān)視地址的存儲(chǔ)器訪問(wèn)而使所述第一線程恢復(fù)。
25.如權(quán)利要求24所述的處理器,其中所述第一指令具有指示了線性地址的操作數(shù),并且所述處理器還包括地址轉(zhuǎn)換邏輯,所述地址轉(zhuǎn)換邏輯轉(zhuǎn)換所述線性地址以獲得作為物理地址的所述監(jiān)視地址。
26.如權(quán)利要求25所述的處理器,還包括一致性邏輯,用于確保耦合到所述處理器的另一個(gè)處理器中沒(méi)有高速緩存以修改或者獨(dú)占狀態(tài)在所述監(jiān)視地址存儲(chǔ)信息。
27.如權(quán)利要求26所述的處理器,其中所述一致性邏輯響應(yīng)于另一個(gè)處理器對(duì)所述監(jiān)視地址的監(jiān)聽(tīng)而斷言命中信號(hào)。
28.一種處理器,包括前端邏輯,用于接收來(lái)自第一線程的第一指令,所述第一指令具有相關(guān)聯(lián)監(jiān)視地址;監(jiān)視器,被耦合以接收所述監(jiān)視地址,并響應(yīng)于所述第一指令而監(jiān)視對(duì)所述監(jiān)視地址的存儲(chǔ)器訪問(wèn),并當(dāng)發(fā)生對(duì)所述監(jiān)視地址的訪問(wèn)時(shí)發(fā)信號(hào)通知事件。
29.如權(quán)利要求28所述的處理器,其中所述處理器響應(yīng)于寫(xiě)入所述監(jiān)視地址的寫(xiě)入存儲(chǔ)器訪問(wèn)而發(fā)信號(hào)通知所述事件。
30.如權(quán)利要求28所述的處理器,其中所述監(jiān)視器響應(yīng)于行使無(wú)效事務(wù)而發(fā)信號(hào)通知所述事件。
31.如權(quán)利要求28所述的處理器,還包括一致性邏輯,用于確保耦合到所述處理器的另一個(gè)處理器中沒(méi)有高速緩存以修改或者獨(dú)占狀態(tài)在所述監(jiān)視地址存儲(chǔ)信息。
32.如權(quán)利要求31所述的處理器,其中所述一致性邏輯包括用于產(chǎn)生內(nèi)部高速緩存清空周期以及用于產(chǎn)生外部讀行事務(wù)的邏輯。
33.如權(quán)利要求28所述的處理器,還包括邏輯,用于去除對(duì)來(lái)自所述監(jiān)視器的監(jiān)視事件的屏蔽,并響應(yīng)于第二指令而掛起所述第一線程。
34.一種處理器,包括多個(gè)執(zhí)行單元,用于執(zhí)行多個(gè)線程;前端邏輯,用于接收來(lái)自所述多個(gè)線程中的第一線程的指令;掛起邏輯,所述掛起邏輯如果沒(méi)有監(jiān)視事件懸置則響應(yīng)于所述指令而掛起所述第一線程,并且允許所述多個(gè)線程中的其它線程執(zhí)行。
35.如權(quán)利要求34所述的處理器,其中所述掛起邏輯用于使能對(duì)監(jiān)視事件的識(shí)別,所述監(jiān)視事件包括已經(jīng)懸置的監(jiān)視事件。
36.如權(quán)利要求35所述的處理器,其中所述處理器包括多個(gè)可分區(qū)資源,并且所述掛起邏輯除了響應(yīng)于所述指令而掛起所述第一線程以外,還釋放各個(gè)所述多個(gè)可分區(qū)資源中與所述第一線程相關(guān)聯(lián)的分區(qū)。
37.一種處理器,包括多個(gè)線程可分區(qū)資源,用于接收指令;多個(gè)共享資源,用于配合所述多個(gè)線程可分區(qū)資源來(lái)執(zhí)行指令;線程掛起邏輯,用于響應(yīng)于第一線程中的指令而掛起所述第一線程,所述線程掛起邏輯除了掛起所述第一線程以外,還釋放所述多個(gè)線程可分區(qū)資源中與所述第一線程相關(guān)聯(lián)的分區(qū);監(jiān)視器,用于響應(yīng)于對(duì)所述第一線程所指示的存儲(chǔ)器地址的訪問(wèn),而使所述處理器對(duì)所述多個(gè)線程可分區(qū)資源重新分區(qū),并恢復(fù)所述第一線程的執(zhí)行。
38.如權(quán)利要求37所述的處理器,其中對(duì)所述存儲(chǔ)器地址的所述訪問(wèn)由在所述第一線程中被執(zhí)行的第一指令所指定,并且其中所述監(jiān)視器由所述線程掛起邏輯響應(yīng)于其而掛起所述第一線程的所述指令,去除屏蔽來(lái)發(fā)信號(hào)通知監(jiān)視事件以恢復(fù)線程。
39.一種設(shè)備,包括用于掛起多個(gè)執(zhí)行線程中的第一線程的裝置;用于檢測(cè)對(duì)存儲(chǔ)器單元的訪問(wèn)的裝置;用于響應(yīng)于用于檢測(cè)的裝置檢測(cè)到對(duì)所述存儲(chǔ)器單元的所述訪問(wèn)而恢復(fù)所述第一線程的裝置。
40.如權(quán)利要求39所述的設(shè)備,其中所述用于檢測(cè)對(duì)所述存儲(chǔ)器單元的所述訪問(wèn)的裝置,響應(yīng)于在所述第一線程中被執(zhí)行的第一指令而被使能,并且其中所述用于掛起所述第一線程的裝置,響應(yīng)于在所述第一線程中被執(zhí)行的第二指令而掛起所述第一線程。
41.如權(quán)利要求40所述的設(shè)備,還包括用于簡(jiǎn)化對(duì)訪問(wèn)所述存儲(chǔ)器單元的檢測(cè)的一致性裝置。
42.如權(quán)利要求41所述的設(shè)備,其中對(duì)所述存儲(chǔ)器單元的所述訪問(wèn)是寫(xiě)入或者使無(wú)效訪問(wèn)。
43.如權(quán)利要求41所述的設(shè)備,還包括用于響應(yīng)于所述用于掛起的裝置掛起所述第一線程的執(zhí)行而對(duì)資源退火的裝置,所述用于退火的裝置釋放與所述第一線程相關(guān)聯(lián)的被分區(qū)資源,以供所述多個(gè)線程中的其它線程使用。用于對(duì)資源分區(qū)以重分區(qū)資源來(lái)適應(yīng)恢復(fù)所述第一線程的裝置。
44.一種方法,包括接收在執(zhí)行的第一線程中的第一操作碼,所述第一操作碼具有指示監(jiān)視地址的相關(guān)聯(lián)地址操作數(shù);掛起所述第一線程;檢測(cè)對(duì)所述監(jiān)視地址的存儲(chǔ)器訪問(wèn);響應(yīng)于檢測(cè)到對(duì)所述監(jiān)視地址的所述存儲(chǔ)器訪問(wèn)而恢復(fù)所述第一線程。
45.如權(quán)利要求44所述的方法,其中掛起所述第一線程的步驟包括接收所述第一線程中的第二指令;響應(yīng)于所述第二指令而掛起所述第一線程。
46.如權(quán)利要求45所述的方法,其中所述存儲(chǔ)器訪問(wèn)是寫(xiě)訪問(wèn)。
47.如權(quán)利要求45所述的方法,還包括將所述相關(guān)聯(lián)地址操作數(shù)轉(zhuǎn)換為被監(jiān)視物理地址,其中檢測(cè)對(duì)所述監(jiān)視地址的所述存儲(chǔ)器訪問(wèn)的步驟,包括檢測(cè)對(duì)所述被監(jiān)視物理地址的寫(xiě)訪問(wèn)。
48.如權(quán)利要求44所述的方法,還包括防止其它代理獲得對(duì)存儲(chǔ)在所述監(jiān)視地址的信息的占有權(quán)。
49.如權(quán)利要求44所述的方法,其中所述檢測(cè)步驟包括接收來(lái)自外部總線事務(wù)的周期信息;檢測(cè)對(duì)所述監(jiān)視地址的寫(xiě)入。
50.如權(quán)利要求44所述的方法,還包括響應(yīng)于除了對(duì)所述監(jiān)視地址的所述存儲(chǔ)器訪問(wèn)以外的事件而恢復(fù)所述第一線程。
51.如權(quán)利要求50所述的方法,其中所述事件是中斷。
52.如權(quán)利要求51所述的方法,其中所述中斷是被第二指令指示成仍被視為斷點(diǎn)事件的被屏蔽中斷。
53.一種方法,包括接收在執(zhí)行的第一線程中執(zhí)行的第一操作碼;將與所述第一操作碼相關(guān)聯(lián)的線性地址轉(zhuǎn)換為物理地址;由監(jiān)視總線代理執(zhí)行總線事務(wù),以確保沒(méi)有其它總線代理對(duì)與所述物理地址相關(guān)聯(lián)的數(shù)據(jù)具有這樣的占有權(quán),所述占有權(quán)足以允許另一個(gè)總線代理在不通知所述監(jiān)視總線代理的情況下修改所述數(shù)據(jù);監(jiān)視對(duì)所述物理地址的寫(xiě)訪問(wèn);如果另一個(gè)總線代理讀取所述物理地址,則發(fā)出命中信號(hào);接收在執(zhí)行的所述第一線程中的第二操作碼;響應(yīng)于所述第二操作碼,而掛起在執(zhí)行的所述第一線程并使能對(duì)監(jiān)視事件的識(shí)別;如果所述寫(xiě)訪問(wèn)發(fā)生,則恢復(fù)所述第一線程;響應(yīng)于第一組事件中的任一事件而恢復(fù)所述第一線程的執(zhí)行;忽略第二組事件。
54.如權(quán)利要求53所述的方法,其中所述響應(yīng)于所述第二操作碼而掛起在執(zhí)行的所述第一線程的步驟包括測(cè)試所述監(jiān)視事件是否懸置;測(cè)試監(jiān)視器是否是活動(dòng)的;如果所述監(jiān)視器是活動(dòng)的并且沒(méi)有監(jiān)視事件懸置,則進(jìn)入所述第一線程被掛起的狀態(tài)。
55.如權(quán)利要求54所述的方法,其中進(jìn)入所述第一線程被掛起的狀態(tài)的步驟包括釋放寄存器池中的多個(gè)寄存器;釋放指令隊(duì)列中的多個(gè)指令隊(duì)列條目;釋放存儲(chǔ)緩沖器中的多個(gè)存儲(chǔ)緩沖器條目;釋放重排緩沖器中的多個(gè)重排緩沖器條目。
56.一種系統(tǒng),包括存儲(chǔ)器,用于存儲(chǔ)來(lái)自第一線程的第一指令,所述第一指令具有指示監(jiān)視地址的相關(guān)聯(lián)地址操作數(shù);耦合到所述存儲(chǔ)器的第一處理器,所述第一處理器響應(yīng)于所述第一指令而允許監(jiān)視器監(jiān)視存儲(chǔ)器事務(wù)以檢測(cè)對(duì)所述監(jiān)視地址的存儲(chǔ)器訪問(wèn),并且所述第一處理器響應(yīng)于對(duì)所述監(jiān)視地址的所述存儲(chǔ)器訪問(wèn)而使所述第一線程恢復(fù)。
57.如權(quán)利要求56所述的系統(tǒng),其中所述存儲(chǔ)器存儲(chǔ)來(lái)自所述第一線程的第二指令,并且其中所述第一處理器響應(yīng)于所述第二指令而掛起所述第一線程。
58.如權(quán)利要求57所述的系統(tǒng),其中所述監(jiān)視器響應(yīng)于發(fā)生所述存儲(chǔ)器訪問(wèn)而設(shè)置監(jiān)視事件懸置指示符,所述監(jiān)視事件懸置指示符一旦被所述第二指令去除了屏蔽,就使所述第一處理器恢復(fù)線程。
59.如權(quán)利要求56所述的系統(tǒng),其中所述第一處理器包括第一高速緩存,所述系統(tǒng)還包括包括第二高速緩存的第二處理器,其中所述第一處理器推動(dòng)對(duì)所述第二處理器的總線事務(wù),以強(qiáng)制所述第二處理器向所述第一處理器廣播這樣的任何事務(wù),所述事務(wù)允許改變存儲(chǔ)在所述第二高速緩存中所述監(jiān)視地址處的數(shù)據(jù)。
60.如權(quán)利要求59所述的系統(tǒng),其中所述第一處理器斷言一個(gè)信號(hào),以防止所述第二處理器在這樣的狀態(tài)下對(duì)所述監(jiān)視地址處的數(shù)據(jù)進(jìn)行高速緩存,所述狀態(tài)允許所述第二處理器在不廣播正發(fā)生修改的情況下,修改存儲(chǔ)在所述第二高速緩存中所述監(jiān)視地址處的數(shù)據(jù)。
61.如權(quán)利要求60所述的系統(tǒng),其中所述信號(hào)指示高速緩存命中,并防止所述第二高速緩存以獨(dú)占狀態(tài)在所述監(jiān)視地址處存儲(chǔ)數(shù)據(jù)。
62.如權(quán)利要求58所述的系統(tǒng),其中所述第一處理器還在發(fā)生其它事件的情況下恢復(fù)所述第一線程。
63.如權(quán)利要求62所述的系統(tǒng),其中所述其它事件是中斷。
64.如權(quán)利要求62所述的系統(tǒng),其中存儲(chǔ)在所述存儲(chǔ)器中的所述第一線程包括循環(huán),所述循環(huán)包括所述第一指令和所述第二指令以及一個(gè)測(cè)試,所述測(cè)試用于確定所述監(jiān)視地址處的數(shù)據(jù)是否已經(jīng)改變,并當(dāng)所述監(jiān)視地址處的數(shù)據(jù)保持不變時(shí)重新啟動(dòng)所述循環(huán)。
65.一種包括計(jì)算機(jī)可讀介質(zhì)的制品,其代表處理器,所述處理器包括多個(gè)執(zhí)行單元,允許執(zhí)行包括第一線程的多個(gè)線程,所述第一線程具有第一指令,所述第一指令具有指示了監(jiān)視地址的相關(guān)聯(lián)地址操作數(shù);掛起邏輯,用于掛起所述第一線程的執(zhí)行;監(jiān)視器,用于響應(yīng)于對(duì)所述監(jiān)視地址的存儲(chǔ)器訪問(wèn)來(lái)使所述第一線程恢復(fù)。
66.如權(quán)利要求65所述的制品,其中僅當(dāng)所述存儲(chǔ)器訪問(wèn)指示了對(duì)所述監(jiān)視地址的實(shí)際或者可能的寫(xiě)入的時(shí)候,所述監(jiān)視器才響應(yīng)于所述存儲(chǔ)器訪問(wèn)而導(dǎo)致恢復(fù)。
67.如權(quán)利要求65所述的制品,其中如果所述第一線程被掛起并且監(jiān)視事件被去除屏蔽,則所述監(jiān)視器響應(yīng)于對(duì)所述監(jiān)視地址的存儲(chǔ)器訪問(wèn)來(lái)使所述第一線程恢復(fù)。
68.如權(quán)利要求65所述的制品,其中所述處理器還包括事件檢測(cè)邏輯,用于響應(yīng)于除所述存儲(chǔ)器訪問(wèn)以外的事件來(lái)使所述第一線程恢復(fù)。
69.如權(quán)利要求68所述的制品,其中所述處理器還包括多個(gè)可分區(qū)資源,當(dāng)有多個(gè)線程是活動(dòng)的時(shí)候,所述多個(gè)可分區(qū)資源被分區(qū)以將各個(gè)可分區(qū)資源的一部分專用于所述多個(gè)線程中的各個(gè)活動(dòng)線程,其中所述掛起邏輯響應(yīng)于掛起所述第一線程的執(zhí)行而釋放專用于所述第一線程的所述多個(gè)分區(qū)中的任一個(gè)。
全文摘要
本發(fā)明公開(kāi)了用于掛起線程的執(zhí)行直至發(fā)生指定的存儲(chǔ)器訪問(wèn)的技術(shù)。在一個(gè)實(shí)施例中,處理器包括能夠執(zhí)行多線程的多個(gè)執(zhí)行單元。第一線程包括指定了監(jiān)視地址的一個(gè)指令。掛起邏輯掛起所述第一線程的執(zhí)行,并且監(jiān)視器響應(yīng)于對(duì)所述指定監(jiān)視地址的訪問(wèn)而使第一線程恢復(fù)。
文檔編號(hào)G06F9/46GK1688974SQ02826590
公開(kāi)日2005年10月26日 申請(qǐng)日期2002年12月11日 優(yōu)先權(quán)日2001年12月31日
發(fā)明者黛博拉·馬爾, 斯科特·羅杰斯, 戴維·希爾, 夏夫南丹·考??? 詹姆斯·克羅斯蘭, 戴維·庫(kù)法提 申請(qǐng)人:英特爾公司