發(fā)明領域
本發(fā)明總體上涉及處理器設計,并具體地涉及用于運行時代碼并行化的方法和系統(tǒng)。
發(fā)明背景
已經(jīng)提出了用于在運行時動態(tài)地并行化軟件代碼的各種技術。例如,akkary和driscoll在1998年12月的第31屆微體系結(jié)構(gòu)年度國際研討會的論文集“adynamicmultithreadingprocessor”中描述了實現(xiàn)單個程序的動態(tài)多線程執(zhí)行的處理器架構(gòu),該文章通過引用并入本文。
marcuellu等人在1998年的第12屆國際超級計算會議的論文集“speculativemultithreadedprocessors”中描述了一種處理器微架構(gòu),該微架構(gòu)通過不需要編譯器或用戶支持的控制推測技術來同時執(zhí)行從單個程序獲得的多個控制線程,該文章通過引用并入本文。
marcuello和gonzales在1999年的13屆國際超級計算會議的論文集“clusteredspeculativemultithreadedprocessors”中提出了在運行時從單線程應用中產(chǎn)生推測性線程的微架構(gòu),該文章通過引用并入本文。
在2000年的第14屆并行與分布式處理國際研討會的論文集“aquantitativeassessmentofthread-levelspeculationtechniques”(其通過引用并入本文)中,marcuello和gonzales分析了不同線程推測技術的益處以及線程單元中的值預測、分支預測、線程初始化開銷和連接的影響。
ortiz-arroyo和lee在2003年的第16屆并行與分布式計算系統(tǒng)的國際會議(pdcs'03)的論文集“dynamicsimultaneousmultithreadedarchitecture”中描述了被稱為動態(tài)同時多線程(dsmt)的多線程架構(gòu),該多線程架構(gòu)在同時多線程處理器核上執(zhí)行來自單個程序的多個線程,該文章通過引用并入本文。
美國專利申請公開2014/0282601(其公開內(nèi)容通過引用并入本文)描述了用于通過塊組織的源視圖數(shù)據(jù)結(jié)構(gòu)的依賴性廣播的方法。該方法包括使用全局前端來接收輸入指令序列,并將指令分組以形成指令塊。多個寄存器模板被用于通過用對應于指令塊的塊號填充寄存器模板來跟蹤指令目的地和指令源,其中,對應于指令塊的塊號指示指令塊之間的相互依賴關系。填充塊組織的源視圖數(shù)據(jù)結(jié)構(gòu),其中,源視圖數(shù)據(jù)結(jié)構(gòu)存儲如由多個寄存器模板所記錄的與指令塊相對應的源。在分派指令塊的一個塊時,屬于一個塊的數(shù)字被廣播到源視圖數(shù)據(jù)結(jié)構(gòu)中的與該塊相關的列,并相應地標記該列。根據(jù)廣播來更新剩余指令塊的依賴性信息。
發(fā)明概述
本文描述的本發(fā)明的實施例提供了一種方法,其包括在執(zhí)行程序代碼的指令的處理器中,識別包含至少部分重復的一個或更多個指令段的代碼區(qū)域。監(jiān)控該區(qū)域中的指令,并為該區(qū)域構(gòu)建所監(jiān)控的指令的寄存器訪問的近似規(guī)范。使用該規(guī)范來將對區(qū)域中的段的執(zhí)行并行化。
在一些實施例中,識別區(qū)域包括選擇在代碼中具有公共起始點和公共結(jié)束點中的至少一個的多個段,并且構(gòu)建近似規(guī)范包括構(gòu)建相同的規(guī)范,以指定多個選定段中的寄存器訪問。在實施例中,識別區(qū)域包括識別程序循環(huán)或函數(shù)。
在公開的實施例中,近似規(guī)范與由段中的指令遍歷的流控制軌跡相關聯(lián)。在另一個實施例中,近似規(guī)范與由段中的指令遍歷的多個替代流控制軌跡相關聯(lián)。
在示例實施例中,構(gòu)建近似規(guī)范包括在規(guī)范中指示由指令訪問的寄存器的標識,但不指示對寄存器的最后寫入操作的位置。在另一個實施例中,構(gòu)建近似規(guī)范包括:對于一個或更多個第一寄存器,指定對第一寄存器的相應最后寫入操作在代碼中的位置;以及對于一個或更多個第二寄存器,指定第二寄存器是否被寫入,而不是對第二寄存器的最后寫入操作的位置。在實施例中,第一寄存器包括被寫入多達預定義的次數(shù)的寄存器,并且第二寄存器包括被寫入多于預定義的次數(shù)的寄存器。
在又一個實施例中,構(gòu)建近似規(guī)范包括基于嵌入在程序代碼中的指示來選擇至少第一寄存器和至少第二寄存器,對于至少第一寄存器,規(guī)范將是近似的,對于至少第二寄存器,規(guī)范將是精確的。在又一個實施例中,構(gòu)建近似規(guī)范包括將被監(jiān)控的段劃分為節(jié)段,并且對于每個節(jié)段,指定在該節(jié)段中被寫入并且未在隨后的節(jié)段中寫入的寄存器。在實施例中,構(gòu)建近似規(guī)范包括將被監(jiān)控的段劃分為節(jié)段,并且使用兩個或更多個硬件線程來監(jiān)控該節(jié)段。
在一些實施例中,構(gòu)建近似規(guī)范包括在規(guī)范中對于每個寄存器指定對寄存器的最后寫入操作在代碼中的近似位置,該近似位置不早于最后寫入操作的精確位置。指定所述近似位置可以包括指定對寄存器的寫入命令的近似數(shù)量,該近似數(shù)量不小于對寄存器的寫入命令的精確數(shù)量。另外地或可替代地,指定近似位置可以包括基于在對指令的監(jiān)控期間誤預測的分支之后的一個或更多個指令來確定近似位置。
在公開的實施例中,構(gòu)建近似規(guī)范包括收集寄存器訪問,而不管區(qū)域中的段之間可能的重疊。在另一個實施例中,構(gòu)建近似規(guī)范包括將寄存器訪問與一個或更多個先前收集的規(guī)范進行合并。
在一些實施例中,構(gòu)建近似規(guī)范包括將在兩個或更多個段中收集的寄存器訪問信息進行合并。在示例實施例中,合并寄存器訪問信息包括對來自兩個或更多個段的寫入操作的相應的計數(shù)進行求和或者取其最大值。另外地或可替代地,合并寄存器訪問信息可以包括合并來自兩個或更多個段的寄存器的相應的分類。
在實施例中,該方法包括對近似規(guī)范進行校正以補償在所監(jiān)控的指令中發(fā)生的分支誤預測。在另一實施例中,構(gòu)建近似規(guī)范包括基于以下項中的至少一個來收集寄存器訪問:處理器的執(zhí)行流水線中被解碼的指令;在執(zhí)行流水線中執(zhí)行的指令;以及在執(zhí)行流水線中提交的指令。在又一個實施例中,監(jiān)控指令包括基于以下項中的至少一個來生成所監(jiān)控的指令的至少一個流控制軌跡:在處理器的執(zhí)行流水線中從存儲器提取的指令;在執(zhí)行流水線中被解碼的指令;以及在執(zhí)行流水線中執(zhí)行的指令,或者基于在執(zhí)行流水線中提交的指令。
根據(jù)本發(fā)明的實施例,另外提供了包括執(zhí)行流水線和監(jiān)控單元的處理器。執(zhí)行流水線被配置為執(zhí)行程序代碼的指令。監(jiān)控單元被配置為識別包含至少部分重復的一個或更多個指令段的代碼區(qū)域,監(jiān)控該區(qū)域中的指令并且為該區(qū)域構(gòu)建由所監(jiān)控的指令的寄存器訪問的近似規(guī)范,并使用規(guī)范來并行化對區(qū)域中的段的執(zhí)行。
根據(jù)結(jié)合附圖進行的本發(fā)明的實施例的以下詳細描述,本發(fā)明將得到更完全地理解,其中:
附圖簡述
圖1是根據(jù)本發(fā)明的實施例示意性地示出了執(zhí)行運行時代碼并行化的處理器的框圖;
圖2a-2c是根據(jù)本發(fā)明的實施例示意性地示出包含至少部分重復的段的代碼區(qū)域的圖;以及
圖3是根據(jù)本發(fā)明的實施例示意性地示出用于使用不精確的指令監(jiān)控來進行運行時代碼并行化的方法的流程圖。
實施例的詳細描述
綜述
本文描述的本發(fā)明的實施例提供了用于在處理器中對代碼的運行時并行化的改進的方法和設備。在所公開的實施例中,處理器識別包含至少部分重復的一個或更多個指令段的代碼區(qū)域。處理器使用“記分板”(由該區(qū)域中的指令對寄存器的訪問的規(guī)范)來對所識別的區(qū)域的執(zhí)行進行并行化。例如,處理器可以調(diào)用多個硬件線程來執(zhí)行相應的段,并且決定如何以及何時基于記分板并行化線程。
在一些實施例中,處理器在記分板中指定近似而不是精確的寄存器訪問信息。在各種實施例中,對于至少一個寄存器,在可以省略一些寄存器訪問信息的意義上,規(guī)范是近似的。另外地或可替代地,在以降低的精度或分辨率指定寄存器訪問信息的意義上,規(guī)范可以是近似的。此外,另外地或可替代地,在單個規(guī)范與多個不同流控制軌跡相關聯(lián)的意義上,規(guī)范可以是近似的。這里描述了用于在性能很少或沒有退化的情況下近似表示寄存器訪問信息的各種技術。
例如,寄存器訪問信息通常指示哪些寄存器被寫入,并且可能指示對寄存器的最后寫入操作在代碼中的位置。在一些實施例中,通過僅針對寄存器的子集指定最后寫入指示或者根本不指定最后寫入指示來對寄存器訪問信息進行近似。在其他實施例中,寄存器訪問信息不一定指定最后寫入操作發(fā)生的精確指令,而是以比單個指令更粗的粒度指定最后寫入的位置。
例如,處理器可以將給定的段劃分為節(jié)段,并指定在給定節(jié)段中被寫入而沒有在隨后的節(jié)段中被寫入的寄存器。作為另一示例,最后寫入指示可能指示晚于最后寫入操作的真正位置的代碼位置。例如,處理器可以確定最后寫入指示,而不管可能的分支誤預測事件,即至少部分地基于隨后將被清除的指令,因為它們在誤預測的分支之后。
在其他示例實施例中,處理器通過為具有不同流控制軌跡的段生成單個記分板或者通過將當前收集的寄存器訪問信息與一個或更多個先前構(gòu)建的記分板合并來近似記分板。
在下文中描述了記分板近似技術的其他示例。所公開的技術容許流控制變化,簡化記分板構(gòu)建過程,并且減少存儲記分板所需的存儲器空間,其并行化性能只有很小的和可容忍的退化。
系統(tǒng)描述
圖1是根據(jù)本發(fā)明的實施例示意性地示出處理器20的框圖。處理器20運行預編譯的軟件代碼,同時并行化代碼執(zhí)行。處理器在運行時通過在程序指令從存儲器中被提取并被處理的時候?qū)ζ溥M行分析來執(zhí)行并行化決策。
在本示例中,處理器20包括執(zhí)行流水線,該執(zhí)行流水線包括一個或更多個提取單元24、一個或更多個解碼單元28、亂序(ooo)緩沖器32和執(zhí)行單元36。提取單元24從多級指令高速緩存存儲器中提取程序指令,該高速緩存存儲器在本示例中包括1級(l1)指令高速緩存40和2級(l2)指令高速緩存44。
分支預測單元48預測在執(zhí)行期間預期由程序遍歷的流控制軌跡(在本文中為了簡短起見而被稱為“軌跡”)。預測通常基于由提取單元24提取的先前指令的地址或程序計數(shù)器(pc)值。基于預測,分支預測單元48指示提取單元24將提取哪些新指令。
在一些實施例中,由解碼單元28解碼的指令存儲在ooo緩沖器32中,以用于通過執(zhí)行單元36進行亂序執(zhí)行,即不是按照指令被編譯和存儲在存儲器中的順序??商娲兀彌_指令可以按順序執(zhí)行。隨后發(fā)出緩沖指令,以供各種執(zhí)行單元36執(zhí)行。在本示例中,執(zhí)行單元36包括一個或更多個乘法累加(mac)單元、一個或更多個算術邏輯單元(alu)、一個或更多個加載/存儲單元和分支執(zhí)行單元(bra)。另外地或可替代地,執(zhí)行單元36可以包括其他合適類型的執(zhí)行單元,例如浮點單元(fpu)。
由執(zhí)行單元36產(chǎn)生的結(jié)果被存儲在寄存器文件和/或多級數(shù)據(jù)高速緩存存儲器中,其在本示例中包括1級(l1)數(shù)據(jù)高速緩存52和2級(l2)數(shù)據(jù)高速緩存56。在一些實施例中,l2數(shù)據(jù)高速緩存存儲器56和l2指令高速緩存存儲器44被實現(xiàn)為相同物理存儲器中獨立的存儲器區(qū)域或者在沒有固定預分配的情況下簡單地共享相同的存儲器。
在一些實施例中,處理器20還包括負責運行時代碼并行化的線程監(jiān)控和執(zhí)行單元60。下面詳細說明單元60的功能。監(jiān)控和執(zhí)行單元60在本文中也稱為“監(jiān)控單元”或“監(jiān)控電路”。在一些實施例中,單元60在硬件中被實現(xiàn)為處理器20中的獨立單元或分布在各種硬件線程中。
在其他實施例中,可以使用運行時軟件來執(zhí)行單元60的一些或全部功能。這種運行時軟件通常與由處理器20的執(zhí)行流水線執(zhí)行的軟件代碼分開,并且可以例如在單獨的處理核上運行。
圖1中所示的處理器20的配置是示例配置,其純粹為了概念清楚起見而被選擇。在替代的實施例中,可使用任何其他合適的處理器配置。例如,在圖1的配置中,使用多個提取單元24和多個解碼單元28來實現(xiàn)多線程。每個硬件線程可以包括被分配以提取用于線程的指令的提取單元以及被分配以對所提取的指令進行解碼的解碼單元。另外或可替代地,多線程可以以許多其他方式實現(xiàn),例如使用每線程的多個ooo緩沖器、單獨的執(zhí)行單元和/或每線程的單獨的寄存器文件。在另一個實施例中,不同的線程可以包括不同的相應處理核心。
作為又一個示例,處理器可以在沒有高速緩存或有不同的高速緩存結(jié)構(gòu)、在沒有分支預測或者每線程有單獨的分支預測的情況下實現(xiàn)。處理器可以包括附加元件,例如,僅舉幾個示例,重排序緩沖器(rob)、寄存器重命名。此外,可替代地,所公開的技術可以用具有任何其它合適的微架構(gòu)的處理器執(zhí)行。
處理器20可以使用任何合適的硬件例如使用一個或更多個專用集成電路(asic)、現(xiàn)場可編程門陣列(fpga)或其他設備類型來實現(xiàn)。另外或可替代地,可使用軟件或使用硬件和軟件元件的組合來實現(xiàn)處理器20的某些元件??梢允褂弥T如隨機存取存儲器(ram)的任何合適類型的存儲器來實現(xiàn)指令和數(shù)據(jù)的高速緩存存儲器。
處理器20可以用軟件編程以執(zhí)行本文描述的功能。該軟件可通過網(wǎng)絡以電子形式下載到處理器,例如,或者可替代地或另外,軟件可以被提供和/或儲存在非暫時性有形介質(zhì)(諸如,磁存儲器、光存儲器或電子存儲器)上。
基于段監(jiān)控的運行時代碼并行化
在一些實施例中,處理器20中的單元60識別包含至少部分重復的一個或更多個代碼段的代碼區(qū)域,并且使對這些代碼段的執(zhí)行并行化。在本專利申請的上下文中和權(quán)利要求書中,術語“并行化”是指全并行化和部分并行化兩者,即任何不是純順序的執(zhí)行方案。
在本專利申請的上下文中以及在權(quán)利要求書中,術語“至少部分重復的段”在廣義上被使用,并且是指其中各個段具有一些共同性但并不一定都執(zhí)行完全相同的指令序列的各種可能的情況。以下在圖2a-2c中描述這種段的幾個示例。
例如,考慮包括程序循環(huán)的相應迭代的段或函數(shù)或過程的相應執(zhí)行的段。如果循環(huán)或函數(shù)不包含條件分支指令,則段通常是重復的,遵循相同的控制流軌跡并執(zhí)行相同的指令序列。
通常,即使段僅是部分重復的,單元60也并行化段的執(zhí)行。部分重復的段通常具有一些共同性,但不一定遵循完全相同的控制流軌跡。例如,部分重復的段可以在相同的指令處開始和/或在相同的指令處結(jié)束,但是在其他方面可以遵循不同的軌跡。這種類型的示例包括在不同指令下進入或退出循環(huán)或函數(shù)的段,或在循環(huán)或函數(shù)中采用不同分支的段。
作為又一個示例,除了整體上將對序列的執(zhí)行并行化外,單元60還可以將重復(或部分重復的)指令序列劃分為兩個或更多個連續(xù)的段。這種段的集合也被認為是一組部分重復的段。這樣情況的示例以下在圖2c中被示出。
另外,可替代地,單元60可以識別并且并行化包括任何其它合適的一組部分重復段的任何其它合適的代碼區(qū)域的執(zhí)行。通常,數(shù)據(jù)值(例如,寄存器值)和/或流控制軌跡可能會在一個段執(zhí)行和另一個段執(zhí)行之間不同。
在所公開的實施例中,處理器20通過并行或半并行地調(diào)用多個硬件線程來并行化段的執(zhí)行。每個線程執(zhí)行相應的代碼段,例如循環(huán)的相應迭代、多個(不一定是連續(xù)的)循環(huán)迭代、循環(huán)迭代的一部分、循環(huán)的延續(xù)、函數(shù)或其部分或延續(xù)或者任何其它合適類型的段。
在圖1的示例中,盡管不是必然的,但每個線程包括已由單元60分配以執(zhí)行一個或更多個段的相應提取單元24和相應解碼單元28。在另一個示例實施例中,在兩個或更多個線程之間共享給定的提取單元24。
實際上,數(shù)據(jù)依賴性存在于段之間。例如,在某個循環(huán)迭代中執(zhí)行的計算可以取決于在先前迭代中執(zhí)行的計算的結(jié)果。并行化段的能力在很大程度上取決于這種數(shù)據(jù)依賴性。
在一些實施例中,單元60通過監(jiān)控處理器流水線中的指令來決定如何并行化代碼。響應于識別包括至少部分重復的段的代碼區(qū)域,單元60在指令被處理器提取、解碼和執(zhí)行時開始監(jiān)控指令。
圖2a-2c是根據(jù)本發(fā)明的實施例示意性地示出包含遵循一個或更多個控制流軌跡78的至少部分重復的段74的代碼區(qū)域70的圖。這些示例演示了可以使用單個近似記分板來表示和并行化的幾種可能類型的代碼區(qū)域。
在圖2a中,代碼區(qū)域70包含循環(huán),其具有遵循單個內(nèi)部流控制軌跡78的單一類型的段74。因此,各種循環(huán)迭代對應于完全重復的并且遵循相同軌跡的多個段。
在圖2b中,代碼區(qū)域70包含具有內(nèi)部條件分支的循環(huán)。如在前面的示例中,每個循環(huán)迭代對應于相應的段74。然而,在本示例中,根據(jù)在每個段中采取的實際分支決策,不同的段可以遵循不同的流控制軌跡78a、78b。在這個示例中,段只是部分重復的。
在圖2c中,單元60將代碼區(qū)域70中的循環(huán)劃分成多個連續(xù)的段類型74a-74c。除了并行化不同循環(huán)迭代的執(zhí)行之外,單元60還可以調(diào)用不同的線程來執(zhí)行相同循環(huán)迭代內(nèi)的不同類型的段。
在圖2c的示例中,整個循環(huán)遵循單個軌跡78,但不同的段類型遵循該軌跡的不同部分。換句話說,各種循環(huán)迭代的段74a是重復的,如同各種循環(huán)迭代的段74b和各種循環(huán)迭代的段74c一樣。然而,不同的段類型遵循不同的軌跡。這種情況也被認為是一組部分重復的段。
另一個示例情況可以組合圖2b和圖2c的情況。在這種情況下,段74a、74b和/或74c可以包含一個或更多個條件分支指令。因此,給定類型的段可以在各種循環(huán)迭代中遍歷不同的流控制軌跡。換句話說,段74a、74b和/或74c可以是部分重復的。
在圖2c的示例中,段74a、74b和74c不重疊。然而,在替代實施例中,段74a、74b和/或74c可共享一個或更多個重疊指令。以下更詳細地論述該情況。
僅僅通過示例的方式描繪了以上圖2a-2c的情況。在替代實施例中,單元60可以監(jiān)控包括至少部分重復的段的任何其他合適類型的代碼區(qū)域中的指令。在一些實施例中,單元60分別監(jiān)控各個段,并組合監(jiān)控結(jié)果以產(chǎn)生整個代碼區(qū)域(例如,整個循環(huán))的記分板。
在一些實施方式中,單元60的功能可以分布在多個硬件線程之間,使得給定線程可以被視為在執(zhí)行期間監(jiān)控其指令。如上所述,監(jiān)控單元在本文中也稱為“監(jiān)控電路”。然而,為了清楚起見,下面的描述假設監(jiān)控功能由單元60執(zhí)行。
如上所述,作為監(jiān)控過程的一部分,單元60生成稱為記分板的監(jiān)控表。記分板通常包括寄存器的一些分類。此外,對于至少一些寄存器,記分板可指示對寄存器的最后寫入操作在代碼中的位置。
可以使用任何合適的指示來指示最后寫入操作的位置,例如對寄存器的寫入操作次數(shù)的計數(shù)或最后寫入操作的地址。最后寫入指示使單元60能夠確定例如何時允許它執(zhí)行依賴于寄存器的值的隨后段中的指令。
在一些實施例中,作為監(jiān)控過程的一部分,單元60還生成由所識別的代碼區(qū)域的段中的指令遍歷的流控制軌跡(或軌跡)??稍诿绹鴮@暾?4/578,516、14/578,518和14/583,119中找到記分板生成的其他方面,它們被轉(zhuǎn)讓給本專利申請的受讓人且其公開內(nèi)容通過引用并入本文。
部分重復的代碼段的近似規(guī)范
在一些實施例中,單元60為所識別的代碼區(qū)域生成近似而不精確的記分板。該規(guī)范的近似提供了對代碼區(qū)域中的流控制變化的容限,降低了生成記分板的計算復雜度,和/或減少了存儲記分板所需的存儲器空間。當存儲和使用多個記分板以用于并行化多個代碼區(qū)域時,近似特別有利。
下面的描述提出了用于生成近似記分板的幾種示例技術。僅僅是通過示例的方式來描繪這些技術。在替代實施例中,單元60可以以任何其它合適的方式生成任何其它合適的寄存器訪問信息。
在一些實施例中,單元60在記分板中針對至少一個寄存器僅僅指示寄存器是否被寫入,而不指定對寄存器的最后寫入操作的位置。例如,單元60可以指定對寄存器子集的最后寫入操作的位置。對于剩余的寄存器,單元60可以僅指示每個寄存器是否被寫入。
在示例實施例中,單元60對每個寄存器的寫入操作的次數(shù)進行計數(shù)。如果對給定寄存器的寫入操作次數(shù)不超過預定義的閾值,則單元60將該數(shù)記錄在記分板中(或者記錄對寄存器的最后寫入操作的位置的一些其它指示)。如果對給定寄存器的寫入操作次數(shù)超過預定義的閾值,則單元60僅指示寄存器被寫入,而不指定最后寫入操作的位置。在實施例中,單元60確保寫入操作的近似次數(shù)高于實際寫入次數(shù)。
在其他實施例中,單元60以比單個指令更粗的某個粗粒度來指定對寄存器的最后寫入的位置,而不是指定最后寫入操作發(fā)生的精確指令。在示例實施例中,單元60將給定的段劃分成兩個或更多個節(jié)段。對于每個節(jié)段,單元60可以指定在該節(jié)段中而不是在隨后的節(jié)段中寫入哪些寄存器。換句話說,對于至少給定寄存器,單元60可以指定其中寄存器被寫入的最后的節(jié)段。
在其他實施例中,記分板中的最后寫入指示中的一個或更多個指示可能晚于最后寫入操作的實際位置的代碼位置。例如,單元60可以基于可能遵循誤預測分支的指令來確定最后寫入操作的位置。在這種情況下,可以稍后刷新并且不執(zhí)行記分板中指示的最后寫入操作,因此真正的最后寫入操作是某個較早的指令。
在替代實施例中,單元60構(gòu)建記分板,同時僅考慮將被執(zhí)行而不被清除的指令。例如,在執(zhí)行后提交指令之后,單元60可以監(jiān)控指令。作為另一示例,單元60可以識別誤預測事件,并且校正記分板中的寄存器訪問信息以補償誤預測。在上面引用的美國專利申請14/583,119中描述了示例校正技術。
在一些實施例中,單元60可以通過從部分重疊的段收集寄存器訪問信息來構(gòu)建記分板。由于重疊,一些寄存器訪問信息可能是重復的,并因此是近似的。例如,當對給定寄存器的寫入操作次數(shù)進行計數(shù)時,如果在兩個監(jiān)控段之間的重疊中發(fā)生對寄存器的寫入命令,則該指令將被計數(shù)兩次。
在實施例中,單元60將對寄存器的寫入操作的精確次數(shù)進行計數(shù),但在記分板中記錄更大的數(shù)。該特性提供了一些防止流控制變化和誤預測的保護。
在一些實施例中,單元60通過為具有不同流控制軌跡的段生成單個記分板來近似記分板。例如,在上面的圖2b的情況中,單元60可以為遵循軌跡78a的段和遵循軌跡78b的段兩者生成單個近似的記分板。在實施例中,單元60可以針對所有監(jiān)控的軌跡生成單個記分板。在這些實施例中,記分板在其允許控制流軌跡中的某些變化而不是對應于單個軌跡的意義上是近似的。
在一些實施例中(例如,在圖2c的示例中),單元60可以通過添加各個段的寄存器訪問信息(例如,寫入次數(shù))來產(chǎn)生單個記分板。在其他實施例中(例如,在圖2b的示例中),單元60可以通過采用各個段的寄存器訪問信息的并集(例如,采用最大的寫入次數(shù))來產(chǎn)生單個記分板。
在這些實施例的一些實施例中,單元60將相同的近似記分板與兩個或更多個不同的軌跡相關聯(lián)。在替代實施例中,單元60生成包括多于一個分支選項的松弛軌跡(relaxedtrace),并且使松弛軌跡與近似記分板相關聯(lián)。在一些實施例中,單元60可將當前收集的寄存器訪問信息與一個或更多個先前構(gòu)建的記分板合并。
當將所監(jiān)控的段分成多個節(jié)段并分別監(jiān)控每個節(jié)段(例如,在圖2c中)時,可以使用兩個或更多個硬件線程來監(jiān)控各個節(jié)段。
在某些情況下,給定寄存器的分類可能在代碼區(qū)域中的一個所監(jiān)控的段和另一個所監(jiān)控的段之間不同。單元60可以使用各種規(guī)則或邏輯來決定如何在為代碼區(qū)域生成的復合記分板中對這樣的寄存器進行分類。在圖2b的情況中,例如,如果給定寄存器在一個段中被分類為全局(g),并且在另一個段中被分類為全局-局部(gl),則單元60通常將在組合記分板中將該寄存器分類為gl。作為另一個示例,在圖2c的情況下,如果在一個段中完全沒有使用給定的寄存器并在另一個段中將其分類為某個類別,則單元60通常將在組合記分板中使用同一類別來對寄存器進行分類。
在各種實施例中,單元60可以基于執(zhí)行流水線的任何合適的級的輸出來收集寄存器訪問信息,并且基于執(zhí)行流水線的任何合適的級的輸出來生成對應的軌跡或多個軌跡。軌跡生成和寄存器訪問信息的收集不需要在相同的流水線級處執(zhí)行。一般來說,在流水線中較早地監(jiān)控指令有助于更快速且更有效地調(diào)用并行執(zhí)行,但另一方面更多地受到誤預測的影響。在流水線中稍晚監(jiān)控指令導致較慢的并行化,但另一方面對誤預測較不敏感。
在一些實施例中,單元60在解碼單元28的輸出端處(即從被解碼的指令)收集寄存器訪問信息(例如,寄存器的分類和對寄存器的最后寫入操作的位置)。在另一個實施例中,單元60基于在執(zhí)行單元36中被執(zhí)行的指令,但在最終提交指令和結(jié)果之前,收集寄存器訪問信息。在替代實施例中,單元60僅基于所提交的指令來收集寄存器訪問信息,即不考慮由于誤預測而被清除的指令。
在一些實施例中,單元60根據(jù)被提取的分支指令,即基于提取單元24或分支預測單元48的輸出端處的分支指令,來生成軌跡或多個軌跡。在替代實施例中,單元60根據(jù)被解碼的分支指令,即基于解碼單元28的輸出端處的分支指令,來生成軌跡。在其他實施例中,單元60在通過分支執(zhí)行(bra)單元評估條件分支指令的條件之后(即,在其中分支指令不再是有條件的級處)生成軌跡或多個軌跡。另外,可替代地,單元60可以基于所提交的分支指令來生成軌跡或多個軌跡。
在一些實施例中,程序代碼指示記分板中關于其的寄存器訪問信息被允許為近似的至少一個寄存器,以及關于其的寄存器訪問信息應該是精確的至少一個寄存器。單元60可以基于這些指示來選擇在記分板中要精確地指定哪些寄存器以及近似地指定哪些寄存器。
此外,另外地或可替代地,單元60可以基于任何其它合適的流水線級來生成流控制軌跡和/或收集寄存器訪問信息。
圖3是根據(jù)本發(fā)明的實施例示意性地示出用于使用不精確的指令監(jiān)控進行運行時代碼并行化的方法的流程圖。該方法開始于單元60在區(qū)域識別步驟80處在運行時識別包含至少部分重復的代碼段的程序代碼區(qū)域。
在監(jiān)控步驟84,單元60監(jiān)控所識別的區(qū)域中的指令。基于所監(jiān)控的指令,單元60在記分板構(gòu)建步驟88處構(gòu)建近似記分板,該近似記分板近似該區(qū)域中的段的寄存器訪問信息。在并行化步驟92,單元60使用近似記分板來并行化該區(qū)域中的段的執(zhí)行。
將認識到,以上描述的實施例是通過示例的方式引用的,并且本發(fā)明不限于上文中已經(jīng)特別示出和描述的內(nèi)容。相反,本發(fā)明的范圍包括上文所描述的各種特征的組合及子組合以及本發(fā)明的變型和修改,所述變型和修改將在本領域的技術人員閱讀上述描述之后想到的且在現(xiàn)有技術中未被公開。通過引用并入本專利申請中的文檔被視為本申請的組成部分,除了任何術語在這些并入的文檔中在某種程度上以與本說明書中明確地或隱含地作出的定義沖突的方式被定義之外,應該僅考慮本說明書中的定義。