維持公平性和順序的資源管理子系統(tǒng)的制作方法
【專利摘要】本公開的一個實施例闡述了在進(jìn)行與重演操作有關(guān)的公用資源訪問請求的調(diào)度中維持公平性和順序的有效方式。具體地,流多處理器(SM)包括全序隊列(TOQ),該全序隊列配置為通過一個或多個執(zhí)行周期來調(diào)度訪問請求。當(dāng)所需要的公用資源已分配到請求時允許訪問請求取得進(jìn)展。在多個訪問請求要求相同公用資源的情況下,對較老的訪問請求給予優(yōu)先級。訪問請求可置于掛起有待某些公用資源的可用性的睡眠態(tài)中。可通過允許較老的訪問請求從較年輕的資源請求竊取資源來避免死鎖。所公開的技術(shù)的一個優(yōu)點是較新的訪問請求不會反復(fù)地阻止較老的公用資源訪問請求取得進(jìn)展。
【專利說明】維持公平性和順序的資源管理子系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明總地涉及計算機(jī)架構(gòu),并且,更具體地,涉及維持公平性和順序的資源管理子系統(tǒng)。
【背景技術(shù)】
[0002]并行處理系統(tǒng)中的普遍做法是設(shè)計同時執(zhí)行某個數(shù)目的線程的處理器。每個線程可在處理器內(nèi)的單獨執(zhí)行管線中執(zhí)行。隨著執(zhí)行并行地前進(jìn),不同線程可以以可能造成線程遭遇資源沖突的方式來請求訪問公用資源,諸如所共享的存儲器。例如,多個線程可執(zhí)行公用資源訪問操作,諸如存儲器加載指令,其中多個線程不能同時訪問資源。在這種情況下,至少一個線程被允許訪問公用資源并完成公用資源訪問操作。管線轉(zhuǎn)移公用資源的拷貝,諸如一些線程正在訪問的高速緩存行中的一個,并且那些線程能夠完成公用資源訪問操作。然而,訪問相同公用資源的其他線程不被允許完成公用資源訪問操作并且保持于未被服務(wù)(unserviced)。因此,一些線程被允許完成公用資源訪問操作,而其他線程不被允許。缺乏處理訪問公用資源的多個線程的手段,操作不能成功完成。
[0003]為訪問公用資源的多個線程服務(wù)的一個方法是將資源分配到一個或多個線程直到公用資源沒有附加的可用訪問端口為止。訪問相同資源的剩余線程被置于等待公用資源的可用性的掛起態(tài)中。當(dāng)公用資源具有一個或多個可用訪問端口時,對一個或多個用于服務(wù)的掛起的請求分配公用資源直到所有訪問端口再次已被分配為止。處理繼續(xù),直到對公用資源的所有請求已得到服務(wù)為止。
[0004]該方法的一個缺點是新請求可繼續(xù)到達(dá)并消耗到公用資源的訪問端口,同時等候相同公用資源的掛起的請求保持未被服務(wù)。當(dāng)較新的訪問公用資源的請求在掛起的請求之前得到服務(wù)時,這種發(fā)生的情況稱為“優(yōu)先級反轉(zhuǎn)”。該方法的另一個缺點是當(dāng)公用資源變成可用時可能選擇掛起的請求用于服務(wù)。然而,由于管線時延,在掛起的請求能夠完成公用資源訪問操作之前另一個較新的請求可能消耗公用資源。該方法的又一個缺點是請求可能要求對兩個公用資源A和B的訪問,其中A可用但B不可用。請求被置于掛起態(tài)直到B變成可用為止。當(dāng)B變成可用時,掛起的請求被調(diào)度以完成。然而,由于管線時延,在掛起的請求能夠完成公用資源訪問操作之前另一個較新的請求可能消耗A。當(dāng)較新的訪問請求在較老的已有的訪問請求之前持續(xù)地被分配資源時,較老的訪問請求可能不能取得進(jìn)展并因此不能完成執(zhí)行。
[0005]如前文示出的,本領(lǐng)域中所需要的是為訪問公用資源的線程服務(wù)的更有效的方式。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的一個實施例闡述用于調(diào)度公用資源訪問請求的計算機(jī)實現(xiàn)的方法。方法包括接收針對公用資源的第一請求、確定公用資源不可用于到請求的分配、以及作為響應(yīng)而延遲為第一請求服務(wù)。方法進(jìn)一步包括,在延遲服務(wù)以后接收針對公用資源的第二請求、以及在接收第二請求以后確定公用資源已變成可用于到請求的分配。方法進(jìn)一步包括在使公用資源對第二請求可用以前,使公用資源對第一請求可用。
[0007]本發(fā)明的其他實施例包括但不限于,子系統(tǒng),其包括配置為實現(xiàn)所公開的方法的一個或多個方面的流多處理器(SM)以及配置為實現(xiàn)所公開的方法的一個或多個方面的計
算設(shè)備。
[0008]所公開的技術(shù)的一個優(yōu)點是較新的訪問請求不會反復(fù)地阻止較老的公用資源訪問請求取得進(jìn)展。通過優(yōu)先于對新訪問請求來對已有的較老的訪問請求分配公用資源而避免了優(yōu)先級反轉(zhuǎn)。
【專利附圖】
【附圖說明】
[0009]因此,可以詳細(xì)地理解本發(fā)明的上述特征,并且可以參考實施例得到對如上面所簡要概括的本發(fā)明更具體的描述,其中一些實施例在附圖中示出。然而,應(yīng)當(dāng)注意的是,附圖僅示出了本發(fā)明的典型實施例,因此不應(yīng)被認(rèn)為是對其范圍的限制,本發(fā)明可以具有其他等效的實施例。
[0010]圖1是示出了配置為實現(xiàn)本發(fā)明的一個或多個方面的計算機(jī)系統(tǒng)的框圖;
[0011]圖2是根據(jù)本發(fā)明的一個實施例的、用于圖1的計算機(jī)系統(tǒng)的并行處理子系統(tǒng)的框圖;
[0012]圖3A是根據(jù)本發(fā)明的一個實施例的、圖2的前端的框圖;
[0013]圖3B是根據(jù)本發(fā)明的一個實施例的、圖2的并行處理單元之一內(nèi)的通用處理集群的框圖;
[0014]圖3C是根據(jù)本發(fā)明的一個實施例的、圖3B的流多處理器的一部分的框圖;
[0015]圖4示出根據(jù)本發(fā)明的一個實施例的、配置為為掛起的公用資源訪問操作服務(wù)的圖3C的SM內(nèi)的子系統(tǒng);
[0016]圖5示出根據(jù)本發(fā)明的一個實施例的、圖4的TOQ內(nèi)的TOQ條目老化單元;
[0017]圖6A和6B闡述根據(jù)本發(fā)明的一個實施例的、用于將公用資源訪問請求添加到全序隊列的方法步驟的流程圖;
[0018]圖7是根據(jù)本發(fā)明的一個實施例的、用于更新公用資源的狀態(tài)的方法步驟的流程圖;
[0019]圖8是根據(jù)本發(fā)明的一個實施例的、用于將公用資源分配到與公用資源訪問請求相關(guān)聯(lián)的TOQ條目的方法步驟的流程圖;
[0020]圖9是根據(jù)本發(fā)明的一個實施例的、用于選擇全序隊列(TOQ)中的公用資源訪問請求以服務(wù)的方法步驟的流程圖;
[0021 ] 圖10是根據(jù)本發(fā)明的一個實施例的、用于老化TOQ條目緩沖區(qū)中的TOQ條目的方法步驟的流程圖;以及
[0022]圖11是根據(jù)本發(fā)明的一個實施例的、用于將與公用資源訪問請求相關(guān)聯(lián)的TOQ條目從睡眠態(tài)轉(zhuǎn)變到活動態(tài)的方法步驟的流程圖。
【具體實施方式】
[0023]在下面的描述中,將闡述大量的具體細(xì)節(jié)以提供對本發(fā)明更透徹的理解。然而,本領(lǐng)域的技術(shù)人員應(yīng)該清楚,本發(fā)明可以在沒有一個或多個這些具體細(xì)節(jié)的情況下得以實施。
[0024]圖1為示出了配置為實現(xiàn)本發(fā)明的一個或多個方面的計算機(jī)系統(tǒng)100的框圖。計算機(jī)系統(tǒng)100包括經(jīng)由可以包括存儲器橋105的互連路徑通信的中央處理單元(CPU) 102和系統(tǒng)存儲器104。存儲器橋105可以是例如北橋芯片,經(jīng)由總線或其他通信路徑106 (例如超傳輸(HyperTransport)鏈路)連接到I/O (輸入/輸出)橋107。I/O橋107,其可以是例如南橋芯片,從一個或多個用戶輸入設(shè)備108 (例如鍵盤、鼠標(biāo))接收用戶輸入并且經(jīng)由通信路徑106和存儲器橋105將該輸入轉(zhuǎn)發(fā)到CPU 102。并行處理子系統(tǒng)112經(jīng)由總線或第二通信路徑113 (例如外圍部件互連(PCI )Express、加速圖形端口或超傳輸鏈路)耦連到存儲器橋105 ;在一個實施例中,并行處理子系統(tǒng)112是將像素傳遞到顯示設(shè)備110 (例如常規(guī)的基于陰極射線管或液晶顯示器的監(jiān)視器)的圖形子系統(tǒng)。系統(tǒng)盤114也連接到I/O橋107。交換器116提供I/O橋107與諸如網(wǎng)絡(luò)適配器118以及各種插卡120和121的其他部件之間的連接。其他部件(未明確示出),包括通用串行總線(USB)或其他端口連接、壓縮光盤(⑶)驅(qū)動器、數(shù)字視頻光盤(DVD)驅(qū)動器、膠片錄制設(shè)備及類似部件,也可以連接到I/O橋107。圖1所示的各種通信路徑包括具體命名的通信路徑106和113可以使用任何適合的協(xié)議實現(xiàn),諸如PC1-EXpreSS、AGP (加速圖形端口)、超傳輸或者任何其他總線或點到點通信協(xié)議,并且如本領(lǐng)域已知的,不同設(shè)備間的連接可使用不同協(xié)議。
[0025]在一個實施例中,并行處理子系統(tǒng)112包含經(jīng)優(yōu)化用于圖形和視頻處理的電路,包括例如視頻輸出電路,并且構(gòu)成圖形處理單元(GPU)。在另一個實施例中,并行處理子系統(tǒng)112包含經(jīng)優(yōu)化用于通用處理的電路,同時保留底層(underlying)的計算架構(gòu),本文將更詳細(xì)地進(jìn)行描述。在又一個實施例中,可以將并行處理子系統(tǒng)112與一個或多個其他系統(tǒng)元件集成在單個子系統(tǒng)中,諸如結(jié)合存儲器橋105、CPU 102以及I/O橋107,以形成片上系統(tǒng)(SoC)。
[0026]應(yīng)該理解,本文所示系統(tǒng)是示例性的,并且變化和修改都是可能的。連接拓?fù)洌虻臄?shù)目和布置、CPU 102的數(shù)目以及并行處理子系統(tǒng)112的數(shù)目,可根據(jù)需要修改。例如,在一些實施例中,系統(tǒng)存儲器104直接連接到CPU 102而不是通過橋,并且其他設(shè)備經(jīng)由存儲器橋105和CPU 102與系統(tǒng)存儲器104通信。在其他替代性拓?fù)渲校⑿刑幚碜酉到y(tǒng)112連接到I/O橋107或直接連接到CPU 102,而不是連接到存儲器橋105。而在其他實施例中,I/O橋107和存儲器橋105可能被集成到單個芯片上而不是作為一個或多個分立設(shè)備存在。大型實施例可以包括兩個或兩個以上的CPU 102以及兩個或兩個以上的并行處理子系統(tǒng)112。本文所示的特定部件是可選的;例如,任何數(shù)目的插卡或外圍設(shè)備都可能得到支持。在一些實施例中,交換器116被去掉,網(wǎng)絡(luò)適配器118和插卡120、121直接連接到I/O 橋 107。
[0027]圖2示出了根據(jù)本發(fā)明的一個實施例的并行處理子系統(tǒng)112。如所示的,并行處理子系統(tǒng)112包括一個或多個并行處理單元 (PI3U) 202,每個并行處理單元202都耦連到本地并行處理(PP)存儲器204。通常,并行處理子系統(tǒng)包括U個PPU,其中U≤I。(本文中,類似對象的多個實例需要時以標(biāo)識對象的參考數(shù)字和標(biāo)識實例的括號中的數(shù)字來表示。)PPU202和并行處理存儲器204可使用一個或多個集成電路設(shè)備來實現(xiàn),諸如可編程處理器、專用集成電路(ASIC)或存儲器設(shè)備,或者以任何其他技術(shù)可行的方式來實現(xiàn)。[0028]再參考圖1以及圖2,在一些實施例中,并行處理子系統(tǒng)112中的一些或所有PPU202是具有渲染管線的圖形處理器,其可以配置為實施與下述相關(guān)的各種操作:經(jīng)由存儲器橋105和第二通信路徑113從CPU 102和/或系統(tǒng)存儲器104所供應(yīng)的圖形數(shù)據(jù)生成像素數(shù)據(jù),與本地并行處理存儲器204 (可被用作圖形存儲器,包括例如常規(guī)幀緩沖區(qū)(buffer))交互以存儲和更新像素數(shù)據(jù),傳遞像素數(shù)據(jù)到顯示設(shè)備110等等。在一些實施例中,并行處理子系統(tǒng)112可包括一個或多個作為圖形處理器而操作的PPU202以及一個或多個用于通用計算的其他PPU 202。這些PTO可以是同樣的或不同的,并且每個PPU可具有專用并行處理存儲器設(shè)備或不具有專用并行處理存儲器設(shè)備。并行處理子系統(tǒng)112中的一個或多個PPU 202可輸出數(shù)據(jù)到顯示設(shè)備110,或者并行處理子系統(tǒng)112中的每個PPU 202可輸出數(shù)據(jù)到一個或多個顯示設(shè)備110。 [0029]在操作中,CPU 102是計算機(jī)系統(tǒng)100的主處理器,控制和協(xié)調(diào)其他系統(tǒng)部件的操作。具體地,CPU 102發(fā)出控制PPU 202的操作的命令。在一些實施例中,CPU 102寫入用于每個PPU 202的命令流到數(shù)據(jù)結(jié)構(gòu)中(在圖1或圖2中未明確示出),該數(shù)據(jù)結(jié)構(gòu)可位于系統(tǒng)存儲器104、并行處理存儲器204、或CPU 102和PPU 202都可訪問的其他存儲位置中。將指向每個數(shù)據(jù)結(jié)構(gòu)的指針寫到入棧緩沖區(qū)(pushbuffer)以發(fā)起對數(shù)據(jù)結(jié)構(gòu)中的命令流的處理。PPU 202從一個或多個入棧緩沖區(qū)讀取命令流,然后相對于CPU 102的操作異步地執(zhí)行命令??梢越?jīng)由設(shè)備驅(qū)動程序103由應(yīng)用程序為每個入棧緩沖區(qū)指定執(zhí)行優(yōu)先級以控制對不同入棧緩沖區(qū)的調(diào)度。
[0030]現(xiàn)在返回參考圖2和圖1,每個PPU 202包括經(jīng)由連接到存儲器橋105 (或者,在一個替代性實施例中,直接連接到CPU 102)的通信路徑113與計算機(jī)系統(tǒng)100的其余部分通信的I/O (輸入/輸出)單元205。PPU 202到計算機(jī)系統(tǒng)100的其余部分的連接也可以變化。在一些實施例中,并行處理子系統(tǒng)112可實現(xiàn)為可插入到計算機(jī)系統(tǒng)100的擴(kuò)展槽中的插卡。在其他實施例中,PPU 202可以和諸如存儲器橋105或I/O橋107的總線橋集成在單個芯片上。而在其他實施例中,PPU 202的一些或所有元件可以和CPU 102集成在單個芯片上。
[0031]在一個實施例中,通信路徑113是PCI Express鏈路,如本領(lǐng)域所知的,其中專用通道被分配到每個PPU 202。也可以使用其他通信路徑。I/O單元205生成用于在通信路徑113上傳送的包(或其他信號),并且還從通信路徑113接收所有傳入的包(或其他信號),將傳入的包引導(dǎo)到PPU 202的適當(dāng)部件。例如,可將與處理任務(wù)相關(guān)的命令引導(dǎo)到主機(jī)接口 206,而將與存儲器操作相關(guān)的命令(例如,對并行處理存儲器204的讀取或?qū)懭?引導(dǎo)到存儲器交叉開關(guān)單元210。主機(jī)接口 206讀取每個入棧緩沖區(qū),并且將存儲在入棧緩沖區(qū)中的命令流輸出到前端212。
[0032]有利地,每個PPU 202都實現(xiàn)高度并行處理架構(gòu)。如詳細(xì)示出的,PTO202 (O)包括處理集群陣列230,該陣列230包括C個通用處理集群(GPC)208,其中C≥I。每個GPC 208能夠并發(fā)執(zhí)行大量的(例如,幾百或幾千)線程,其中每個線程是程序的實例(instance)。在各種應(yīng)用中,可分配不同的GPC 208用于處理不同類型的程序或用于執(zhí)行不同類型的計算。GPC208的分配可以取決于因每種類型的程序或計算所產(chǎn)生的工作量而變化。
[0033]GPC 208從任務(wù)/工作單元207內(nèi)的工作分布單元接收所要執(zhí)行的處理任務(wù)。工作分布單元接收指向編碼為任務(wù)元數(shù)據(jù)(TMD)并存儲在存儲器中的處理任務(wù)的指針。指向TMD的指針包括在存儲為入棧緩沖區(qū)并由前端單元212從主機(jī)接口 206接收的命令流中??梢跃幋a為TMD的處理任務(wù)包括所要處理的數(shù)據(jù)的索引,以及定義數(shù)據(jù)將被如何處理(例如,什么程序?qū)⒈粓?zhí)行)的狀態(tài)參數(shù)和命令。任務(wù)/工作單元207從前端212接收任務(wù)并確保在每一個TMD所指定的處理發(fā)起前,將GPC 208配置為有效狀態(tài)??梢詾槊總€TMD指定用來調(diào)度處理任務(wù)的執(zhí)行的優(yōu)先級。還可從處理集群陣列230接收處理任務(wù)。可選地,TMD可包括控制將TMD添加到處理任務(wù)列表(或指向處理任務(wù)的指針的列表)的頭部還是尾部的參數(shù),從而提供除優(yōu)先級以外的另一級別的控制。
[0034]存儲器接口 214包括D個分區(qū)單元215,每個分區(qū)單元215直接耦連到并行處理存儲器204的一部分,其中D > I。如所示的,分區(qū)單元215的數(shù)目一般等于動態(tài)隨機(jī)存取存儲器(DRAM) 220的數(shù)目。在其他實施例中,分區(qū)單元215的數(shù)目也可以不等于存儲器設(shè)備的數(shù)目。本領(lǐng)域的技術(shù)人員應(yīng)該理解DRAM 220可以用其他合適的存儲設(shè)備來替代并且可以是一般常規(guī)的設(shè)計。因此省略了詳細(xì)描述。諸如幀緩沖區(qū)或紋理映射圖的渲染目標(biāo)可以跨DRAM 220加以存儲,這允許分區(qū)單元215并行寫入每個渲染目標(biāo)的各部分以有效地使用并行處理存儲器204的可用帶寬。
[0035]任何一個GPC 208都可以處理要被寫到并行處理存儲器204內(nèi)的任何DRAM 220的數(shù)據(jù)。交叉開關(guān)單元210配置為路由每個GPC 208的輸出到任何分區(qū)單元215的輸入或到另一個GPC 208用于進(jìn)一步處理。GPC 208通過交叉開關(guān)單元210與存儲器接口 214通信,以對各種外部存儲器設(shè)備進(jìn)行讀取或?qū)懭?。在一個實施例中,交叉開關(guān)單元210具有到存儲器接口 214的連接以和I/O單元205通信,以及到本地并行處理存儲器204的連接,從而使得在不同GPC 208內(nèi)的處理內(nèi)核能夠與系統(tǒng)存儲器104或?qū)τ赑PU 202而言非本地的其他存儲器通信。在圖2所示的實施例中,交叉開關(guān)單元210直接與I/O單元205連接。交叉開關(guān)單元210可使用虛擬信道來分開GPC 208與分區(qū)單元215之間的業(yè)務(wù)流。
[0036]另外,GPC 208可被編程以執(zhí)行與種類繁多的應(yīng)用相關(guān)的處理任務(wù),包括但不限于,線性和非線性數(shù)據(jù)變換、視頻和/或音頻數(shù)據(jù)過濾、建模操作(例如,應(yīng)用物理定律以確定對象的位置、速率和其他屬性)、圖像渲染操作(例如,曲面細(xì)分(tessellation)著色器、頂點著色器、幾何著色器、和/或像素著色器程序)等等。PPU 202可將數(shù)據(jù)從系統(tǒng)存儲器104和/或本地并行處理存儲器204轉(zhuǎn)移到內(nèi)部(片上)存儲器中,處理該數(shù)據(jù),并且將結(jié)果數(shù)據(jù)寫回到系統(tǒng)存儲器104和/或本地并行處理存儲器204,其中這樣的數(shù)據(jù)可以由其他系統(tǒng)部件訪問,所述其他系統(tǒng)部件包括CPU 102或另一個并行處理子系統(tǒng)112。
[0037]PPU 202可配備有任何容量(amount)的本地并行處理存儲器204,包括沒有本地存儲器,并且可以以任何組合方式使用本地存儲器和系統(tǒng)存儲器。例如,在統(tǒng)一存儲器架構(gòu)(UMA)實施例中,PPU 202可以是圖形處理器。在這樣的實施例中,將不提供或幾乎不提供專用的圖形(并行處理)存儲器,并且PPU 202會以排他或幾乎排他的方式使用系統(tǒng)存儲器。在UMA實施例中,PPU 202可集成到橋式芯片中或處理器芯片中,或作為具有高速鏈路(例如,PCI Express)的分立芯片提供,所述高速鏈路經(jīng)由橋式芯片或其他通信手段將PPU 202連接到系統(tǒng)存儲器。
[0038]如上所示,在并行處理子系統(tǒng)112中可以包括任何數(shù)目的PPU 202。例如,可在單個插卡上提供多個PPU 202、或可將多個插卡連接到通信路徑113、或可將一個或多個PPU202集成到橋式芯片中。在多PI3U系統(tǒng)中的PPU 202可以彼此同樣或不同。例如,不同的PPU 202可能具有不同數(shù)目的處理內(nèi)核、不同容量的本地并行處理存儲器等等。在存在多個PPU 202的情況下,可并行操作那些PI3U從而以高于單個PPU 202所可能達(dá)到的吞吐量來處理數(shù)據(jù)。包含一個或多個PPU 202的系統(tǒng)可以以各種配置和形式因素來實現(xiàn),包括臺式電腦、筆記本電腦或手持式個人計算機(jī)、服務(wù)器、工作站、游戲控制臺、嵌入式系統(tǒng)等等。多個并發(fā)任務(wù)調(diào)度
[0039]可以在GPC 208上并發(fā)執(zhí)行多個處理任務(wù)并且處理任務(wù)在執(zhí)行期間可以生成一個或多個“子”處理任務(wù)。任務(wù)/工作單元207接收任務(wù)并動態(tài)調(diào)度處理任務(wù)和子處理任務(wù)用于由GPC 208執(zhí)行。
[0040]圖3A為根據(jù)本發(fā)明的一個實施例的圖2的任務(wù)/工作單元207的框圖。任務(wù)/工作單元207包括任務(wù)管理單元300和工作分布單元340。任務(wù)管理單元300基于執(zhí)行優(yōu)先級級別來組織所要調(diào)度的任務(wù)。對于每個優(yōu)先級級別,任務(wù)管理單元300將指向與任務(wù)相對應(yīng)的TMD 322的指針的列表存儲在調(diào)度器表321中,其中所述列表可以實現(xiàn)為鏈表??梢詫MD 322存儲在PP存儲器204或系統(tǒng)存儲器104中。任務(wù)管理單元300接受任務(wù)并將任務(wù)存儲在調(diào)度器表321中的速度與任務(wù)管理單元300調(diào)度任務(wù)用于執(zhí)行的速度是解耦的。因此,任務(wù)管理單元300可以在調(diào)度任務(wù)之前收集數(shù)個任務(wù)。之后可以基于優(yōu)先級信息或使用其他技術(shù)諸如輪叫調(diào)度來調(diào)度所收集的任務(wù)。
[0041]工作分布單元340包括具有槽的任務(wù)表345,每個槽可以被用于正在執(zhí)行的任務(wù)的TMD 322所占用。當(dāng)任務(wù)表345中有空閑槽時,任務(wù)管理單元300可以調(diào)度任務(wù)用于執(zhí)行。當(dāng)沒有空閑槽時,未占用槽的較高優(yōu)先級任務(wù)可以驅(qū)逐占用槽的較低優(yōu)先級任務(wù)。當(dāng)任務(wù)被驅(qū)逐時,該任務(wù)被停止,并且如果該任務(wù)的執(zhí)行沒有完成,則將指向該任務(wù)的指針添加到所要調(diào)度的任務(wù)指針的列表以使得任務(wù)的執(zhí)行稍后恢復(fù)。當(dāng)生成子處理任務(wù)時,在任務(wù)的執(zhí)行期間,將指向該子任務(wù)的指針添加到所要調(diào)度的任務(wù)指針的列表??梢杂稍谔幚砑宏嚵?30中執(zhí)行的TMD 322生成子任務(wù)。
[0042]不同于由任務(wù)/工作單元207從前端212接收的任務(wù),子任務(wù)從處理集群陣列230接收。子任務(wù)不被插入入棧緩沖區(qū)或傳送到前端。當(dāng)生成子任務(wù)或?qū)⒂糜谧尤蝿?wù)的數(shù)據(jù)存儲在存儲器中時不通知CPU 102。通過入棧緩沖區(qū)提供的任務(wù)與子任務(wù)之間的另一個區(qū)別是通過入棧緩沖區(qū)提供的任務(wù)由應(yīng)用程序來定義而子任務(wù)是在任務(wù)執(zhí)行期間動態(tài)生成的。
任務(wù)處理概述
[0043]圖3B為根據(jù)本發(fā)明的一個實施例的在圖2的PPU 202之一內(nèi)的GPC208的框圖。每個GPC 208可配置為并行執(zhí)行大量線程,其中術(shù)語“線程”是指在特定輸入數(shù)據(jù)集上執(zhí)行的特定程序的實例。在一些實施例中,單指令、多數(shù)據(jù)(SIMD)指令發(fā)出技術(shù)用于在不提供多個獨立指令單元的情況下支持大量線程的并行執(zhí)行。在其他實施例中,單指令、多線程(SIMT)技術(shù)用于使用配置為向GPC 208中的每一個內(nèi)的處理引擎集發(fā)出指令的公共指令單元來支持大量一般來說同步的線程的并行執(zhí)行。不同于所有處理引擎通常都執(zhí)行同樣指令的SMD執(zhí)行機(jī)制,SIMT執(zhí)行通過給定線程程序允許不同線程更容易跟隨分散執(zhí)行路徑。本領(lǐng)域普通技術(shù)人員應(yīng)該理解SMD處理機(jī)制代表SMT處理機(jī)制的功能子集。
[0044]經(jīng)由將處理任務(wù)分布到流多處理器(SM)310的管線管理器305來有利地控制GPC208的操作。管線管理器305還可配置為通過為由SM 310所輸出的處理數(shù)據(jù)指定目的地來控制工作分布交叉開關(guān)330。[0045]在一個實施例中,每個GPC 208包括M個SM 310,其中M≥1,每個SM 310配置為處理一個或多個線程組。另外,如本領(lǐng)域已知的,每個SM310有利地包括可以管線化的同樣功能執(zhí)行單元集(例如執(zhí)行單元和加載-存儲單元一在圖3C中示出為Exec單元302和LSU303),其允許在前一個指令完成之前發(fā)出新指令??商峁┕δ軋?zhí)行單元的任何組合。在一個實施例中,功能單元支持各種各樣的操作,包括整數(shù)和浮點運算(例如加法和乘法)、比較操作、布爾操作(AND、0R、X0R)、移位和各種代數(shù)函數(shù)的計算(例如平面插值、三角函數(shù)、指數(shù)函數(shù)和對數(shù)函數(shù)等等);以及相同功能單元硬件可均衡地用來實施不同的操作。
[0046]如本文之前所定義的,傳送到特定GPC 208的一系列指令構(gòu)成線程,并且跨SM310內(nèi)的并行處理引擎(未示出)的某一數(shù)目的并發(fā)執(zhí)行線程的集合在本文中稱為“線程束(warp)”或“線程組”。如本文所使用的,“線程組”是指對不同輸入數(shù)據(jù)并發(fā)執(zhí)行相同程序的一組線程,所述組的一個線程被指派到SM 310內(nèi)的不同處理引擎。線程組可以包括比SM310內(nèi)的處理引擎數(shù)目少的線程,在這種情況下一些處理引擎在該線程組正在被處理的周期期間處于閑置狀態(tài)。線程組還可以包括比SM 310內(nèi)的處理引擎數(shù)目多的線程,在這種情況下處理在連續(xù)的時鐘周期內(nèi)發(fā)生。因為每個SM 310可以并發(fā)支持多達(dá)G個線程組,結(jié)果是在任何給定時間在GPC208中可以執(zhí)行多達(dá)G*M個線程組。
[0047]此外,多個相關(guān)線程組可以在SM 310內(nèi)同時活動(在執(zhí)行的不同階段)。該線程組集合在本文中稱為“協(xié)作線程陣列”(“CTA”)或“線程陣列”。特定CTA的大小等于m*k,其中k是線程組中并發(fā)執(zhí)行線程的數(shù)目并且通常是SM 310內(nèi)的并行處理引擎數(shù)目的整數(shù)倍,以及m是SM310內(nèi)同時活動的線程組的數(shù)目。CTA的大小一般由編程者以及可用于CTA的硬件資源諸如存儲器或寄存器的容量來確定。
[0048]每個SM 310包括一級(LI)高速緩存(圖3C所示)或使用用于實施加載和存儲操作的SM 310外部的相應(yīng)LI高速緩存中的空間。每個SM 310都還有權(quán)訪問在所有GPC 208之間共享并且可用于在線程之間轉(zhuǎn)移數(shù)據(jù)的二級(L2)高速緩存。最后,SM 310還有權(quán)訪問片外“全局”存儲器,所述“全局”存儲器可以包括例如并行處理存儲器204和/或系統(tǒng)存儲器104。應(yīng)該理解,PTO 202外部的任何存儲器可用作全局存儲器。此外,一點五級(L1.5)高速緩存335可以包括在GPC 208內(nèi),其配置為接收并保持由SM 310所請求的經(jīng)由存儲器接口 214從存儲器獲取的數(shù)據(jù),包括指令、一致(uniform)數(shù)據(jù)和常數(shù)數(shù)據(jù),并將所請求的數(shù)據(jù)提供給SM 310。在GPC208中具有多個SM 310的實施例有利地共享了高速緩存在L1.5高速緩存335中的公共指令和數(shù)據(jù)。
[0049]每個GPC 208可以包括配置為將虛擬地址映射到物理地址中的存儲器管理單元(MMU)328。在其他實施例中,MMU 328可以駐留在存儲器接口 214內(nèi)。MMU 328包括用于將虛擬地址映射到像素塊(tile)的物理地址的頁表條目(PTE)集和可選地包括高速緩存行索引。MMU 328可以包括地址轉(zhuǎn)換后備緩沖區(qū)(TLB)或可以駐留在多處理器SM 310或LI高速緩存或GPC 208內(nèi)的高速緩存。物理地址經(jīng)處理以分布表面數(shù)據(jù)訪問位置來允許高效請求在分區(qū)單元215之間交錯。高速緩存行索引可用于確定用于高速緩存行的請求是命中還是未命中。
[0050]在圖形和計算應(yīng)用中,GPC 208可配置為使得每個SM 310耦連到用于實施紋理映射操作例如確定紋理樣本位置、讀取紋理數(shù)據(jù)以及過濾該紋理數(shù)據(jù)的紋理單元315。從內(nèi)部紋理LI高速緩存(未示出)或者在一些實施例中從SM 310內(nèi)的LI高速緩存讀取紋理數(shù)據(jù)并根據(jù)需要從在所有GPC208之間共享的L2高速緩存、并行處理存儲器204或系統(tǒng)存儲器104中獲取紋理數(shù)據(jù)。為了將所處理的任務(wù)提供給另一個GPC 208用于進(jìn)一步處理或為了經(jīng)由交叉開關(guān)單元210將所處理的任務(wù)存儲在L2高速緩存、并行處理存儲器204或系統(tǒng)存儲器104中,每個SM 310將所處理的任務(wù)輸出到工作分布交叉開關(guān)330。preROP (預(yù)光柵操作)325配置為從SM 310接收數(shù)據(jù)、將數(shù)據(jù)引導(dǎo)到分區(qū)單元215內(nèi)的ROP單元以及針對顏色混合實施優(yōu)化、組織像素顏色數(shù)據(jù)和實施地址轉(zhuǎn)譯。
[0051]應(yīng)該理解本文所述的內(nèi)核架構(gòu)是示例性的并且變化和修改都是可能的。任何數(shù)目的處理單元例如SM 310或紋理單元315、preROP 325可以包括在GPC 208內(nèi)。進(jìn)一步地,如圖2所示,PPU 202可以包括任何數(shù)目的GPC 208,所述GPC 208有利地在功能上彼此相似以使得執(zhí)行行為不取決于哪個GPC 208接收特定處理任務(wù)。進(jìn)一步地,每個GPC 208有利地使用分開且各異的處理單元、LI高速緩存來獨立于其他GPC 208操作以為一個或多個應(yīng)用程序執(zhí)行任務(wù)。
[0052]本領(lǐng)域普通技術(shù)人員應(yīng)該理解圖1、2、3A和3B所描述的架構(gòu)決不限制本發(fā)明的范圍并且在不脫離本發(fā)明范圍的情況下本文所教導(dǎo)的技術(shù)可以在任何經(jīng)適當(dāng)配置的處理單元上實現(xiàn),所述處理單元包括但不限于一個或多個CPU、一個或多個多核CPU、一個或多個PPU 202、一個或多個GPC208、一個或多個圖形或?qū)S锰幚韱卧鹊取?br>
[0053]在本發(fā)明的實施例中,使用計算系統(tǒng)的PPU 202或其他處理器來使用線程陣列執(zhí)行通用計算是可取的。為線程陣列中的每個線程指派在線程的執(zhí)行期間對于線程可訪問的唯一的線程標(biāo)識符(“線程ID”)??杀欢x為一維或多維數(shù)值的線程ID控制線程處理行為的各方面。例如,線程ID可用于確定線程將要處理輸入數(shù)據(jù)集的哪部分和/或確定線程將要產(chǎn)生或?qū)戄敵鰯?shù)據(jù)集的哪部分。
[0054]每線程指令序列可包括定義線程陣列的代表性線程和一個或多個其他線程之間的協(xié)作行為的至少一個指令。例如,每線程指令序列可能包括在序列中的特定點處掛起用于代表性線程的操作執(zhí)行直到諸如其他線程的一個或多個到達(dá)該特定點的時間為止的指令、用于代表性線程將數(shù)據(jù)存儲在其他線程的一個或多個有權(quán)訪問的共享存儲器中的指令、用于代表性線程原子地讀取和更新存儲在其他線程的一個或多個基于它們的線程ID有權(quán)訪問的共享存儲器中的數(shù)據(jù)的指令等等。CTA程序還可以包括計算數(shù)據(jù)將從其讀取的共享存儲器中的地址的指令,該地址是線程ID的函數(shù)。通過定義合適的函數(shù)并提供同步技術(shù),可以以可預(yù)測的方式由CTA的一個線程將數(shù)據(jù)寫入共享存儲器中的給定位置并由同一個CTA的不同線程從該位置讀取數(shù)據(jù)。因此,數(shù)據(jù)在線程之間共享的任何期望模式可以得到支持,以及CTA中的任何線程可以與同一個CTA中的任何其他線程共享數(shù)據(jù)。如果存在數(shù)據(jù)在CTA的線程之間的共享,則其范圍由CTA程序確定;因此,應(yīng)該理解的是,在使用CTA的特定應(yīng)用中,CTA的線程可能會或可能不會真正互相共享數(shù)據(jù),這取決于CTA程序,術(shù)語“CTA”和“線程陣列”在本文作為同義詞使用。
[0055]圖3C為根據(jù)本發(fā)明的一個實施例的圖3B的SM 310的框圖。SM 310包括配置為經(jīng)由L1.5高速緩存335從存儲器接收指令和常數(shù)的指令LI高速緩存370。線程束調(diào)度器和指令單元312從指令LI高速緩存370接收指令和常數(shù)并根據(jù)該指令和常數(shù)控制本地寄存器堆304和SM 310功能單元。SM 310功能單元包括N個exec (執(zhí)行或處理)單元302和P個加載-存儲單元(LSU) 303。[0056]SM 310提供具有不同級別的可訪問性的片上(內(nèi)部)數(shù)據(jù)存儲。特殊寄存器(未示出)對于LSU 303可讀但不可寫并且用于存儲定義每個線程的“位置”的參數(shù)。在一個實施例中,特殊寄存器包括每線程(或SM 310內(nèi)的每exec單元302)—個的存儲線程ID的寄存器;每個線程ID寄存器僅由各自的exec單元302可訪問。特殊寄存器還可以包括附加寄存器,其對于執(zhí)行由TMD 322所代表的同一個處理任務(wù)的所有線程(或由所有LSU303)可讀,其存儲CTA標(biāo)識符、CTA維數(shù)、CTA所屬網(wǎng)格(grid)的維數(shù)(或隊列位置,如果TMD 322編碼隊列任務(wù)而不是網(wǎng)格任務(wù)的話)、以及CTA被指派到的TMD 322的標(biāo)識符。
[0057]如果TMD 322是網(wǎng)格TMD,則TMD 322的執(zhí)行會啟動和執(zhí)行固定數(shù)目的CTA以處理存儲在隊列525中的固定量的數(shù)據(jù)。將CTA的數(shù)目指定為網(wǎng)格寬度、高度和深度的乘積。可以將固定量的數(shù)據(jù)存儲在TMD 322中或TMD 322可以存儲指向要由CTA所處理的數(shù)據(jù)的指針。TMD 322還存儲由CTA所執(zhí)行的程序的開始地址。
[0058]如果TMD 322是隊列TMD,那么使用TMD 322的隊列特點,這意味著將要被處理的數(shù)據(jù)量不一定是固定的。隊列條目存儲用于由指派到TMD322的CTA所處理的數(shù)據(jù)。隊列條目還可以代表在線程執(zhí)行期間由另一個TMD 322所生成的子任務(wù),從而提供嵌套并行性。通常線程或包括線程的CTA的執(zhí)行被掛起直到子任務(wù)的執(zhí)行完成??梢詫㈥犃写鎯υ赥MD322中或與TMD 322分開存儲,在該情況下TMD 322存儲指向該隊列的隊列指針。有利地,當(dāng)代表子任務(wù)的TMD 322正在執(zhí)行時可以將由子任務(wù)所生成的數(shù)據(jù)寫到隊列。隊列可以實現(xiàn)為循環(huán)隊列以使得數(shù)據(jù)的總量不限于隊列的大小。
[0059]屬于網(wǎng)格的CTA具有指示網(wǎng)格內(nèi)各自CTA的位置的隱含網(wǎng)格寬度、高度和深度參數(shù)。在初始化期間響應(yīng)于經(jīng)由前端212從設(shè)備驅(qū)動程序103所接收的命令來寫特殊寄存器并且在處理任務(wù)的執(zhí)行期間特殊寄存器不改變。前端212調(diào)度每個處理任務(wù)用于執(zhí)行。每個CTA與具體TMD 322相關(guān)聯(lián)用于一個或多個任務(wù)的并發(fā)執(zhí)行。此外,單個GPC 208可以并發(fā)執(zhí)行多個任務(wù)。
[0060]參數(shù)存儲器(未示出)存儲可由同一個CTA內(nèi)的任何線程(或任何LSU 303)讀取但不可由其寫入的運行時間參數(shù)(常數(shù))。在一個實施例中,設(shè)備驅(qū)動程序103在引導(dǎo)SM 310開始執(zhí)行使用參數(shù)的任務(wù)之前將這些參數(shù)提供給參數(shù)存儲器。任何CTA內(nèi)的任何線程(或SM 310內(nèi)的任何exec單元302)可以通過存儲器接口 214訪問全局存儲器??梢詫⑷执鎯ζ鞯母鞑糠执鎯υ贚I高速緩存320中。
[0061]每個線程將本地寄存器堆304用作暫存空間;每個寄存器被分配以專用于一個線程,并且在本地寄存器堆304的任何部分中的數(shù)據(jù)僅對于寄存器被分配到的線程可訪問。本地寄存器堆304可以實現(xiàn)為物理上或邏輯上分為P個通道的寄存器堆,每個通道具有一定數(shù)目的條目(其中每個條目可以存儲例如32位字)。將一個通道指派到N個exec單元302和P個下載-存儲單元LSU 303的每一個,并且利用用于執(zhí)行同一個程序的不同線程的數(shù)據(jù)來填充不同通道中的相應(yīng)條目以幫助SIMD執(zhí)行??梢詫⑼ǖ赖牟煌糠址峙涞紾個并發(fā)線程組中的不同線程組,以使得本地寄存器堆304中的給定條目僅對于特定線程可訪問。在一個實施例中,保留本地寄存器堆304內(nèi)的某些條目用于存儲線程標(biāo)識符,實現(xiàn)特殊寄存器之一。此外,一致LI高速緩存375存儲用于N個exec單元302和P個下載-存儲單元LSU 303的每個通道的一致值或常數(shù)值。
[0062]共享存儲器306對于單個CTA內(nèi)的線程可訪問;換言之,共享存儲器306中的任何位置對于同一個CTA內(nèi)的任何線程(或?qū)τ赟M 310內(nèi)的任何處理引擎)可訪問。共享存儲器306可以實現(xiàn)為具有允許任何處理引擎對共享存儲器中的任何位置讀取或?qū)懭氲幕ミB的共享寄存器堆或共享片上高速緩存存儲器。在其他實施例中,共享狀態(tài)空間可能映射到片外存儲器的每CTA區(qū)上并被高速緩存在LI高速緩存320中。參數(shù)存儲器可以實現(xiàn)為在實現(xiàn)共享存儲器306的同一個共享寄存器堆或共享高速緩存存儲器內(nèi)的指定部分,或者實現(xiàn)為LSU 303對其具有只讀訪問權(quán)限的分開的共享寄存器堆或片上高速緩存存儲器。在一個實施例中,實現(xiàn)參數(shù)存儲器的區(qū)域還用于存儲CTA ID和任務(wù)ID,以及CTA和網(wǎng)格維數(shù)或隊列位置,實現(xiàn)特殊寄存器的各部分。SM 310中的每個LSU 303耦連到統(tǒng)一地址映射單元352,統(tǒng)一地址映射單元352將為在統(tǒng)一存儲器空間中所指定的加載和存儲指令所提供的地址轉(zhuǎn)換為每個各異存儲器空間中的地址。因此,指令可以用于通過指定統(tǒng)一存儲器空間中的地址來訪問本地、共享或全局存儲器空間中的任何一個。
[0063]每個SM 310中的LI高速緩存320可以用于高速緩存私有的每線程本地數(shù)據(jù)還有每應(yīng)用全局?jǐn)?shù)據(jù)。在一些實施例中,可以將每CTA共享數(shù)據(jù)高速緩存在LI高速緩存320中。LSU 303經(jīng)由存儲器和高速緩存互連380耦連到共享存儲器306和LI高速緩存320。
維持公平性和順序的全序隊列
[0064]圖4示出根據(jù)本發(fā)明的一個實施例的、配置為服務(wù)掛起的公用資源訪問操作的、圖3C的SM310內(nèi)的子系統(tǒng)400。如所示,子系統(tǒng)400包括SM分區(qū)410、地址生成單元(AGU)420、地址多路復(fù)用器440、寫數(shù)據(jù)多路復(fù)用器450、仲裁單元455、LI高速緩存存儲器460、讀數(shù)據(jù)多路分配器(demultiplexer) 465、以及全序隊列(total order queue, TOQ) 430。
[0065]SM分區(qū)位于SM 310的線程束調(diào)度器和指令單元312內(nèi)。SM分區(qū)調(diào)度并將公用資源訪問請求分派到LSU 303。如所示,SM分區(qū)410包括調(diào)度器412、分派單元414、以及重演指令緩沖區(qū)(RIB)416。調(diào)度器412從指令LI高速緩存370接收新指令并且調(diào)度指令用于由SM 310執(zhí)行。調(diào)度器412將所調(diào)度的指令提交到分派單元414。
[0066]分派單元414從調(diào)度器412接收調(diào)度指令,并將指令轉(zhuǎn)發(fā)到SM 310內(nèi)的適當(dāng)?shù)墓δ軉卧糜趫?zhí)行。在指令包括公用資源訪問請求諸如在存儲器中加載或存儲數(shù)據(jù)的請求的情況下,分派單元將指令轉(zhuǎn)發(fā)到LSU 303。在將這種指令分派到LSU 303之前,分派單元確定在RIB 416中是否存在可用條目以分配到指令。為在請求的執(zhí)行期間可能需要至少一個重演操作的任何公用資源訪問請求而創(chuàng)建RIB條目。如果存在可用RIB條目,那么分派單元在RIB 416中存儲與指令有關(guān)的信息并且將指令分派到LSU 303。如果不存在可用RIB條目,那么分派單元414暫停被引導(dǎo)到LSU 303的掛起的指令的流直到RIB條目變成可用為止。在這種情況下,仍允許針對所分派的指令的重演操作執(zhí)行完成。一旦指令已完成執(zhí)行,則收回相應(yīng)的RIB條目,并且所收回的RIB條目對分派單元414是可用的以分配到新指令。如下文進(jìn)一步所述,分派單元414接收重演操作請求并請求從TOQ 430收回RIB條目。此外,分派單元414將寫數(shù)據(jù)發(fā)送到寫數(shù)據(jù)多路復(fù)用器450,并從讀數(shù)據(jù)多路分配器465接收讀數(shù)據(jù)。
[0067]RIB 416存儲關(guān)于包括公用資源訪問請求的指令的信息。這種請求可要求一個或多個重演操作以完成執(zhí)行。公用資源訪問請求可能在LSU 303的一個執(zhí)行周期中完成。然而,在一些條件下,訪問請求可能無法完成執(zhí)行,并且被稱作重演操作的一個或多個附加的執(zhí)行周期被創(chuàng)建以用于訪問請求完成。這些條件包括但不限于,跨越比由LSU 303所同時訪問的高速緩存行更多的高速緩存行的訪問請求、對比由結(jié)構(gòu)所同時服務(wù)的結(jié)構(gòu)內(nèi)的位置更多的位置的訪問、對由在先的請求所當(dāng)前消耗的結(jié)構(gòu)的訪問、或在優(yōu)先級上比另一個掛起的請求低的訪問請求。與每個這種訪問請求有關(guān)的信息存儲在相關(guān)聯(lián)的RIB條目中。RIB條目在后續(xù)重演操作期間被檢索并遞送到LSU 303以有助于重演操作的執(zhí)行。RIB條目可包括但不限于,指令、操作所需要的常數(shù)值、以及操作所需要的寄存器的內(nèi)容。應(yīng)理解的是可用RIB條目的理想數(shù)目可基于若干因素,包括但不限于,要求重演操作的條件的發(fā)生頻率、針對訪問請求所創(chuàng)建的重演操作的平均數(shù)、以及分派單元414內(nèi)的時延。RIB 416將命令和地址位置發(fā)送到AGU 420。
[0068]AGU 420位于LSU 303內(nèi)。每個AGU 420與相應(yīng)的SM分區(qū)410相關(guān)聯(lián)。例如,AGU
420(O)與SM分區(qū)410 (O)相關(guān)聯(lián),并且AGU 420 (N)與SM分區(qū)410 (N)相關(guān)聯(lián)。AGU 420沿信號路徑470從RIB 416接收命令和地址。作為響應(yīng),AGU 420沿信號路徑472將AGU請求狀態(tài)發(fā)送到TOQ 430。反過來,TOQ 430讀取AGU請求狀態(tài)以確定是否針對當(dāng)前訪問請求需要附加的重演操作或是否可收回與當(dāng)前訪問請求相對應(yīng)的RIB條目收回。另外,AGU 420沿信號路徑474將地址信息發(fā)送到地址多路復(fù)用器440。
[0069]地址多路復(fù)用器440選擇來自與當(dāng)前訪問請求相對應(yīng)的AGU 420的地址并將所選擇的地址發(fā)送到LI高速緩存320。每個AGU 420生成用于當(dāng)前訪問請求的地址,如上文所述。地址多路復(fù)用器440沿信號路徑474從AGU 420中的每一個接收地址。地址多路復(fù)用器440還接收標(biāo)識選擇哪個AGU 420用于當(dāng)前訪問請求的控制信號(未示出)。如果控制信號標(biāo)識AGU420 (0),那么地址多路復(fù)用器440將由AGU 420 (O)所生成的地址發(fā)送到LI高速緩存320。如果控制信號標(biāo)識AGU 420 (N),那么地址多路復(fù)用器440將由AGU 420 (N)所生成的地址發(fā)送到LI高速緩存320。
[0070]當(dāng)公用資源訪問請求是將數(shù)據(jù)存儲到公用資源的請求時,寫數(shù)據(jù)多路復(fù)用器450從與當(dāng)前訪問請求相對應(yīng)的分派單元414選擇寫數(shù)據(jù)并將所選擇的寫數(shù)據(jù)發(fā)送到LI高速緩存320。當(dāng)當(dāng)前訪問請求是存儲操作時,SM分區(qū)410內(nèi)的每個分派單元生成用于當(dāng)前訪問請求的寫數(shù)據(jù)。寫數(shù)據(jù)多路復(fù)用器450沿信號路徑476從分派單元414中的每一個接收寫數(shù)據(jù)。寫數(shù)據(jù)多路復(fù)用器450還接收標(biāo)識選擇哪個SM分區(qū)410用于當(dāng)前訪問請求的控制信號(未示出)。如果控制信號標(biāo)識SM分區(qū)410 (0),那么寫地址多路復(fù)用器450將由SM分區(qū)410 (O)所生成的寫數(shù)據(jù)發(fā)送到LI高速緩存320。如果控制信號標(biāo)識SM分區(qū)410(N),那么寫數(shù)據(jù)多路復(fù)用器450將由SM分區(qū)410 (N)所生成的寫數(shù)據(jù)發(fā)送到LI高速緩存320。
[0071]仲裁單元455從分區(qū)410和其他客戶端接收公用資源訪問請求并將所選擇的訪問請求發(fā)送到公用資源用于服務(wù),該公用資源諸如LI高速緩存存儲器460。該仲裁接收由地址多路復(fù)用器440所選擇的地址以及來自其他請求對公用資源進(jìn)行訪問的客戶端的地址。仲裁單元455將與所選擇的訪問請求相關(guān)聯(lián)的地址路由到LI高速緩存存儲器460。同樣地,針對將數(shù)據(jù)存儲到存儲器中的訪問請求,仲裁單元455將與所選擇的訪問請求相關(guān)聯(lián)的寫數(shù)據(jù)路由到LI高速緩存存儲器460。另外,仲裁單元455沿信號路徑478將仲裁狀態(tài)信息發(fā)送到TOQ 430。
[0072]位于LI高速緩存320內(nèi)的LI高速緩存存儲器460,是對SM分區(qū)410和其他外部客戶端可訪問的示例性的公用資源。LI高速緩存存儲器460包括對公用資源訪問請求可訪問以存儲或加載數(shù)據(jù)的存儲器位置。LI高速緩存存儲器460從仲裁單元455接收地址和控制信號。LI高速緩存存儲器460從仲裁單元455接收與存儲訪問請求相關(guān)聯(lián)的寫數(shù)據(jù),并將與加載訪問請求相關(guān)聯(lián)的讀數(shù)據(jù)發(fā)送到讀數(shù)據(jù)多路分配器465。如下文進(jìn)一步所述,LI高速緩存存儲器460沿信號路徑482將與LI高速緩存請求相關(guān)聯(lián)的狀態(tài)發(fā)送到TOQ 430并且沿路徑484發(fā)送資源狀態(tài)。LI高速緩存存儲器460沿信號路徑486從TOQ 430接收保留計數(shù)。
[0073]當(dāng)公用資源訪問請求是從公用資源加載數(shù)據(jù)的請求時,讀數(shù)據(jù)多路復(fù)用器465將讀數(shù)據(jù)從LI高速緩存存儲器460發(fā)送到請求加載訪問請求的客戶端。請求單元可以是SM分區(qū)410或另一個LI高速緩存客戶端。讀數(shù)據(jù)多路復(fù)用器465接收標(biāo)識選擇哪個SM分區(qū)410用于當(dāng)前加載訪問請求的控制信號(未示出)。如果控制信號標(biāo)識SM分區(qū)410 (0),那么讀數(shù)據(jù)多路復(fù)用器465將由LI高速緩存存儲器460所生成的讀數(shù)據(jù)發(fā)送到SM分區(qū)410(O)。如果控制信號標(biāo)識SM分區(qū)410 (N),那么讀數(shù)據(jù)多路復(fù)用器465將由LI高速緩存存儲器460所生成的讀數(shù)據(jù)沿信號路徑480發(fā)送到SM分區(qū)410 (N)。
[0074]如結(jié)合圖9進(jìn)一步所述,TOQ 430配置為以公平并且避免優(yōu)先級反轉(zhuǎn)的方式,基于未被阻止等待公用資源的最早的訪問請求來選擇重演操作以執(zhí)行。如所示,TOQ 430包括TOQ條目緩沖區(qū)432,配置為存儲與SM分區(qū)410內(nèi)的每個RIB條目相對應(yīng)的TOQ條目。如結(jié)合圖6A-6B進(jìn)一步所述,當(dāng)接收新訪問請求時TOQ 430在TOQ條目緩沖區(qū)432內(nèi)創(chuàng)建TOQ條目,并且基于訪問請求的完成而收回TOQ條目。TOQ條目緩沖區(qū)432的大小基于SM分區(qū)410的數(shù)目和每個RIB416中的RIB條目的數(shù)目。例如,在SM 310包括‘P,個SM分區(qū)410、并且每個SM分區(qū)410包括RIB 416、該RIB 416包括‘B,個RIB條目的情況下,TOQ條目緩沖區(qū)432可包括PXB個RIB條目。這樣,每個TOQ條目與RIB 416中的相應(yīng)條目成對(paired)。
[0075]TOQ條目緩沖區(qū)432內(nèi)的每個TOQ條目包括多個字段,包括但不限于,相關(guān)聯(lián)的訪問請求的年齡、發(fā)起訪問請求的SM分區(qū)410或其他客戶端的身份、包括重演操作信息的RIB的身份、與訪問請求相關(guān)聯(lián)的公用資源和資源狀態(tài)、與訪問請求相關(guān)聯(lián)的喚醒條件??墒褂霉募夹g(shù)諸如經(jīng)由優(yōu)先級方案、最近最少使用、或最近最少分配的方法來明確記錄訪問請求的年齡。如結(jié)合圖10進(jìn)一步所述,年齡可通過在諸如TOQ條目緩沖區(qū)432的存儲隊列內(nèi)的公用資源訪問請求的到達(dá)時間和位置來加以暗示,如結(jié)合圖4-5所述。可替代地,年齡可通過與在諸如TOQ條目緩沖區(qū)432的存儲隊列內(nèi)的公用資源訪問請求相關(guān)聯(lián)的重演操作的到達(dá)時間和位置來加以暗示。
[0076]可關(guān)于與TOQ條目相關(guān)聯(lián)的訪問請求來描述公用資源的狀態(tài)。如結(jié)合圖8進(jìn)一步所述,可通過依照相應(yīng)TOQ條目中所記錄的情況來更新公用資源的狀態(tài)而將公用資源分配到訪問請求。例如,公用資源的狀態(tài)可指示公用資源不被訪問請求所需要。在另一個示例中,公用資源可能被訪問請求所需要,但已經(jīng)分配到訪問請求。在另一個示例中,公用資源可能被訪問請求所需要,但尚未分配到訪問請求。在另一個示例中,公用資源可能被分成多個部分,諸如高速緩存行,其中當(dāng)前使用集合代表一個或多個高速緩存行的組、或使用路代表給定集合內(nèi)的特定高速緩存行。在又一個示例中,資源可被鎖定,并且集合或路在使用中。如結(jié)合圖7進(jìn)一步所述,可依照公用資源的狀態(tài)條件的改變來常規(guī)地更新TOQ條目的公用資源狀態(tài)字段。[0077]在所需要的資源還未被分配、鎖定、或在使用中的情況下,TOQ 430確定資源短缺是否是短期或暫時的條件還是長期條件。具有短期或暫時資源沖突的訪問請求適格于立即執(zhí)行或在有限延遲之后的執(zhí)行。具有長期或不確定的資源短缺的訪問請求可被置于睡眠態(tài)中。如結(jié)合圖11進(jìn)一步所述,TOQ 430可在發(fā)生某些喚醒條件時喚醒睡眠的訪問請求。與睡眠態(tài)中的訪問請求相對應(yīng)的TOQ條目可指定這些喚醒條件中的一個或多個,諸如:資源對于分配是可用的、資源已解鎖、或高速緩存類資源的所需要的集合或路已不在使用中。
[0078]正在睡眠的TOQ條目在等待一個或多個喚醒條件。一旦喚醒條件發(fā)生,則TOQ 430可選擇單個睡眠的TOQ條目用于喚醒或可將喚醒操作廣播到多個睡眠的條目。例如,在資源是配置為一次遞送一個數(shù)據(jù)值的先入先出存儲器(FIFO)的情況下,TOQ 430可喚醒正等待FIFO成為可用的單個TOQ條目。在另一個示例中,TOQ 430可將喚醒操作廣播到等待相同高速緩存行以用數(shù)據(jù)填充的多個TOQ條目。在這種情況下,高速緩存行是可滿足所有在等待高速緩存行成為可用的同時被置于睡眠的TOQ條目的資源。在一些情況下,可存在對其而言不需要喚醒條件的TOQ條目。這種TOQ條目適格于立即被選擇用于重演操作,并且如果造成公用資源沖突的條件是暫時或短期的性質(zhì)那么這種TOQ條目是適當(dāng)?shù)摹?br>
[0079]在一個實施例中,在每個執(zhí)行周期期間,TOQ 430選擇最早的適格訪問請求用于一個或多個重演操作。適格訪問請求是已被分配所有所需要的資源并已滿足所有喚醒條件的訪問請求。睡眠態(tài)中的訪問請求不適格用于選擇。TOQ 430基于為適格的TOQ條目所發(fā)現(xiàn)的總重演操作節(jié)拍(beat)、所請求的經(jīng)預(yù)調(diào)度的重演操作的數(shù)目、以及所請求的按需(on-demand)重演操作的數(shù)目來針對該條目請求重演操作。節(jié)拍包括與特定公用資源訪問請求相關(guān)聯(lián)的一個或多個重演操作。
[0080]當(dāng)公用資源訪問請求被初始分派用于執(zhí)行時,并且假定請求未被SM310或仲裁單元455先占,那么重演操作計數(shù)器(未示出)設(shè)置為零,并根據(jù)從AGU 420和LI高速緩存存儲器460所接收的請求狀態(tài)來初始化總節(jié)拍發(fā)現(xiàn)計數(shù)器(未示出)。如果訪問請求包括經(jīng)預(yù)調(diào)度的重演操作,那么TOQ 430累積與經(jīng)預(yù)調(diào)度的重演操作相關(guān)聯(lián)的節(jié)拍。如果訪問請求由于經(jīng)調(diào)度的重演操作而未完成,那么TOQ 430隨后累積與按需重演操作相關(guān)聯(lián)的節(jié)拍。
[0081]應(yīng)理解的是,TOQ 430可能易受死鎖或活鎖條件影響。例如,如果兩個訪問請求中的每一個要求兩個公用資源、每個訪問請求被分配兩個資源之一、并且每個訪問請求被置于等待另一個資源變成可用的睡眠條件中,那么死鎖發(fā)生。在這種情況下,兩個訪問請求均不能獲得附加的資源,并且訪問請求可能持久地留在睡眠態(tài)中。在另一個示例中,當(dāng)所需要的資源變成可用時,睡眠的訪問請求可能被置于喚醒態(tài)中,并且資源可被指派到第二訪問請求。然而,第二訪問請求可能正等待另一個資源,并且因此可能被置回睡眠態(tài)中。其他等候公用資源的訪問請求可同樣被置于喚醒態(tài)中、被分配與公用資源相關(guān)聯(lián)的端口、以及被置回睡眠態(tài)中。該過程可繼續(xù),直到公用資源的所有端口由睡眠的請求所消耗、并且公用資源對任何活動的訪問請求不可用為止。
[0082]當(dāng)一個或多個訪問請求需要相同公用資源、并且到公用資源的所有訪問端口已分配到其他請求時,死鎖條件可能特別明顯。這種公用資源可稱作稀缺資源。在一個實施例中,TOQ 430可具有當(dāng)資源處于稀缺供應(yīng)時管理資源的機(jī)制。當(dāng)公用資源被視為稀缺資源時,對稀缺資源的優(yōu)先級訪問權(quán)限可給予現(xiàn)有的較老的TOQ條目和任何相關(guān)聯(lián)的經(jīng)預(yù)調(diào)度的重演操作,而非給予與最近所分派的訪問請求相關(guān)聯(lián)的較年輕的TOQ條目。在至少一個實施例中,如果至少一個訪問請求當(dāng)前在睡眠態(tài)中等待資源變成可用,那么公用資源可被認(rèn)為是稀缺資源。可變成稀缺的資源的示例包括但不限于,先入先出(FIFO)存儲器、高速緩存類存儲器中的特定集合和路、或高速緩存類存儲器的特定集合中的任何路。一旦公用資源被確定是稀缺資源,那么TOQ 430可能不發(fā)送廣播的喚醒操作。當(dāng)資源被認(rèn)為是稀缺的時,TOQ 430可使用單個喚醒操作而非廣播的喚醒操作來將資源指派到單獨的訪問請求。TOQ 430可使用TOQ條目的年齡來將稀缺資源分配到睡眠的TOQ條目,其中年齡可以是TOQ條目緩沖區(qū)432內(nèi)的TOQ條目的位置。一旦所指派的訪問請求完成執(zhí)行,則稀缺資源可變成可用,并可被指派到另一個訪問請求。一旦公用資源不再被認(rèn)為是稀缺的,也就是說,沒有睡眠的訪問請求正在等待資源,則TOQ 430可恢復(fù)發(fā)送與資源相關(guān)聯(lián)的廣播的喚醒操作。
[0083]在某些條件下,通過允許從較年輕的TOQ條目“竊取”由較老的TOQ條目所需要的、并且當(dāng)前分配到較年輕的TOQ條目的公用資源,可解決死鎖條件。如果這兩個TOQ條目均需要多個資源,那么這兩個條目均不會被分配所需要的資源的全部。在一個示例中,隨著各種條件貫穿訪問請求的執(zhí)行周期而演進(jìn),因此由訪問請求所需要的公用資源的集合可隨時間改變。較老的TOQ條目可能要求兩個資源,標(biāo)識為A和B,其中僅B分配到訪問請求。較老的TOQ條目將被置于睡眠態(tài)中等待資源A。當(dāng)較老的TOQ條目在睡眠態(tài)中的同時,較年輕的TOQ條目可要求公用資源B和C,但僅資源C被分配。較年輕的資源可被置于睡眠態(tài)中等待資源B。一旦醒來,較老的TOQ條目可發(fā)現(xiàn)TOQ條目現(xiàn)在要求當(dāng)前分配到較年輕的TOQ條目的資源C。較老的TOQ條目和較年輕的TOQ條目二者均正在等候分配到其他TOQ條目的公用資源的分配。解決這類死鎖條件的一個方法是允許較老的TOQ條目從較年輕的TOQ條目“竊取”所需要的公用資源。
[0084]在一個實施例中,TOQ 430可采用虛擬竊取,其中即使在不是所有所需要的資源已被分配的情況下也可選擇較老的TOQ條目用于一個或多個重演操作。在重演操作的執(zhí)行期間,相關(guān)聯(lián)的訪問請求可消耗為較年輕的條目所保留的資源。資源保留可能并未被綁定到較年輕的TOQ條目,所以較老的條目可能能夠采集所有所需要的資源以取得進(jìn)展。一旦較老的TOQ條目取得進(jìn)展,則相關(guān)聯(lián)的訪問請求就可釋放所需要的資源,從而允許公用資源分配到較年輕的TOQ條目。
[0085]在另一個實施例中,TOQ 430可采用物理竊取,其中特定資源可從特定TOQ條目中被竊取并分配到要求該資源的較老的TOQ條目。在這種情況下,由較年輕的TOQ條目所需要的資源的狀態(tài)可從被分配狀態(tài)修改到非被分配狀態(tài),并且針對較老的TOQ條目,資源的狀態(tài)可轉(zhuǎn)變到被分配態(tài)。一旦較老的TOQ條目取得充分進(jìn)展,則相關(guān)聯(lián)的請求就釋放被分配的資源,從而允許較年輕的TOQ條目獲得所需要的資源。
[0086]在各種實施例中,一旦發(fā)現(xiàn)資源沖突可立即觸發(fā)資源竊取,或在發(fā)現(xiàn)沖突之后可將資源竊取延遲固定的或可變的時間段。資源竊取可被限制到最老的TOQ條目,其中最老的TOQ條目竊取所有所需要的、未被分配的資源。在這種情況下,可能潛在地消耗由最老的TOQ條目所需要的資源的所有其他訪問請求被推遲,直到在最老的TOQ條目上取得某個進(jìn)展為止。
[0087]公用資源的各種配置可預(yù)期在本發(fā)明的范圍內(nèi)。在一個實施例中,由TOQ 430所管理的一些訪問請求可具有多個處理階段,其中由每個階段所可能需要的資源可變化。在一個示例中,訪問請求包括可能屬于不同地址空間的線程,其中可由更通用的存儲器層級的高速緩存級別部分來滿足一個地址空間,并且可由不包括在通用存儲器層級中的獨立局部存儲器來滿足另一個地址空間。在另一個實施例中,訪問請求可在相鄰的存儲器位置中選擇操作數(shù)的序列,其中可針對每個線程來訪問操作數(shù)的不同序列。
[0088]圖5示出根據(jù)本發(fā)明的一個實施例的、圖4的TOQ 430內(nèi)的TOQ條目老化單元500。如所示,TOQ條目老化單元500包括請求狀態(tài)分布單元510、資源狀態(tài)分布單元520、TOQ條目緩沖區(qū)432、所保留條目計數(shù)器550、以及優(yōu)先級選擇器560。
[0089]請求狀態(tài)分布單元510將關(guān)于公用資源訪問請求的狀態(tài)分布到TOQ條目緩沖區(qū)432。請求狀態(tài)分布單元510沿信號路徑472從AGU 420接收地址生成單元請求狀態(tài)、沿信號路徑478從仲裁單元455接收仲裁狀態(tài)、以及沿信號路徑482從LI高速緩存存儲器460接收LI高速緩存請求狀態(tài)。請求狀態(tài)分布單元510隨后將來自這三個單元的請求狀態(tài)信息發(fā)送到TOQ條目緩沖區(qū)432中的每個TOQ條目單元格(cel I) 540。狀態(tài)信息反過來存儲在每個TOQ條目單元格540內(nèi)的適當(dāng)?shù)奈恢弥小?br>
[0090]資源狀態(tài)分布單元520將關(guān)于公用資源的狀態(tài)分布到TOQ條目緩沖區(qū)432。資源狀態(tài)分布單元520沿信號路徑484從LI高速緩存存儲器460接收LI高速緩存資源狀態(tài)。資源狀態(tài)分布單元520隨后將資源狀態(tài)信息發(fā)送到TOQ條目緩沖區(qū)432中的每個TOQ條目單元格540。狀態(tài)信息反過來存儲在每個TOQ條目單元格540內(nèi)的適當(dāng)?shù)奈恢弥小?br>
[0091]TOQ條目緩沖區(qū)432包括用于每個SM分區(qū)410內(nèi)的RIB 416中的每個條目的TOQ條目單元格540。TOQ條目緩沖區(qū)432在圖左側(cè)創(chuàng)建與從SM分區(qū)410所接收的新訪問請求相關(guān)聯(lián)的TOQ條目。隨著TOQ條目老化,TOQ條目緩沖區(qū)432將TOQ條目單元格540向右移位。如所示,TOQ條目緩沖區(qū)432包括TOQ條目單元格540和TOQ多路復(fù)用器530。
[0092]隨著從SM分區(qū)410接收新訪問請求,TOQ多路復(fù)用器530選擇TOQ條目單元格540是再循環(huán)TOQ條目緩沖區(qū)432的當(dāng)前態(tài),還是將TOQ條目單元格540向右移位。為再循環(huán)TOQ條目單元格540,TOQ多路復(fù)用器530沿由580584588所例示的信號路徑選擇再循環(huán)路徑。為移位TOQ條目單元格540,TOQ多路復(fù)用器530沿由582 586 590所例示的信號路徑選擇移位路徑。
[0093]TOQ條目單元格540配置為存儲與從SM分區(qū)所接收的公用資源訪問請求有關(guān)的信息。用分別來自請求狀態(tài)分布單元510和資源狀態(tài)分布單元520的請求狀態(tài)和資源狀態(tài)的改變來更新TOQ條目單元格540。最初,TOQ條目單元格540和相關(guān)聯(lián)的TOQ多路復(fù)用器530配置為再循環(huán)。TOQ條目單元格[O]的當(dāng)前態(tài)沿信號路徑580再循環(huán)、TOQ條目單元格[I]的當(dāng)前態(tài)沿信號路徑584再循環(huán)、以及TOQ條目單元格[2]的當(dāng)前態(tài)沿信號路徑588再循環(huán)。當(dāng)從SM分區(qū)接收新訪問請求時,TOQ條目單元格[O]配置為沿信號路徑582接收并存儲與新訪問請求相關(guān)聯(lián)的TOQ條目。如果TOQ條目單元格[O]的當(dāng)前態(tài)指示無效TOQ條目,那么剩余TOQ條目單元格540再循環(huán)。然而,如果TOQ條目單元格[O]標(biāo)記為有效TOQ條目,那么TOQ條目被移位到下一個TOQ條目單元格540。在這種情況下,TOQ條目單元格[I]沿信號路徑586接收存儲在TOQ條目單元格[O]中的TOQ條目。如果TOQ條目單元格
[I]的當(dāng)前態(tài)指示無效TOQ條目,那么剩余TOQ條目單元格540再循環(huán)。然而,如果TOQ條目單元格[I]標(biāo)記為有效TOQ條目,那么TOQ條目被移位到下一個TOQ條目單元格540。在這種情況下,TOQ條目單元格[2]沿信號路徑590接收存儲在TOQ條目單元格[I]中的TOQ條目。過程繼續(xù),直到找到無效(空)TOQ條目單元格540為止。[0094]所保留條目計數(shù)器550分析被標(biāo)記為有效的TOQ條目單元格540并針對由至少一個有效TOQ條目所需要的每個公用資源來確定保留計數(shù)。針對給定資源的保留計數(shù)等于要求資源的被標(biāo)記為有效的TOQ條目單元格540的數(shù)目。所保留條目計數(shù)器550將保留計數(shù)發(fā)送到相應(yīng)公用資源中的每一個,諸如LI高速緩存存儲器460。
[0095]優(yōu)先級選擇器560選擇與給定SM分區(qū)410中的RIB 416相關(guān)聯(lián)的TOQ條目用于服務(wù)。一般地,優(yōu)先級選擇器560選擇既被標(biāo)記為有效又已保留所有所需要的資源以完成執(zhí)行的、最右邊的TOQ條目單元格540中的TOQ條目。注意,所選擇的TOQ條目可以不必然存儲在最右邊的被標(biāo)記為有效的TOQ條目單元格540中。因此,空TOQ條目單元格540或洞(hole)可出現(xiàn)在一組有效TOQ條目單元格540的中間。隨著從SM分區(qū)410接收新訪問請求,這些洞可被填充。優(yōu)先級選擇器560對SM分區(qū)410發(fā)送RIB讀請求并請求收回RIB。
[0096]注意,可采用替代技術(shù)來移動TOQ條目塊而非如上所述使用移位寄存器方法。另外,與TOQ條目相關(guān)聯(lián)的靜態(tài)信息,諸如不與睡眠和喚醒條件直接有關(guān)的字段,可存儲在TOQ條目單元格540內(nèi),或存儲在諸如靜態(tài)存儲器的單獨存儲器結(jié)構(gòu)內(nèi)。
[0097]圖6A和6B闡述根據(jù)本發(fā)明的一個實施例的、用于將公用資源訪問請求添加到全序隊列430的方法步驟的流程圖。雖然結(jié)合圖1-5的系統(tǒng)描述了方法步驟,但本領(lǐng)域的普通技術(shù)人員應(yīng)理解的是,配置為以任何順序?qū)嵤┓椒ú襟E的任何系統(tǒng)均在本發(fā)明的范圍內(nèi)。
[0098]如所示,方法600在步驟602開始,其中TOQ 430接收與公用資源相關(guān)聯(lián)的訪問請求。在步驟604,T0Q 430確定訪問請求是否是重演操作請求。如果訪問請求不是重演操作請求,那么訪問請求是新請求,并且方法600前進(jìn)到步驟606,其中TOQ 430遞增用于由訪問請求所需要的每個公用資源的所保留的計數(shù)。在步驟608,T0Q 430確定由訪問請求所需要的公用資源是否可用于分配到請求。如果公用資源可用于分配,那么方法600前進(jìn)到步驟610,其中TOQ 430遞減用于由訪問請求所需要的每個公用資源的所保留的計數(shù)。
[0099]在步驟612,T0Q 430確定訪問請求是否準(zhǔn)備好完成。如果沒有為了完成請求的剩余工作,并且請求已由LI高速緩存320所接受,那么訪問請求準(zhǔn)備好完成。如果訪問請求準(zhǔn)備好完成,那么方法600前進(jìn)到步驟614,其中TOQ 430完成請求。訪問與TOQ條目相對應(yīng)的RIB條目以完成請求。RIB條目包括與用于完成一個或多個重演操作的訪問請求相關(guān)聯(lián)的執(zhí)行信息。在步驟616,TOQ 430收回與訪問請求相關(guān)聯(lián)的TOQ和RIB條目,如果有的話。方法600隨后終止。
[0100]現(xiàn)在返回步驟604,如果訪問請求是重演操作請求,那么方法600前進(jìn)到步驟622,其中TOQ 430確定與訪問請求相關(guān)聯(lián)的TOQ條目是否指示每個所需要的公用資源是可用的或者先前已被保留。如果每個所需要的公用資源是可用的或者已被保留,那么方法600返回步驟610,如上文所述。如果在步驟622,至少一個所需要的公用資源是不可用的或者尚未被保留,那么方法600前進(jìn)到步驟624,其中TOQ 430確定是否可從另一個訪問請求竊取不可用的或先前所保留的公用資源。如果可竊取公用資源,那么方法600返回步驟610,如上文所述。如果不可竊取公用資源,那么方法600前進(jìn)到步驟626,其中TOQ 430保留由訪問請求所需要的并且可用的公用資源。TOQ 430用該信息更新TOQ條目。在步驟628,TOQ430將TOQ條目置于睡眠。方法600隨后終止。
[0101]現(xiàn)在返回步驟608,如果由訪問要求所需要的一個或多個公用資源不可用于分配,那么方法600前進(jìn)到步驟630,其中TOQ 430將TOQ條目分配到該訪問請求。在這種情況下,訪問請求的服務(wù)被延遲。在步驟632,T0Q430確定訪問請求是否正錯過任何長期資源。如果訪問請求正錯過任何長期資源,那么方法600返回步驟626,如上文所述。如果訪問請求并未正錯過任何長期資源,那么方法600前進(jìn)到步驟634,其中TOQ 430將與訪問請求相關(guān)聯(lián)的TOQ條目加標(biāo)簽為可用于重演。方法600隨后終止。
[0102]現(xiàn)在返回步驟612,如果訪問請求不能完成,那么方法600前進(jìn)到步驟618,其中TOQ 430完成訪問請求的一個節(jié)拍。節(jié)拍包括與特定公用資源訪問請求相關(guān)聯(lián)的一個或多個重演操作。訪問與TOQ條目相對應(yīng)的RIB條目以完成請求。RIB條目包括與用于完成包括在節(jié)拍中的一個或多個重演操作的訪問請求相關(guān)聯(lián)的執(zhí)行信息。在步驟620,T0Q 430保持與訪問請求相關(guān)聯(lián)的TOQ和RIB條目,如果有的話。方法600隨后終止。
[0103]一旦針對相關(guān)聯(lián)的公用資源訪問請求創(chuàng)建TOQ條目,則TOQ 430可隨著由TOQ條目所需要的公用資源的狀態(tài)的改變來更新TOQ條目。
[0104]圖7是根據(jù)本發(fā)明的一個實施例的、用于更新公用資源的狀態(tài)的方法步驟的流程圖。雖然結(jié)合圖1-5的系統(tǒng)描述了方法步驟,但本領(lǐng)域的普通技術(shù)人員應(yīng)理解的是,配置為以任何順序?qū)嵤┓椒ú襟E的任何系統(tǒng)均在本發(fā)明的范圍內(nèi)。
[0105]如所示,方法700在步驟702開始,其中TOQ 430接收針對由一個或多個TOQ條目所需要的公用資源的經(jīng)更新的狀態(tài)。在步驟704,TOQ 430確定狀態(tài)更新是否指示公用資源可用。如果公用資源不可用,那么方法700終止。
[0106]然而,如果公用資源可用那么方法700前進(jìn)到步驟706,其中TOQ 430計算TOQ索引用于最高編號的TOQ條目,其中較高編號的TOQ條目代表比較低編號的TOQ條目更老的訪問請求。在步驟708,TOQ 430確定由索引所引用的TOQ條目是否是有效TOQ條目。如果相關(guān)聯(lián)的訪問請求已完成并且TOQ條目已被隨后收回,那么TOQ條目無效。如果TOQ條目不是有效的,那么方法700前進(jìn)到步驟710,其中TOQ 430遞減索引。在步驟712,TOQ 430確定索引大于或等于零。如果索引不大于或等于零,那么整個TOQ已被掃描,并且方法700終止。
[0107]在步驟712,如果索引大于或等于零,那么方法700返回步驟708,如上文所述。在步驟708,如果TOQ條目有效,那么方法700前進(jìn)到步驟714,其中TOQ 430確定由索引所引用的TOQ條目是否要求其狀態(tài)已改變的公用資源。如果TOQ條目不需要資源,那么方法700返回步驟710,如上文所述。然而,如果TOQ條目確實需要資源,那么方法700前進(jìn)到步驟716,其中TOQ 430將資源標(biāo)記為分配到與索引相關(guān)聯(lián)的TOQ條目。在步驟718,TOQ 430確定公用資源是否仍可用。如果公用資源仍可用,那么方法700返回步驟710,如上文所述。在這種情況下,在在先的分配之后公用資源仍可用,并且仍可分配到附加的TOQ條目。如果公用資源不再可用,那么方法700終止。
[0108]如上文結(jié)合圖6A-6B所述,TOQ條目可被置于掛起有待一個或多個所需要的公用資源的可用性的睡眠中。一旦所需要的公用資源變成可用,則TOQ 430喚醒TOQ條目將TOQ條目置于活動態(tài),以便相關(guān)聯(lián)的訪問請求可繼續(xù)執(zhí)行。
[0109]圖8是根據(jù)本發(fā)明的一個實施例的、用于將公用資源分配到與公用資源訪問請求相關(guān)聯(lián)的TOQ條目的方法步驟的流程圖。雖然結(jié)合圖1-5的系統(tǒng)描述了方法步驟,但本領(lǐng)域的普通技術(shù)人員應(yīng)理解的是,配置為以任何順序?qū)嵤┓椒ú襟E的任何系統(tǒng)均在本發(fā)明的范圍內(nèi)。[0110]如所示,方法800在步驟802開始,其中TOQ 430確定與所指定的索引相關(guān)聯(lián)的TOQ條目是否是有效TOQ條目。如果相關(guān)聯(lián)的訪問請求已完成并且TOQ條目已被隨后收回,那么TOQ條目無效。如果TOQ條目不是有效的,那么方法800終止。
[0111]如果TOQ條目有效,那么方法800前進(jìn)到步驟804,其中TOQ 430接收針對由TOQ條目所需要的公用資源的經(jīng)更新的狀態(tài)。在步驟806,T0Q430確定公用資源的狀態(tài)是否等于NOT NEEDED (不被需要),其中NOT NEEDED指示公用資源不被TOQ條目所需要。在這種情況下,對TOQ條目不需要加以改變。方法800前進(jìn)到步驟816,其中TOQ 430確定TOQ條目是否正在等待附加的資源。如果TOQ條目不是正在等待附加的資源,那么方法800終止。如果TOQ條目正在等待附加的資源,那么方法800返回步驟804,如上文所述。
[0112]現(xiàn)在返回步驟806,如果公用資源的狀態(tài)不等于NOT NEEDED,那么方法800前進(jìn)到步驟808,其中TOQ 430確定公用資源的狀態(tài)是否等于NEEDED AND ALLOCATED (被需要和被分配)。NEEDED AND ALLOCATED狀態(tài)指示公用資源被TOQ條目所需要,并已經(jīng)分配到TOQ條目。在這種情況下,不需要對TOQ條目加以改變。方法800前進(jìn)到步驟816,如上文所述。
[0113]現(xiàn)在返回步驟808,如果公用資源的狀態(tài)不等于NEEDED AND ALLOCATED,那么方法800前進(jìn)到步驟810,其中TOQ 430確定公用資源的狀態(tài)是否等于SET/WAY IN USE ANDLOCKED (集合/路在使用中并且被鎖定)。SET/WAY IN USE AND LOCKED狀態(tài)指示TOQ條目因為公用資源被TOQ條目所需要、但公用資源的所需要的集合或路在使用中并且資源被鎖定而被置于睡眠。在這種情況下,方法800前進(jìn)到步驟818,其中TOQ 430確定資源是否現(xiàn)在被解鎖。如果資源未被解鎖,那么方法800前進(jìn)到步驟816,如上文所述。如果資源被解鎖,那么方法800前進(jìn)到步驟820,其中TOQ 430確定公用資源的集合和路是否現(xiàn)在可用。如果集合和路不可用,那么方法800前進(jìn)到步驟816,如上文所述。如果集合和路可用,那么方法800前進(jìn)到步驟822,其中TOQ 430確定資源是否可用。如果資源不可用,那么方法800前進(jìn)到步驟816,如上文所述。如果資源可用,那么方法800前進(jìn)到步驟824,其中TOQ430將資源的狀態(tài)設(shè)置為NEEDED AND ALLOCATED,這指示公用資源現(xiàn)在被分配到由索引所引用的TOQ條目。方法800隨后前進(jìn)到步驟816,如上文所述。
[0114]現(xiàn)在返回步驟810,如果公用資源的狀態(tài)不等于SET/WAY IN USE AND LOCKED,那么方法800前進(jìn)到步驟812,其中TOQ 430確定公用資源的狀態(tài)是否等于SET/WAY IN USE(集合/路在使用中)。SET/WAY INUSE狀態(tài)指示TOQ條目因為公用資源被TOQ條目所需要、但公用資源的所需要的集合或路在使用中而被置于睡眠。在這種情況下,方法800前進(jìn)到步驟820,如上文所述,以確定資源以及集合和路是否現(xiàn)在可用。
[0115]現(xiàn)在返回步驟812,如果公用資源的狀態(tài)不等于SET/WAY IN USE,那么方法800前進(jìn)到步驟814,其中TOQ 430確定公用資源的狀態(tài)是否等于NEEDED BUT NOT AVAILABLE(被需要但不可用)。NEEDED BUT NOT AVAILABLE狀態(tài)指示TOQ條目因為公用資源被TOQ所需要、但資源不可用而被置于睡眠。在這種情況下,方法800前進(jìn)到步驟822,如上文所述,以確定資源是否現(xiàn)在可用。
[0116]現(xiàn)在返回步驟814,如果公用資源的狀態(tài)不等于NEEDED BUT NOT AVAILABLE,那么方法800前進(jìn)到步驟816,如上文所述。
[0117]一旦TOQ是醒著的以及活動的,TOQ 430可選擇TOQ用于一個或多個重演操作以便相關(guān)聯(lián)的訪問請求可恢復(fù)執(zhí)行。[0118]圖9是根據(jù)本發(fā)明的一個實施例的、用于選擇全序隊列(T0Q)430中的公用資源訪問請求以服務(wù)的方法步驟的流程圖。雖然結(jié)合圖1-5的系統(tǒng)描述了方法步驟,但本領(lǐng)域的普通技術(shù)人員應(yīng)理解的是,配置為以任何順序?qū)嵤┓椒ú襟E的任何系統(tǒng)均在本發(fā)明的范圍內(nèi)。
[0119]如所示,方法900在步驟902開始,其中TOQ 430初始化索引以指向SM 310內(nèi)的第一分區(qū)。在步驟904,T0Q 430計算TOQ索引用于最高編號的TOQ條目。在步驟906,T0Q430確定由TOQ索引所引用的TOQ條目是否是有效TOQ條目以及由分區(qū)索引所引用的分區(qū)是否是有效分區(qū)。如果相關(guān)聯(lián)的訪問請求已完成并且TOQ條目已隨后被收回,那么TOQ條目無效。如果分區(qū)已被標(biāo)識以執(zhí)行與TOQ條目相關(guān)聯(lián)的訪問請求,那么分區(qū)有效。如果TOQ條目或分區(qū)不是有效的,那么方法900前進(jìn)到步驟908,其中TOQ 430遞減索引。在步驟910,TOQ 430確定索引是否大于或等于零。如果索引大于或等于零,那么方法900返回步驟908,如上文所述。
[0120]如果索引不大于或等于零,那么整個TOQ已被掃描,并且方法900前進(jìn)到步驟916,其中TOQ 430遞增分區(qū)索引。在步驟918,TOQ 430確定分區(qū)索引是否小于分區(qū)數(shù)P。如果分區(qū)索引小于P,那么方法900返回步驟904,如上文所述。如果分區(qū)索引不小于P,那么SM分區(qū)的整個集合已被掃描,并且方法900前進(jìn)到步驟920,其中TOQ 430將任何找到的重演操作請求發(fā)送到各自的SM分區(qū)。方法900隨后終止。
[0121]現(xiàn)在返回步驟906,如果TOQ條目和分區(qū)均有效,那么方法900前進(jìn)到步驟912,其中TOQ 430確定每個公用資源是不被TOQ條目所需要,還是公用資源被TOQ條目所需要并已分配到TOQ條目。如果不是所有所需要的資源已分配到TOQ條目,那么方法900返回步驟908,如上文所述。如果所有所需要的資源已分配到TOQ條目,那么方法900前進(jìn)到步驟914,其中TOQ 430選擇所標(biāo)識的分區(qū)內(nèi)的重演指令緩沖區(qū)以執(zhí)行訪問請求。方法900隨后前進(jìn)到步驟916,如上文所述。
[0122]圖10是根據(jù)本發(fā)明的一個實施例的、用于老化TOQ條目緩沖區(qū)432中的TOQ條目的方法步驟的流程圖。雖然結(jié)合圖1-5的系統(tǒng)描述了方法步驟,但本領(lǐng)域的普通技術(shù)人員應(yīng)理解的是,配置為以任何順序?qū)嵤┓椒ú襟E的任何系統(tǒng)均在本發(fā)明的范圍內(nèi)。
[0123]如所示,方法1000在步驟1002開始,其中TOQ 430接收新公用資源訪問請求。在步驟1004,TOQ 430在TOQ條目緩沖區(qū)432中創(chuàng)建并存儲與訪問請求相對應(yīng)的TOQ條目,其中TOQ緩沖區(qū)中的條目以時間順序存儲??梢酝ㄟ^任何技術(shù)上可行的方式來確定時間順序,任何技術(shù)上可行的方式包括但不限于,經(jīng)由優(yōu)先級方案、最近最少使用、或最近最少分配方法、TOQ條目緩沖區(qū)432內(nèi)的公用資源訪問請求的到達(dá)時間和位置、或通過與TOQ條目緩沖區(qū)432內(nèi)的公用資源訪問請求相關(guān)聯(lián)的重演操作的到達(dá)時間和位置。與新訪問請求相對應(yīng)的TOQ條目可在TOQ條目緩沖區(qū)432中占用與緩沖區(qū)中的最新位置相對應(yīng)的位置。每個TOQ條目在TOQ條目緩沖區(qū)432中移位一個位置直到找到TOQ條目緩沖區(qū)432中的空位置為止。用已有的TOQ條目來填充空位置??瘴恢每梢允荰OQ條目緩沖區(qū)432中的最老的有效TOQ條目??商娲兀谳^新的有效TOQ條目存在于空位置的一側(cè)、并且較老的有效TOQ條目存在于空位置的另一側(cè)的情況下,空位置可以是“氣泡”。在這種情況下,對空位置的填充會填充在TOQ條目緩沖區(qū)432內(nèi)的“氣泡”中。
[0124]在步驟1006, TOQ 430確定由訪問請求所需要的第一公用資源可用于分配。如果第一公用資源不是可用的,那么TOQ等待直到資源變成可用為止。在步驟1006,如果第一公用資源可用,那么方法1000前進(jìn)到步驟1008,其中TOQ 430搜索TOQ條目緩沖區(qū)432以標(biāo)識與訪問請求相對應(yīng)的、等待第一公用資源的TOQ條目的子集。在步驟1010,T0Q 430標(biāo)識TOQ條目的子集內(nèi)的TOQ條目,其中包括第一公用資源的所有所需要的公用資源可用。
[0125]在步驟1012,T0Q 430在TOQ條目的子集中讀取TOQ條目緩沖區(qū)中的最老的條目,其中包括第一公用資源的所有所需要的公用資源可用。該TOQ條目可以是或可以不是TOQ條目緩沖區(qū)432中的最老的有效TOQ條目。在步驟1014,T0Q 430使與在步驟1012中所讀取的TOQ條目相對應(yīng)的RIB條目被讀取到處理管線中,以執(zhí)行訪問請求的一個或多個周期。在步驟1016,TOQ 430確定是否要求附加的周期以便完成訪問請求。如果未要求附加的周期,那么方法1000前進(jìn)到步驟1018,其中TOQ 430收回與訪問請求相對應(yīng)的TOQ條目。TOQ430還可使相應(yīng)的RIB條目被收回。如果正被收回的TOQ條目不是TOQ條目緩沖區(qū)432中的最后的有效請求,那么可在TOQ條目緩沖區(qū)432內(nèi)創(chuàng)建“洞”或“氣泡”,使得有效TOQ條目在氣泡的兩側(cè)均存在。方法1000隨后終止。
[0126]在步驟1016,如果要求附加的周期,那么方法1000前進(jìn)到步驟1020,其中TOQ 430保持與訪問請求相對應(yīng)的TOQ條目。TOQ 430還可使相應(yīng)的RIB條目被保持。方法1000隨后終止。
[0127]圖11是根據(jù)本發(fā)明的一個實施例的、用于將與公用資源訪問請求相關(guān)聯(lián)的TOQ條目從睡眠態(tài)轉(zhuǎn)變到活動態(tài)的方法步驟的流程圖。雖然結(jié)合圖1-5的系統(tǒng)描述了方法步驟,但本領(lǐng)域的普通技術(shù)人員應(yīng)理解的是,配置為以任何順序?qū)嵤┓椒ú襟E的任何系統(tǒng)均在本發(fā)明的范圍內(nèi)。
[0128]如所示,方法1100在步驟1102開始,其中TOQ 430確定公用資源現(xiàn)在可用于分配到訪問請求。在步驟1104,TOQ 430確定TOQ條目緩沖區(qū)432內(nèi)的TOQ條目是否在睡眠態(tài)中,其中當(dāng)公用資源可用時TOQ條目的喚醒條件得到滿足。如果沒有TOQ條目正在等待公用資源,那么方法1100終止。
[0129]在步驟1104,如果一個或多個TOQ條目正在等待公用資源,那么方法前進(jìn)到步驟1106,其中TOQ 430發(fā)出喚醒操作。喚醒操作可作為單個喚醒操作被發(fā)出到特定TOQ條目。可替代地,喚醒操作可廣播到正在等待公用資源的多個TOQ條目。在步驟1108,T0Q 430確定在步驟1106中接收喚醒的TOQ條目是否正在等待保持不可用的其他公用資源。如果TOQ條目并未正在等待其他不可用資源,那么方法1100前進(jìn)到步驟1110,其中TOQ 430允許執(zhí)行訪問請求的一個或多個周期。方法1100隨后終止。
[0130]在步驟1108,如果TOQ條目正在等待其他不可用資源,那么方法1100前進(jìn)到步驟1112,其中TOQ 430確定不可用資源是否在短期或瞬時基礎(chǔ)上不可用。如果資源是短期不可用,那么方法1100前進(jìn)到步驟1110,如上文。如果資源是長期不可用,那么方法1100前進(jìn)到步驟1114,其中TOQ 430確定是否可從另一個TOQ條目竊取不可用資源。如果不可竊取不可用資源,那么方法前進(jìn)到步驟1116,其中TOQ 430將TOQ條目置回到睡眠態(tài)中。方法1100隨后終止。
[0131]在步驟1114,如果可以竊取不可用資源,那么方法1100前進(jìn)到步驟1118,其中TOQ430從其他TOQ條目竊取不可用資源。TOQ 430可經(jīng)由如上文結(jié)合圖4所述的物理竊取或虛擬竊取來竊取資源。在一個示例中,僅在已過去預(yù)定時間量之后才可竊取不可用資源。在另一個示例中,僅最老的有效TOQ條目適格于從其他TOQ條目竊取資源。方法1100隨后前進(jìn)到步驟1110,如上文。
[0132]應(yīng)理解的是,本文所描述的架構(gòu)僅是例示性的,并且變形和修改是可能的。例如,雖然本文所描述的架構(gòu)呈現(xiàn)在流多處理器310的加載存儲單元303的上下文中,但可采用在與包括但不限于中央處理單元(CPU)、通用處理單元(GPU)相聯(lián)合的、訪問公用資源的任何處理單元中或采用在任何其他技術(shù)上可行的計算環(huán)境中。在又一個實施例中,每個RIB416不需要具有同樣數(shù)目的條目,只要TOQ 430配置為跟蹤每個RIB 416內(nèi)的條目。在另一個示例中,在多個SM分區(qū)410和角逐公用執(zhí)行單元的其他客戶端的上下文內(nèi)描述了技術(shù)。然而,在所公開的技術(shù)的上下文內(nèi)支持其他配置,包括但不限于,訪問多個執(zhí)行單元的單個客戶端或訪問多個執(zhí)行單元的多個客戶端??梢砸匀魏渭夹g(shù)上可行的方式,包括但不限于,輪換時間片順序、基于優(yōu)先權(quán)的方法、或動態(tài)加載,來為各種客戶端服務(wù)。在又一個示例中,在為多個SM分區(qū)410和針對公用執(zhí)行單元的其他請求源服務(wù)的集中式控制單元的上下文中描述了所公開的TOQ 430。可替代地,可在每個SM分區(qū)410和客戶端可管理單獨的子TOQ的情況下采用分散式控制,其中每個請求的年齡與每個子TOQ有關(guān)。在這種情況下,可采用全局老化機(jī)制用于選擇性的喚醒操作。
[0133]本文所描述的技術(shù)是關(guān)于公用資源訪問操作來描述的,該公用資源訪問操作諸如在線程跨發(fā)散的高速緩存行來訪問存儲器位置的情況下的跨多個線程的加載和存儲訪問請求。技術(shù)足夠靈活以采用在存在公用資源訪問請求的其他應(yīng)用中。在一個示例中,本文所描述的技術(shù)不限于線程的執(zhí)行,而是可針對可經(jīng)由訪問公用資源的多個功能處理單元進(jìn)行的任何操作來加以采用。在另一個示例中,指令可跨公用資源而非高速緩存內(nèi)的高速緩存行發(fā)散。這種資源可包括但不限于,高速緩存標(biāo)簽、高速緩存數(shù)據(jù)、寄存器庫、以及所共享的存儲器。執(zhí)行公用資源訪問請求的線程可訪問公用資源的不同方面或部分,諸如高速緩存存儲器內(nèi)的不同集合或高速緩存集合內(nèi)的不同路。在又一個示例中,在任何給定的操作期間,LSU 303可檢索多個公用資源,諸如多個高速緩存行。在又一個示例中,給定的公用資源可具有多于一個的同時訪問接口,其中當(dāng)所有可用訪問端口由其他請求者所消耗時拒絕訪問。
[0134]本領(lǐng)域的普通技術(shù)人員應(yīng)理解的是,本文所描述的公用資源配置僅是例示性的,變形和修改是可能的。例如,雖然本文將一些公用資源描述為如在集合關(guān)聯(lián)高速緩存行中典型的具有集合和路,但其他公用資源配置可在所描述的技術(shù)的上下文中以任何組合的方式來加以采用,包括但不限于,直接映射高速緩存(典型地每集合具有一個路)、全關(guān)聯(lián)高速緩存(典型地具有一個集合)、以及扇區(qū)高速緩存。在扇區(qū)高速緩存中,如由集合和路所代表的高速緩存行,可進(jìn)一步再細(xì)分為扇區(qū)。在這種配置中,TOQ 430除通過集合和路跟蹤之外還可通過扇區(qū)來跟蹤公用資源的使用。在另一個示例中,可采用各種高速緩存行替換策略,包括但不限于,最近最少使用(LRU)以及最近最少分配(LRA)方法。
[0135]總而言之,所公開的技術(shù)提供經(jīng)優(yōu)化的方式以在進(jìn)行與重演操作有關(guān)的公用資源訪問請求的調(diào)度中維持公平性和順序。具體地,流多處理器(SM) 310包括全序隊列(TOQ)430,該全序隊列430配置為針對在單個執(zhí)行周期中未完成的訪問請求而通過一個或多個重演操作來調(diào)度訪問請求。如果所有公用資源已分配到訪問請求或是另外可用的,那么允許訪問請求執(zhí)行一個或多個重演操作。如果訪問請求正在等待至少一個長期資源,那么TOQ430將訪問請求置于掛起有待資源的可用性的睡眠態(tài)中。當(dāng)所需要的資源變成可用時,與訪問請求相關(guān)聯(lián)的TOQ條目置于喚醒態(tài)中。根據(jù)訪問請求的年齡和公用資源的狀態(tài)對訪問請求給予優(yōu)先級。當(dāng)兩個或更多個訪問請求死鎖等待相同資源時,TOQ可允許較老的訪問請求從較年輕的資源請求竊取資源,使得每個訪問請求能夠完成執(zhí)行。
[0136]有利地,較新的訪問請求不會反復(fù)地阻止較老的公用資源訪問請求取得進(jìn)展。通過優(yōu)先于對新訪問請求來對已有的較老的訪問請求分配公用資源而避免了優(yōu)先級反轉(zhuǎn)。因為在睡眠態(tài)中的訪問請求不主動角逐公用資源,因此SM 310的資源被更有效率地利用。此外,通過允許較老的TOQ條目竊取分配到較年輕的條目的資源,使得與較老的條目相關(guān)聯(lián)的訪問請求能夠完成執(zhí)行,然后才是與較年輕的條目相關(guān)聯(lián)的訪問請求,從而避免死鎖和活鎖。進(jìn)一步地,甚至在所需要的公用資源的集合在執(zhí)行期間改變的情況下,在調(diào)度訪問請求中的公平性和順序也可得到維持。
[0137]雖然上述內(nèi)容針對本發(fā)明的實施例,但可對本發(fā)明的其他和進(jìn)一步的實施例進(jìn)行設(shè)計而不脫離其基本范圍,并且其范圍可通過接下來的權(quán)利要求來確定。
【權(quán)利要求】
1.一種用于管理針對處理管線中的公用資源的請求的子系統(tǒng),包括: 全序隊列(TOQ),配置為實施以下步驟: 接收針對第一公用資源的第一請求; 確定所述第一公用資源不可用于到請求的分配; 作為響應(yīng),延遲為所述第一請求服務(wù); 繼延遲服務(wù)之后,接收針對所述第一公用資源的第二請求; 繼接收所述第二請求之后,確定所述第一公用資源已變成可用于到請求的分配;以及在使所述第一公用資源對所述第二請求可用以前,使所述第一公用資源對所述第一請求可用。
2.根據(jù)權(quán)利要求1所述的子系統(tǒng),其中所述TOQ進(jìn)一步配置為實施以下步驟:針對所述第一請求在第一緩沖區(qū)中創(chuàng)建第一條目以跟蹤所述第一請求的年齡,其中所述第一條目指示所述第一請求與至少所述第一公用資源相關(guān)聯(lián)。
3.根據(jù)權(quán)利要求2所述的子系統(tǒng),其中所述TOQ進(jìn)一步配置為實施以下步驟:一旦接收所述第二請求,則針對與和所述第一公用資源相關(guān)聯(lián)的請求相對應(yīng)的任何條目來搜索所述第一緩沖區(qū)。
4.根據(jù)權(quán)利要求3所述的子系統(tǒng),其中所述TOQ進(jìn)一步配置為實施以下步驟:經(jīng)由所述第一條目標(biāo)識所述第一請求與所述第一公用資源相關(guān)聯(lián),并且作為響應(yīng),確定所述第一請求應(yīng)在所述第二請求之前被服務(wù)。
5.根據(jù)權(quán)利要求2所述的子系統(tǒng),其中所述TOQ進(jìn)一步配置為實施以下步驟:針對所述第二請求在所述第一緩沖區(qū)中創(chuàng)建第二條目以跟蹤所述第二請求的年齡,其中所述第二條目指示所述第二請求與至少所述第一公用資源相關(guān)聯(lián)。
6.根據(jù)權(quán)利要求5所述的子系統(tǒng),其中所述TOQ進(jìn)一步配置為實施以下步驟:一旦確定所述第一公用資源可用,則針對與和所述第一公用資源相關(guān)聯(lián)的請求相對應(yīng)的任何條目搜索所述第一緩沖區(qū)。
7.根據(jù)權(quán)利要求6所述的子系統(tǒng),其中所述TOQ進(jìn)一步配置為實施以下步驟:經(jīng)由所述第一條目和所述第二條目標(biāo)識所述第一請求和所述第二請求與所述第一公用資源相關(guān)聯(lián)并且所述第一請求老于所述第二請求,以及作為響應(yīng),確定所述第一請求應(yīng)在所述第二請求之前被服務(wù)。
8.根據(jù)權(quán)利要求2所述的子系統(tǒng),其中所述TOQ進(jìn)一步配置為實施以下步驟:使第一條目創(chuàng)建在與所述第一緩沖區(qū)中的所述第一條目相對應(yīng)的重演緩沖區(qū)中,其中所述重演緩沖區(qū)中的所述第一條目包括與用于與所述第一請求相關(guān)聯(lián)的重演操作的所述第一請求相關(guān)聯(lián)的執(zhí)行信息。
9.根據(jù)權(quán)利要求2所述的子系統(tǒng),其中所述第一條目進(jìn)一步包括指示所述第一公用資源的狀態(tài)的信息,并且所述第一公用資源的所述狀態(tài)是,所述第一公用資源被所述第一請求所需要但未分配到所述第一請求,或者所述第一公用資源被鎖定并且對所述第一請求不可用。
10.一種計算設(shè)備,包括: 全序隊列(T0Q),配置為通過實施以下步驟來管理針對處理管線中的公用資源的請求:接收針對第一公用資源的第一請求;確定所述第一公用資源不可用于到請求的分配;作為響應(yīng),延遲為所述第一請求服務(wù);繼延遲服務(wù)之后,接收針對所述第一公用資源的第二請求;繼接收所述第二請求之后,確定所述第一公用資源已變成可用于到請求的分配;以及在使所述第一公用資源對所述第二請求可用以前,使所述第一公用資源對所述第一請求可用。
【文檔編號】G06F9/50GK103559088SQ201310188776
【公開日】2014年2月5日 申請日期:2013年5月21日 優(yōu)先權(quán)日:2012年5月21日
【發(fā)明者】邁克爾·費特曼, 瑟利斯·加德雷, 約翰·H·埃德蒙森, 奧姆卡爾·帕蘭杰佩, 阿杰納·拉杰卓, 埃里克·萊爾·希爾, 拉杰史沃拉·塞爾瓦桑, 查爾斯·麥卡弗, 凱溫·米切爾, 史蒂文·詹姆斯·海因里希 申請人:輝達(dá)公司