塊分派的一個具體實施例。然而,應(yīng)該注意,可替代地,可以實現(xiàn)使用優(yōu)先編碼器的實施例。
[0080]圖8更詳細(xì)地示出選擇器陣列加法器樹的示例性邏輯。在圖8的實施例中,示出用于范圍超過位(range exceed bit)的邏輯。范圍超過位確保不多于四個塊將被選擇用于分派,如果第五個塊就緒而前四個也就緒,范圍超過位將不允許第五個塊被分派。應(yīng)該注意,和數(shù)位為SO到S3,均用來使能分派端口以及傳播到串行實現(xiàn)中的下一加法器級。
[0081]圖9示出根據(jù)本發(fā)明一個實施例的、用于實現(xiàn)選擇器陣列的加法器樹的并行實現(xiàn)方案。并行實現(xiàn)方案不將總和從每個加法器轉(zhuǎn)發(fā)到下一個。在并行實現(xiàn)方案中,每個加法器使用多輸入加法實現(xiàn)方案(諸如多輸入進位保留加法器樹)來直接使用所有其必需的輸入。例如,加法器“X”對所有先前的輸入求和。為了執(zhí)行更快計算次數(shù)(例如單個循環(huán)),該并行實現(xiàn)方法是理想的。
[0082]圖10示出根據(jù)本發(fā)明一個實施例的、闡明通過使用進位保留加法器可如何實現(xiàn)來自圖9的加法器X的示例性示意圖。圖10示出可以在單個循環(huán)中對32個輸入求和的結(jié)構(gòu)。該結(jié)構(gòu)使用4:2進位保留加法器組合而成。
[0083]圖11示出根據(jù)本發(fā)明的用于針對從提交指針開始調(diào)度和使用選擇器陣列加法器掩蔽就緒位的掩蔽實施例。在該實現(xiàn)方案中,選擇器陣列加法器嘗試選擇前四個就緒塊,以從提交指針開始潛在地圍繞分配指針分派。在該實現(xiàn)方案中,使用多輸入并行加法器。此夕卜,在該實現(xiàn)方案中利用這些循環(huán)緩沖器的源。
[0084]圖11示出如何采用兩個掩碼(單獨地或分開地)將就緒位求與(AND)在一起以及如何將其應(yīng)用到兩個并行的加法器樹。通過使用兩個加法器樹并比較四個的閾值來選擇前四個?!癤”標(biāo)記表示“針對該加法器樹從選擇陣列中排除”,因此“X”值為O。另一方面,“Y”標(biāo)記表示“針對該加法器樹確實包括在選擇器陣列中”,因此“Y”值為I。
[0085]圖12示出根據(jù)本發(fā)明一個實施例的、寄存器模板如何填充寄存器圖條目的概略圖。
[0086]如上所述,通過寄存器模板填充寄存器圖條目。寄存器圖按序針對每個塊存儲寄存器模板的快照。當(dāng)推測無效時(例如分支誤預(yù)測),寄存器圖具有無效推測點之前的最新有效快照。機器可以通過讀取該寄存器圖條目并將其加載在寄存器模板的底部來將其狀態(tài)退回到最后的有效快照。寄存器的每個條目顯示所有的寄存器繼承狀態(tài)。例如在圖12的實施例中,如果用于塊F的寄存器圖無效,則機器狀態(tài)可被退回到較早的最后有效的寄存器模板快照。
[0087]圖13示出根據(jù)本發(fā)明一個實施例的、用于減少的寄存器圖印記的第一實施例??赏ㄟ^僅存儲那些包含分支指令的寄存器圖模板快照來減少存儲寄存器圖條目所需要的存儲器的數(shù)量。當(dāng)發(fā)生例外時(例如推測無效、分支誤預(yù)測等),可從分支指令中重建在例外之前發(fā)生的最后的有效快照。在從在例外之前直到例外的分支取回指令以建造最后的有效快照。指令被取回但未被執(zhí)行。如圖13中所示,僅那些包括分支指令的快照被保存在減少的寄存器圖中。這大大減少了存儲寄存器模板快照所需要的存儲器的數(shù)量。
[0088]圖14示出根據(jù)本發(fā)明一個實施例的、用于減少的寄存器印記的第二實施例。可以通過僅存儲快照的順序子集(例如每四個快照一個)來減少存儲寄存器圖條目所需要的存儲器的數(shù)量??梢允褂帽韧暾B續(xù)快照相對較小的存儲器數(shù)量將連續(xù)快照之間改變存儲為從原始快照的“delta”。當(dāng)發(fā)生例外時(例如推測無效、分支誤預(yù)測等),可從在例外之前發(fā)生的原始快照中重建最后的有效快照。使用從在例外之前發(fā)生的原始快照的“delta”和連續(xù)快照來重建最后的有效快照。初始原始狀態(tài)可以累積delta以到達(dá)所要求的快照的狀
??τ O
[0089]圖15示出根據(jù)本發(fā)明一個實施例的、快照之間的delta的示例性格式。圖15示出原始快照和兩個delta。在一個delta中,僅R5和R6是被B3所更新的寄存器。其余的條目不變。在另一個delta中,僅Rl和R7是被B2所更新的寄存器。其余的條目不變。
[0090]圖16示出根據(jù)本發(fā)明一個實施例的、用于根據(jù)指令的塊的分配創(chuàng)建寄存器模板快照的過程的示意圖。在該實施例中,圖16的左側(cè)示出兩個解復(fù)用器,并且圖16的上部是快照寄存器模板。圖16示出用于從先前寄存器模板創(chuàng)建后續(xù)寄存器模板(例如串行實現(xiàn)方案)的示意圖。
[0091]該串行實現(xiàn)方案示出如何基于指令的塊的分配創(chuàng)建寄存器模板快照。那些快照用來捕獲最新的寄存器體系架構(gòu)狀態(tài)更新,其用于依賴關(guān)系跟蹤(例如,如圖1到4中所描述的)以及更新寄存器圖用于處理誤預(yù)測/例外(例如,如圖12到15中所描述的)。
[0092]解復(fù)用通過選擇哪個傳入源通過來工作。例如,寄存器R2將在第二輸出處解復(fù)用到1,而R8將在第七輸出處解復(fù)用為I等等。
[0093]圖17示出根據(jù)本發(fā)明一個實施例的、用于根據(jù)指令的塊的分配創(chuàng)建寄存器模板快照的過程的另一示意圖。圖17的實施例還示出從先前寄存器模板創(chuàng)建后續(xù)寄存器模板。圖17的實施例還示出寄存器模板塊繼承的示例。該圖示出如何從分配的塊編號更新寄存器模板。例如,塊Bf更新R2、R8和R1。Bg更新Rl和R9。虛線箭頭指示從前一個快照繼承值。該過程一直繼續(xù)到塊B1.。這樣,例如,因為沒有快照更新寄存器R7,所以它的原始值Bb將一直傳播下去。
[0094]圖18示出根據(jù)本發(fā)明一個實施例的、用于實現(xiàn)從先前寄存器模板創(chuàng)建后續(xù)寄存器模板的串行實現(xiàn)方案的硬件的概略圖。解復(fù)用器用來控制兩個輸入多路復(fù)用器系列兩個塊編號中的哪個將被傳播到下一級。其可以是來自先前級的塊編號或者是當(dāng)前塊編號。
[0095]圖19示出根據(jù)本發(fā)明一個實施例的、用于實現(xiàn)從先前寄存器模板創(chuàng)建后續(xù)寄存器模板的并行實現(xiàn)方案的硬件的概略圖。該并行實現(xiàn)方案使用特別編碼的多路復(fù)用器控制以從先前寄存器模板創(chuàng)建后續(xù)寄存器模板。
[0096]圖20示出根據(jù)本發(fā)明一個實施例的、用于指令基于塊的執(zhí)行的硬件以及其如何與源圖、指令圖、寄存器模板以及寄存器圖工作的概略圖。
[0097]在該實現(xiàn)方案中,分派器中的分配器調(diào)度器接收由機器的前端所取回的指令。這些指令以我們較早描述的方式穿過塊隊形。如較早所描述的,塊產(chǎn)生寄存器模板并且這些寄存器模板用來填充寄存器圖。源被從源圖傳遞到寄存器文件層級,并且以上文所描述的方式廣播回源圖。指令圖向執(zhí)行單元傳遞指令。當(dāng)指令所需要的源從寄存器文件層級來到時,指令被執(zhí)行單元所執(zhí)行。這些經(jīng)執(zhí)行的指令隨后被轉(zhuǎn)移出執(zhí)行單元并回到寄存器文件層級。
[0098]圖21示出根據(jù)本發(fā)明一個實施例的組塊體系架構(gòu)的示例。組塊的重要性在于它通過使用示出的四個多路復(fù)用器,減少了到從4到I的每個調(diào)度器條目的寫端口的數(shù)目,而仍密集地包裝所有條目而沒有形成磁泡(bubble)。
[0099]組塊的重要性可通過下面的示例(例如,注意每個循環(huán)中塊的分配開始于上部位置,在這種情況下為B0)看出。假定在循環(huán)I中,三個指令塊被分配到調(diào)度器條目(例如,三個塊將占用調(diào)度器中的前3個條目)。在下一循環(huán)(例如,循環(huán)2)中,另兩個指令塊被分配。為了避免在調(diào)度器陣列條目中創(chuàng)建磁泡,調(diào)度器陣列條目需被建造為支持四個寫端口。在這功耗、時序、面積等方面是高代價的。上面的組塊結(jié)構(gòu)簡化了所有的調(diào)度器陣列,其通過在分配到陣列之前使用多路復(fù)用結(jié)構(gòu)使調(diào)度器陣列僅具有一個寫端口。在上述示例中,循環(huán)2中的BO將被最后的復(fù)用器所選擇,而循環(huán)2中的BI將被第一個復(fù)用器所選擇(例如從左到右進行)。
[0100]以該方式,每個針對條目的組塊僅需要每條目一個寫端口和每條目四個讀端口。在成本上存在折衷,因為必須實現(xiàn)多路復(fù)用器,然而該成本超過因不必實現(xiàn)每條目四個寫端口所節(jié)約的成本的許多倍,因為可能存在非常多的條目。
[0101]圖21還示出中間分配緩沖區(qū)。如果調(diào)度器陣列不能接受發(fā)送給它們的所有組塊,則組塊可被臨時存儲在中間分配緩沖區(qū)中。當(dāng)調(diào)度器陣列具有空閑空間時,組塊將被從中間分配緩沖區(qū)中轉(zhuǎn)移到調(diào)度器陣列。
[0102]圖22示出根據(jù)本發(fā)明一個實施例的、如何根據(jù)線程的塊編號和線程ID對線程進行分配的描述。塊經(jīng)由上文所描述的組塊實現(xiàn)方案被分配到調(diào)度器陣列。每個線程塊使用塊編號在它們之間維持相繼順序。來自不同線程的塊可交錯(例如用于線程Thl的塊和用于線程Th2的塊在調(diào)度器陣列中交錯)。以該方式,來自不同線程的塊存在于調(diào)度器陣列內(nèi)。
[0103]圖23示出根據(jù)本發(fā)明一個實施例的、使用指向物理存儲位置的線程指針映射以管理多線程執(zhí)行的調(diào)度器的實現(xiàn)方案。在該實施例中,線程的管理通過對線程映射的控制來實現(xiàn)。例如,此處圖23示出線程I映射和線程2映射。映射跟蹤個體線程的塊的位置。映射2中的條目,映射中的物理存儲位置條目被分配到屬于該線程的塊。在該實現(xiàn)方案中,每個線程具有分配計數(shù)器,其為兩個線程計數(shù)??偟挠嫈?shù)不能超過N除以2 (例如超過可用空間)。分配計數(shù)器具有可調(diào)整的閾值,以實現(xiàn)來自池中的全部條目的分配的公正性。分配計數(shù)器可以阻止一個線程使用所有的可用空間。
[0104]圖24示出根據(jù)本發(fā)明一個實施例的、使用基于線程的指針映射的調(diào)度器的另一實現(xiàn)方案。圖24示出提交指針和分配指針之間的關(guān)系。如所示的,每個線程具有提交指針和分配指針,箭頭示出用于線程2的真實指針可如何環(huán)繞分配塊BI和B2的物理存儲,但其不能分配塊B9,直到用于線程2的提交指針向下移動。這通過線程2的提交指針的位置和