r>[0029]恢復(fù)存儲器狀態(tài)。由于存儲操作具有對存儲器的最終影響(例如,除非整個原子區(qū)域卷回,否則不可恢復(fù)),所以在當(dāng)前的內(nèi)核期間所執(zhí)行的所有存儲操作都應(yīng)該來自非推測的迭代(例如,在當(dāng)前的內(nèi)核執(zhí)行時已經(jīng)完成的最近的迭代),而不來自推測的迭代。管線調(diào)度器將所有存儲保持在調(diào)度的最后階段,例如,管線調(diào)度器不推測存儲。因此,可以假設(shè)將所有的存儲調(diào)度在迭代的最后階段。在當(dāng)前的內(nèi)核(240中的周期8-9)執(zhí)行時,存儲操作來自迭代2,并且其是推測迭代,這是因為其還沒有完成。最近完成的迭代是迭代I并且是非推測的。因此,如在調(diào)度260中所示,通過向每個迭代中增加一個階段(例如,262、266、268、270、272)可以延遲存儲。利用所增加的階段,在當(dāng)前階段(例如,階段5)中執(zhí)行的所有存儲都來自非推測迭代。在當(dāng)前的內(nèi)核(周期8-9)中,迭代I已正確完成除了存儲操作之外的其它操作。如果發(fā)生不期望的行為(例如,異常),則可以重新執(zhí)行存儲操作以完成迭代I。概括而言,迭代N中的階段M處的異??赡苡|發(fā)迭代(N-S+M)的結(jié)果的恢復(fù)和提交。(在迭代I中的存儲操作引起存儲器故障的情況下,可以沒有迭代I的結(jié)果的恢復(fù),并且卷回至最后的提交點迭代O并從迭代O繼續(xù)執(zhí)行)。
[0030]擴展的階段插入。通過針對在外寄存器和存儲操作的在每個調(diào)度的末尾處的擴展的階段(例如,階段262、266、268、270、272)的插入,I和2的組合可以工作。當(dāng)要發(fā)生卷回時,完成非推測迭代的擴展的階段的執(zhí)行。
[0031]運行時支持。處理存儲器故障和異常的運行時代碼可以支持在本文中描述的代碼生成技術(shù)。當(dāng)異常發(fā)生時,可以執(zhí)行異常處理程序(handler)以處理該異常。在異常處理程序的執(zhí)行之后,可以執(zhí)行恢復(fù)最近的非推測迭代的狀態(tài)的補償代碼塊。該補償代碼塊可以包括調(diào)度260中的擴展的階段(例如,264)的執(zhí)行,并且也可以包括其在周期9中全部存在的原始在外寄存器值(例如,X0、X1、X2、X3)的恢復(fù)。在示例260中,由于重命名的寄存器X0-X3在管線化的循環(huán)的內(nèi)部,所以補償代碼塊的執(zhí)行包括將寄存器X3的內(nèi)容復(fù)制到寄存器X。補償代碼塊可以對每個迭代不同,并且每個補償代碼塊的執(zhí)行可以將寄存器值X0、X1、X2、X3中的一個的內(nèi)容復(fù)制到寄存器X。(例如,對于如圖2中發(fā)生在周期9中的異常,可以執(zhí)行迭代I的補償塊,該補償塊將Xl復(fù)制到X。)在執(zhí)行補償塊后,可以運行提交以保存之前完成的迭代的結(jié)果(例如,調(diào)度260中的迭代I)。
[0032]圖3是根據(jù)本發(fā)明的一個或多個實施例的用于對循環(huán)的操作進行調(diào)度的方法的流程圖。在方框302處,在編譯時從管線調(diào)度器接收循環(huán)的管線化的調(diào)度。繼續(xù)到方框304,在編譯時執(zhí)行模變量擴展,例如,將寄存器(例如,X)重命名為要被循環(huán)賦值的多個寄存器(例如,圖2的260中的X0、X1、X2、X3)中的一個。前進到方框306,可以在編譯時增加額外的階段,例如,包括在循環(huán)的管線化的調(diào)度的每個迭代中的一個或多個“無操作”以形成循環(huán)的修改的管線化的調(diào)度,在其中,存儲可以延遲并轉(zhuǎn)移到額外的階段,并且將補償代碼(“補償塊”)增加到循環(huán)代碼中。移動到方框308,可以在運行時執(zhí)行循環(huán)的修改的管線化的調(diào)度。繼續(xù)到?jīng)Q策菱形框310,如果完成循環(huán)的執(zhí)行(例如,沒有異常),則該方法在320結(jié)束。如果沒有完成循環(huán)的執(zhí)行,則繼續(xù)至決策菱形框312,如果沒有檢測到異常,則在方框308處繼續(xù)執(zhí)行修改的管線化的調(diào)度的執(zhí)行。如果發(fā)生異常,則繼續(xù)至方框314,響應(yīng)于該異常,在運行時執(zhí)行異常處理程序。前進到方框316,可以在運行時執(zhí)行代碼的補償塊以完成還沒有被執(zhí)行的任何延遲的存儲的執(zhí)行,并向寄存器X返回最終值。繼續(xù)至方框318,提交了最近完成的迭代。該方法在320處結(jié)束。
[0033]現(xiàn)在參考圖4,示出的是根據(jù)本發(fā)明的實施例的處理器的方框圖。如圖4所示,處理器400可以是在核心域410中的包括多個核心410a-410n的多核處理器。根據(jù)本發(fā)明的實施例,核心中的一個或多個可以包括用于向管線化的調(diào)度中的循環(huán)的每個迭代中增加階段的階段插入邏輯,例如,412a、412b…412η,從而例如在從異?;謴?fù)方面提高效率。在本發(fā)明的實施例中,階段插入邏輯可以實現(xiàn)為軟件、固件、硬件、或它們的組合。
[0034]核心可以經(jīng)由互連415耦合至系統(tǒng)代理或包括多種組件的非核心420。如圖所示,非核心420可以包括共享的高速緩存430,其中高速緩存430可以是末級高速緩存并包括高速緩存控制器432。此外,非核心可以包括集成的存儲器控制器440和多種接口 450。
[0035]通過進一步參考圖4,處理器400可以(例如,經(jīng)由存儲器總線)和系統(tǒng)存儲器460進行通信。此外,通過接口 450,可以向多種片外組件(例如,外圍設(shè)備、大容量存儲設(shè)備等)建立連接。盡管利用圖4的實施例中的特定實現(xiàn)進行示出,但本發(fā)明的范圍不限于此。
[0036]參考圖5,示出了包括多個核心的處理器的實施例。處理器500包括任何處理器或處理設(shè)備,例如微處理器、嵌入式處理器、數(shù)字信號處理器(DSP)、網(wǎng)絡(luò)處理器、手持處理器、應(yīng)用處理器、協(xié)處理器、片上系統(tǒng)(SOC)、或用來執(zhí)行代碼的其他設(shè)備。在一個實施例中,處理器500包括至少兩個核心——核心501和核心502,其中所述兩個核心可以包括非對稱核心和對稱核心(示出的實施例)。然而,處理器500可以包括可以是對稱的或非對稱的任何數(shù)量的處理器元件。
[0037]在一個實施例中,處理元件指的是用于支持軟件線程的硬件或邏輯。硬件處理元件的示例包括:線程單元、線程槽、線程、進程單元、環(huán)境、環(huán)境單元、邏輯處理器、硬件線程、核心、和/或能夠保持處理器狀態(tài)(例如,執(zhí)行狀態(tài)或構(gòu)架狀態(tài))的任何其他元件。換句話說,在一個實施例中,處理元件指的是能夠獨立地與代碼(例如,軟件線程、操作系統(tǒng)、應(yīng)用、或其他代碼)關(guān)聯(lián)的任何硬件。物理處理器通常指的是集成電路,其中所述集成電路潛在地包括任何數(shù)量的其他處理元件,例如核心或硬件線程。
[0038]核心常常指的是位于能夠保持獨立構(gòu)架狀態(tài)的集成電路上的邏輯,其中,每個獨立地保持的構(gòu)架狀態(tài)關(guān)聯(lián)于至少一些專用執(zhí)行資源。與核心不同,硬件線程通常指的是位于能夠保持獨立構(gòu)架狀態(tài)的集成電路上的任何邏輯,其中,獨立地保持的構(gòu)架狀態(tài)共享對執(zhí)行資源的訪問??梢钥闯?,當(dāng)某些資源是共享的并且其他資源專用于構(gòu)架狀態(tài)時,硬件線程和核心的術(shù)語之間的線重疊。但是經(jīng)常,操作系統(tǒng)將核心和硬件線程視為單獨的邏輯處理器,其中操作系統(tǒng)能夠在每個邏輯處理器上獨立地調(diào)度操作。
[0039]如在圖5中所示,物理處理器500包括兩個核心,核心501和核心502。這里,認(rèn)為核心501和502是對稱核心,即,具有相同配置、功能單元、和/或邏輯的核心。在另一個實施例中,核心501包括亂序處理器核心,而核心502包括順序處理器核心。然而,可以從任何類型的核心(例如,本地核心、軟件管理的核心、適于執(zhí)行本地指令集構(gòu)架(ISA)的核心、適于執(zhí)行翻譯的ISA的核心、協(xié)同設(shè)計的核心、或其他已知的核心)中單獨地挑選核心501和核心502。但是對于進一步討論,下文中進一步詳細(xì)描述了核心501中示出的功能單元,與在核心502中的單元以相似的方式運行。
[0040]如圖所描繪的,核心501包括兩個硬件線程501a和501b,其也可以被稱為硬件線程槽501a和501b。因此,在一個實施例中,諸如操作系統(tǒng)的軟件實體潛在地將處理器500視為四個分離的處理器(即能夠同時處理四個軟件線程的四個邏輯處理器或處理處理元件)。如上文所暗示的,第一線程關(guān)聯(lián)于構(gòu)架狀態(tài)寄存器501a,第二線程關(guān)聯(lián)于構(gòu)架狀態(tài)寄存器501b,第三線程可以關(guān)聯(lián)于構(gòu)架狀態(tài)寄存器502a,并且第四線程可以關(guān)聯(lián)于構(gòu)架狀態(tài)寄存器502b。這里,如前文所述,構(gòu)架狀態(tài)寄存器中的每個(501a、501b、502a和502b)都可以被稱為處理元件、線程槽、或線程單元。如圖所示,構(gòu)架狀態(tài)寄存器501a在構(gòu)架狀態(tài)寄存器501b中被復(fù)制,因此獨立構(gòu)架狀態(tài)/環(huán)境能夠針對邏輯處理器501a和邏輯處理器501b被存儲。在核心501中,其他更小的資源(例如,分配器和重命名器塊530中的指令指針和重命名邏輯)也可以針對線程501a和501b被復(fù)制??梢酝ㄟ^分割來共享一些資源,例如重排序/退出單元535中的重排序緩沖器、ILTB 520、載入/存儲緩沖器、以及隊列。諸如通用內(nèi)部寄存器、頁表基址寄存器、低級數(shù)據(jù)高速緩存和數(shù)據(jù)TLB515、執(zhí)行單元540、以及部分亂序單元535的其他資源潛在地被完全共享。
[0041]處理器500常常包括可被完全共享、可通過分割被共享、或?qū)S糜谔幚碓?由處理元件專用的其他資源。在圖5中,示出了具有處理器的示例性邏輯單元/資源的純示例性處理器的實施例。應(yīng)當(dāng)注意的是,處理器可以包括或省略任何這些功能單元,并且包括任何其他未描繪出的已知功能元件、邏輯、或固件。如圖所示,核心501包括簡化的、代表性的亂序(000)處理器核心。但是可以在不同的實施例中使用順序處理器。000核心包括分支目標(biāo)緩沖器520以推測將會執(zhí)行或采用的分支,并包括指令轉(zhuǎn)換緩沖器(1-TLB) 520以存儲指令的地址轉(zhuǎn)換條目。
[0042]核心501還包括耦合至提取單元520以對所提取的元素進行解碼的解碼模塊525。在一個實施例中,提取邏輯包括分別和線程槽501a、501b關(guān)聯(lián)的獨立定序器。通常,核心501關(guān)聯(lián)于第一 ISA,該第一 ISA限定/指定可以在處理器500上執(zhí)行的指令。是第一 ISA一部分的機器代碼指令常常包括指令的一部分(稱為操作碼),其引用/指定將要執(zhí)行的指令或操作。如由第一 ISA所定義的,解碼邏輯