一種支持同時(shí)多線程指令亂序發(fā)射的飛行記分牌處理方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及多線程處理技術(shù)領(lǐng)域,特別是涉及一種支持同時(shí)多線程指令亂序發(fā)射的飛行記分牌處理方法。
【背景技術(shù)】
[0002]同一個(gè)線程中的指令因訪問(wèn)相同的邏輯寄存器而產(chǎn)生了相關(guān)性。前后兩條指令寫同一個(gè)邏輯寄存器,表示這兩條指令之間存在寫后寫(WAW)相關(guān);前一條指令讀一個(gè)邏輯寄存器,后一條指令寫同一個(gè)邏輯寄存器,表示這兩條指令之間存在讀后寫(WAR)相關(guān);前一條指令寫一個(gè)邏輯寄存器,后一條指令讀同一個(gè)邏輯寄存器,表示這兩條指令之間存在寫后讀(RAW)相關(guān)。為了提高指令執(zhí)行的并行度,當(dāng)前的微處理器都通過(guò)寄存器重命名技術(shù),將少量的邏輯寄存器動(dòng)態(tài)映射到數(shù)量更多的物理寄存器上,在保留指令間的寫后讀相關(guān)的同時(shí),解除寫后寫相關(guān)和讀后寫相關(guān),以便指令實(shí)現(xiàn)亂序發(fā)射,提高微處理器執(zhí)行效率。
[0003]超標(biāo)量微處理器的指令流水線通常劃分為:取指、譯碼、寄存器重命名、發(fā)射、讀寄存器文件、執(zhí)行、提交幾個(gè)流水線站臺(tái)。為了描述方便,所有進(jìn)入指令流水線但還沒(méi)有提交的指令稱為飛行的指令。
[0004]專利《一種超標(biāo)量微處理器中控制亂序發(fā)射的飛行記分牌裝置》(代號(hào):ZL200910057367.6)首次在指令流水線設(shè)計(jì)中引入了飛行記分牌的概念,通過(guò)設(shè)置與空閑物理寄存器數(shù)量相同的飛行記分牌位,用位數(shù)更短的飛行記分牌號(hào)代替物理寄存器號(hào)表示指令之間的寫后讀相關(guān),實(shí)現(xiàn)指令亂序發(fā)射。對(duì)于目標(biāo)寄存器有效的指令,在進(jìn)入發(fā)射隊(duì)列時(shí),則將其目標(biāo)寄存器對(duì)應(yīng)的飛行記分牌位設(shè)置為屏蔽狀態(tài),當(dāng)該指令執(zhí)行完成即將寫其目標(biāo)寄存器時(shí),將其對(duì)應(yīng)的飛行記分牌位設(shè)置為非屏蔽狀態(tài)。對(duì)于源寄存器有效的指令,在準(zhǔn)備發(fā)射時(shí),檢查其源寄存器對(duì)應(yīng)的飛行記分牌是否處于屏蔽狀態(tài),只有處于非屏蔽狀態(tài)才表示其源寄存器中的值可讀,該指令可以發(fā)射到執(zhí)行部件執(zhí)行。
[0005]隨著集成電路工藝技術(shù)的發(fā)展,同時(shí)多線程技術(shù)(SMT: Simultaneousmultithreading)應(yīng)運(yùn)而生。該技術(shù)充分利用程序的線程級(jí)并行,允許在一個(gè)時(shí)鐘周期內(nèi)發(fā)射并執(zhí)行來(lái)自不同線程的多條指令,通過(guò)提高處理器發(fā)射槽以及功能部件的利用率,來(lái)顯著提高處理器的執(zhí)行效率,是當(dāng)前微處理器結(jié)構(gòu)設(shè)計(jì)的關(guān)鍵技術(shù)。
[0006]為了提高硬件資源的利用率,指令流水線在實(shí)現(xiàn)SMT技術(shù)時(shí),制定了如下設(shè)計(jì)原則:
[0007]不同的線程具有各自獨(dú)立的邏輯寄存器,但共享同一套物理寄存器;
[0008]來(lái)自不同線程的指令可同時(shí)發(fā)射到不同的執(zhí)行部件;
[0009]—個(gè)線程發(fā)生轉(zhuǎn)移預(yù)測(cè)失敗或異常時(shí),只回退該線程對(duì)應(yīng)的處理器狀態(tài),其他線程繼續(xù)正常執(zhí)行。
[0010]每個(gè)目標(biāo)寄存器有效的指令在寄存器重命名時(shí)分配一個(gè)空閑的物理寄存器,在提交時(shí)釋放一個(gè)空閑的物理寄存器。在支持SMT技術(shù)之前,指令流水線上的所有指令都來(lái)自同一個(gè)線程,指令提交的順序與指令重命名的順序相同,且都與指令在程序中的順序相同,因此如專利《一種超標(biāo)量微處理器中控制亂序發(fā)射的飛行記分牌裝置》所述,分配的飛行記分牌號(hào)就是指令到達(dá)寄存器重命名站臺(tái)的順序號(hào)模上空閑物理寄存器數(shù)。假定空閑物理寄存器數(shù)量為η,則飛行記分牌的數(shù)量也為η,飛行記分牌號(hào)從“O”開始分配,依次加“I”,分配到“η-Γ后,再?gòu)摹癘”開始循環(huán)分配。這種飛行記分牌分配方法之所以正確,其原因在于:某條目標(biāo)寄存器有效的指令i分配了飛行記分牌號(hào)Fi,后續(xù)第η條目標(biāo)寄存器有效的指令n+i允許進(jìn)行寄存器重命名時(shí),指令i已提交并釋放了一個(gè)空閑物理寄存器,對(duì)應(yīng)的飛行記分牌號(hào)Fi已無(wú)意義,F(xiàn)i可以釋放并重新分配給新的指令使用。
[0011 ] 支持SMT技術(shù)之后,不同線程的指令共享同一套物理寄存器,物理寄存器的數(shù)量比支持SMT技術(shù)之前更多。如果按傳統(tǒng)的記分牌處理方法,直接以物理寄存器號(hào)作為記分牌號(hào),則硬件開銷更大。此時(shí)上述專利中的飛行記分牌處理方法不再適用,其原因在于:來(lái)自不同線程的指令交錯(cuò)執(zhí)行時(shí),指令提交的順序與指令寄存器重命名的順序不同,某條目標(biāo)寄存器有效的指令i分配了飛行記分牌號(hào)Fi,后續(xù)第η條目標(biāo)寄存器有效的指令n+i允許進(jìn)行寄存器重命名時(shí),指令i可能還沒(méi)有執(zhí)行完成,對(duì)應(yīng)的飛行記分牌號(hào)Fi還有意義,F(xiàn)i不可以釋放并重新分配給指令n+i使用。
【發(fā)明內(nèi)容】
[0012]本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種支持同時(shí)多線程指令亂序發(fā)射的飛行記分牌處理方法,能夠在不同線程共享同一套物理寄存器的條件下,分配、回收和回退飛行記分牌號(hào),并通過(guò)飛行記分牌控制來(lái)自多個(gè)線程的指令并行、亂序發(fā)射,提高了微處理器的能耗比。
[0013]本發(fā)明解決其技術(shù)問(wèn)題所采用的技術(shù)方案是:提供一種支持同時(shí)多線程指令亂序發(fā)射的飛行記分牌處理方法,在寄存器重命名站臺(tái)設(shè)置寄存器映射表、線程控制列表和總空閑列表;所述寄存器映射表以邏輯寄存器號(hào)為索引,條目數(shù)等于邏輯寄存器數(shù);所述線程控制列表為循環(huán)隊(duì)列結(jié)構(gòu),條目數(shù)等于空閑物理寄存器數(shù),采用頭尾指針管理,設(shè)置滿標(biāo)志;所述總空閑列表為循環(huán)隊(duì)列結(jié)構(gòu),條目數(shù)等于空閑物理寄存器數(shù),采用頭尾指針管理,設(shè)置滿標(biāo)志,包括以下步驟:
[0014]初始時(shí),將所有的飛行記分牌號(hào)按任意順序與所有的空閑物理寄存器號(hào)一一綁定;
[0015]指令進(jìn)行寄存器重命名時(shí),給指令的目標(biāo)寄存器號(hào)分配一個(gè)空閑物理寄存器號(hào)和與之綁定的飛行記分牌號(hào);
[0016]指令提交時(shí),該指令當(dāng)前分配的飛行記分牌號(hào)與當(dāng)前分配的物理寄存器號(hào)解除綁定,與該指令上一次分配的物理寄存器號(hào)重新綁定;
[0017]在指令回退時(shí),該指令當(dāng)前分配的飛行記分牌號(hào)與當(dāng)前分配的物理寄存器號(hào)一起被回收,并恢復(fù)其目標(biāo)寄存器上一次分配的飛行記分牌號(hào)和上一次分配的物理寄存器號(hào)。
[0018]所述寄存器映射表的每個(gè)列表?xiàng)l目包括:物理寄存器號(hào),用于表示該條目對(duì)應(yīng)的邏輯寄存器最后一次進(jìn)行寄存器重命名時(shí),所分配的空閑物理寄存器號(hào),每個(gè)列表?xiàng)l目需設(shè)置初始映射的物理寄存器號(hào);飛行記分牌有效位,用于表示本條目的飛行記分牌號(hào)是否有效,該位為“O”表示無(wú)效,為“I”表示有效,初始時(shí),該位為“O” ;飛行記分牌號(hào),用于表示本條目的物理寄存器號(hào)綁定的飛行記分牌號(hào),初始時(shí),該位無(wú)意義。
[0019]所述線程控制列表初始時(shí),頭指針和尾指針都指向條目O,滿標(biāo)志為“O”,所有條目無(wú)效,每個(gè)列表?xiàng)l目包括:飛行邏輯寄存器號(hào),用于表示飛行指令的目標(biāo)邏輯寄存器號(hào);飛行物理寄存器號(hào),用于表示本條目記錄的飛行邏輯寄存器當(dāng)前進(jìn)行寄存器重命名時(shí),所分配的空閑物理寄存器號(hào);飛行記分牌號(hào),用于表示本條目記錄的飛行邏輯寄存器當(dāng)前進(jìn)行寄存器重命名時(shí),所分配的空閑記分牌號(hào);歷史記分牌有效位,用于表示本條目記錄的歷史記分牌號(hào)是否有效,該位為“O”表示無(wú)效,為“I”表示有效;歷史記分牌號(hào),用于表示本條目記錄的飛行邏輯寄存器上一次進(jìn)行寄存器重命名時(shí),所分配的飛行記分牌號(hào);歷史物理寄存器號(hào),用于表示本條目記錄的飛行邏輯寄存器上一次進(jìn)行重命名時(shí),所分配的物理寄存器號(hào)。
[0020]所述總空閑列表初始時(shí),頭指針和尾指針都指向條目O,滿標(biāo)志為“I”,所有條目都有效,每個(gè)列表?xiàng)l目包括:空閑物理寄存器號(hào),用于表示當(dāng)前處于空閑狀態(tài)可分配給目標(biāo)寄存器使用的物理寄存器號(hào),初始時(shí),各條目依次存放所有的空閑物理寄存器號(hào);空閑記分牌號(hào),用于表示與本條目的空閑物理寄存器號(hào)綁定的空閑記分牌號(hào),初始時(shí),各條目依次存放所有的空閑記分牌號(hào)。
[0021]指令進(jìn)行寄存器重命名包括以下步驟:
[0022](I)從總空閑列表中獲得空閑物理寄存器號(hào)和空閑記分牌號(hào)分配給目標(biāo)寄存器,并分別作為飛行物理寄存器號(hào)和飛行記分牌號(hào)寫入對(duì)應(yīng)線程的控制列表隊(duì)尾;
[0023](2)將目標(biāo)寄存器作為飛行邏輯寄存器號(hào)寫入對(duì)應(yīng)線程的控制列表隊(duì)尾;
[0024](3)以目標(biāo)寄存器為索引查詢對(duì)應(yīng)線程的寄存器映射表,獲得目標(biāo)寄存器上一次映射的物理寄存器號(hào)、飛行記分牌有效位和飛行記分牌號(hào),分別作為歷史物理寄存器號(hào)、歷史記分牌有效位和歷史記分牌號(hào)寫入對(duì)應(yīng)線程的控制列表隊(duì)尾;
[0025](4)用空閑記分牌號(hào)查詢對(duì)應(yīng)線程的寄存器映射表,進(jìn)行內(nèi)容相聯(lián)匹配,找到飛行記分牌號(hào)等于空閑記分牌號(hào)的條目,置條目中的飛行記分牌有效位為“O” ;
[0026](5)以目標(biāo)寄存器為索引查詢對(duì)應(yīng)線程的寄存器映射表,將空閑物理寄存器號(hào)和空閑記分牌號(hào)分別作為物理寄存器號(hào)和飛行記分牌號(hào)寫入對(duì)應(yīng)的條目,置飛行記分牌有效位為“I”;
[0027](6)將空閑物理寄存器號(hào)、空閑記分牌號(hào)、以及控制列表尾指針與指令一起送發(fā)射站臺(tái);
[0028](7)總空閑列表的頭指針循環(huán)加“I”,對(duì)應(yīng)線程的控制列表隊(duì)尾指針循環(huán)加“I”。
[0029]指令提交時(shí)包括以下步驟:從對(duì)應(yīng)線程的線程控制列表中讀出歷史物理寄存器號(hào)和飛行記分牌號(hào),并作為空閑物理寄存器號(hào)和空閑記分牌號(hào)寫入到總空閑列表隊(duì)尾,總空閑列表尾指針循環(huán)加“I”。
[0030]指令回退時(shí)包括以下步驟:
[0031](I)從對(duì)應(yīng)線程的控制列表回退頭指針?biāo)笚l目中,讀出飛行邏輯寄存器號(hào)、飛行物理寄存器號(hào)、飛行記分牌號(hào)、歷史物理寄存器號(hào)、歷史記分牌有效位和歷史記分牌號(hào),對(duì)應(yīng)線程的控制列表的回退頭指針循環(huán)減“I”,當(dāng)前尾指針循環(huán)減“I” ;
[0032](2)以飛行邏輯寄存器號(hào)為索引查詢對(duì)應(yīng)線程的寄存器映射表,將歷史物理寄存器號(hào)、歷史記分牌有效位和歷史記分牌號(hào)分別作為物理寄存器號(hào)、飛行記分牌有效位和飛行記分牌號(hào)寫入對(duì)應(yīng)線程的寄存器