国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      通過(guò)標(biāo)記cpu流量為特殊來(lái)避免死鎖的制作方法

      文檔序號(hào):6585755閱讀:116來(lái)源:國(guó)知局
      專利名稱:通過(guò)標(biāo)記cpu流量為特殊來(lái)避免死鎖的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明一般地涉及計(jì)算機(jī)硬件,并更特別地涉及通過(guò)標(biāo)記CPU流量為特殊來(lái)避免 死鎖的方法和系統(tǒng)。
      背景技術(shù)
      常規(guī)的計(jì)算機(jī)系統(tǒng)包括中央處理單元(CPU)且也可以包括已知為并行處理單元 (PPU)的協(xié)處理器。CPU將一定的處理操作卸下給PPU以減少CPU的處理工作量。其中,這 些處理操作包括壓縮和解壓縮操作。當(dāng)CPU需要這些處理操作時(shí),CPU發(fā)出請(qǐng)求給PPU,包 括讀請(qǐng)求和/或?qū)懻?qǐng)求。例如,CPU可能需要將數(shù)據(jù)寫到可能以壓縮的格式存儲(chǔ)的系統(tǒng)存 儲(chǔ)器中。CPU發(fā)送寫請(qǐng)求給PPU,然后PPU可以讀和解壓縮與該寫請(qǐng)求相關(guān)的數(shù)據(jù)并將解壓 縮的和與新數(shù)據(jù)合并的原始數(shù)據(jù)寫到系統(tǒng)存儲(chǔ)器中。有時(shí),CPU發(fā)出的寫請(qǐng)求可能引起PPU發(fā)出必須在初始寫請(qǐng)求能完成之前完成的 一個(gè)或多個(gè)“派生的”讀請(qǐng)求。例如,PPU可以發(fā)出以與CPU相關(guān)的系統(tǒng)存儲(chǔ)器單元為目標(biāo) 的派生的讀請(qǐng)求。當(dāng)讀事務(wù)完成時(shí),系統(tǒng)存儲(chǔ)器發(fā)出讀完成給PPU,這通知PPU該事務(wù)完成。但是,當(dāng)CPU和PPU通過(guò)具有一個(gè)或多個(gè)待決寫請(qǐng)求的外圍部件接口快速(PCIe) 總線連接時(shí),可能產(chǎn)生問(wèn)題。由于PCIe總線的排序規(guī)則,讀完成不能超過(guò)寫請(qǐng)求,因此任何 派生的讀請(qǐng)求不能返回讀完成給PPU。因此,初始的寫請(qǐng)求不能完成。這種情況在本領(lǐng)域中 已知為循環(huán)依存或“死鎖”。死鎖使在CPU和PPU之間的一些或所有的通信停止并不利地影 響計(jì)算機(jī)系統(tǒng)的處理吞吐量。下面討論死鎖條件的一些例子。在第一個(gè)例子中,如果PPU需要從存儲(chǔ)在系統(tǒng)存儲(chǔ)器中的頁(yè)表讀且寫請(qǐng)求在PCIe 總線中待決,則可能發(fā)生死鎖。當(dāng)PPU向發(fā)出讀請(qǐng)求給系統(tǒng)存儲(chǔ)器以從頁(yè)表中獲取項(xiàng)目時(shí), 與讀請(qǐng)求相關(guān)的讀完成不能返回給PPU,因此初始的寫請(qǐng)求不能完成。當(dāng)CPU發(fā)出以在與PPU相關(guān)的高速緩存存儲(chǔ)器單元中的高速緩存行為目標(biāo)的寫請(qǐng) 求給PPU時(shí),也可能發(fā)生死鎖。為了完成寫請(qǐng)求,PPU首先通過(guò)檢查標(biāo)簽存儲(chǔ)件確定高速緩 存行是否壓縮。標(biāo)簽存儲(chǔ)件指示與在高速緩存存儲(chǔ)器單元中的最近訪問(wèn)的高速緩存行相關(guān) 的壓縮狀態(tài)。當(dāng)標(biāo)簽存儲(chǔ)件不包括由寫請(qǐng)求指定的高速緩存行的壓縮狀態(tài)時(shí),PPU發(fā)出讀 請(qǐng)求給系統(tǒng)存儲(chǔ)器以訪問(wèn)包括在高速緩存存儲(chǔ)器單元中的每個(gè)高速緩存行的壓縮狀態(tài)的 后備存儲(chǔ)件。后備存儲(chǔ)件返回指定的高速緩存行的壓縮狀態(tài)并發(fā)出讀完成。但是,當(dāng)寫請(qǐng) 求在PCIe中待決時(shí),由于與讀請(qǐng)求相關(guān)的讀完成不能超過(guò)這些待決的寫請(qǐng)求,因此可能發(fā) 生死鎖。當(dāng)CPU試圖寫數(shù)據(jù)到壓縮的系統(tǒng)存儲(chǔ)器的區(qū)域中(本領(lǐng)域中已知為“壓縮片”)時(shí), 可能發(fā)生第三種死鎖,。CPU發(fā)出指定壓縮片和包括寫數(shù)據(jù)的寫請(qǐng)求給PPU。PPU發(fā)出讀請(qǐng) 求給系統(tǒng)存儲(chǔ)器以讀壓縮片。當(dāng)寫請(qǐng)求在PCIe中待決時(shí),由于與讀請(qǐng)求相關(guān)的讀完成又不 能超過(guò)這些待決的寫請(qǐng)求,因此可能發(fā)生死鎖。除了這三個(gè)例子外,還有數(shù)個(gè)其他情況可能導(dǎo)致死鎖。因此,本領(lǐng)域中仍然需要避 免死鎖的方法和系統(tǒng)。

      發(fā)明內(nèi)容
      本發(fā)明的實(shí)施例提供了在計(jì)算機(jī)系統(tǒng)中避免死鎖的方法和系統(tǒng),該計(jì)算機(jī)系統(tǒng)具 有第一處理單元、第二處理單元、存儲(chǔ)器橋、系統(tǒng)存儲(chǔ)器和將第二處理單元連接到第一處理 單元、存儲(chǔ)器橋和系統(tǒng)存儲(chǔ)器的總線。當(dāng)讀或?qū)懻?qǐng)求從第一處理單元發(fā)送到第二處理單元 時(shí)避免了死鎖。根據(jù)本發(fā)明實(shí)施例的避免死鎖的方法包括在總線的第一虛擬通道上在第二處理 單元接收讀或?qū)懻?qǐng)求;在處理讀或?qū)懻?qǐng)求時(shí)在第二處理單元產(chǎn)生派生的讀請(qǐng)求;通過(guò)總線 的第二虛擬通道將派生的讀請(qǐng)求發(fā)送給系統(tǒng)存儲(chǔ)器;在總線的第二虛擬通道上接收派生的 讀請(qǐng)求的完成;和完成接收的讀或?qū)懻?qǐng)求。根據(jù)本發(fā)明實(shí)施例的避免死鎖的系統(tǒng)包括在第二處理單元中的總線接口單元。該 總線接口單元配置為在第一虛擬通道上從第一處理單元接收讀或?qū)懻?qǐng)求,并將在處理讀或 寫請(qǐng)求時(shí)產(chǎn)生的派生的讀請(qǐng)求通過(guò)第二虛擬通道發(fā)送。


      為了詳細(xì)地理解本發(fā)明的上述特征,對(duì)于以上簡(jiǎn)要說(shuō)明的本發(fā)明,將參照實(shí)施例 進(jìn)行更為具體的描述,其中對(duì)一些實(shí)施例在附圖中進(jìn)行了圖示。然而,需要注意的是,附圖 只是圖示本發(fā)明的代表性實(shí)施例,因此不能認(rèn)為附圖限制了本發(fā)明的范圍,本發(fā)明可以允 許其他同樣有效的實(shí)施例。圖1是圖示配置為實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)方面的計(jì)算機(jī)系統(tǒng)的框圖;圖2是根據(jù)本發(fā)明一個(gè)實(shí)施例的圖1中的計(jì)算機(jī)系統(tǒng)的并行處理子系統(tǒng)的框圖;圖3A是根據(jù)本發(fā)明一個(gè)實(shí)施例的在圖2的并行處理單元(PPU)之一中的通用處 理簇(GPC)的框圖;圖3B是根據(jù)本發(fā)明一個(gè)實(shí)施例的在圖2中的并行處理單元之一中的分區(qū)單元的 框圖;圖4是根據(jù)本發(fā)明一個(gè)實(shí)施例的配置為避免死鎖的計(jì)算機(jī)系統(tǒng)的框圖;和圖5是根據(jù)本發(fā)明一個(gè)實(shí)施例的避免死鎖的方法步驟的流程圖。
      具體實(shí)施例方式在下文的描述中,給出了大量具體的細(xì)節(jié)以便提供對(duì)本發(fā)明更為徹底的理解。然 而,對(duì)于本領(lǐng)域技術(shù)人員來(lái)說(shuō)顯而易見(jiàn)的是,本發(fā)明可以無(wú)需一個(gè)或多個(gè)這些具體細(xì)節(jié)而 得以實(shí)施。在其他的例子中,為了避免與本發(fā)明發(fā)生混淆,公知的一些特征未進(jìn)行描述。系統(tǒng)概述圖1是圖示配置為實(shí)現(xiàn)本發(fā)明一個(gè)或多個(gè)方面的計(jì)算機(jī)系統(tǒng)100的框圖。計(jì)算機(jī) 系統(tǒng)100包括中央處理單元(CPU) 102和系統(tǒng)存儲(chǔ)器104,二者通過(guò)存儲(chǔ)器橋105經(jīng)由總線 路徑進(jìn)行通信。存儲(chǔ)器橋105可以如圖1所示集成到CPU 102中。作為替換,存儲(chǔ)器橋105 可以是慣常設(shè)備例如北橋芯片,其通過(guò)總線連接到CPU 102。存儲(chǔ)器橋105通過(guò)通信路徑 106 (例如HyperTransport (超傳輸)鏈路)與I/O (輸入/輸出)橋107相連接。I/O橋 107例如可以是南橋芯片,其從一個(gè)或多個(gè)用戶輸入設(shè)備108(例如鍵盤、鼠標(biāo))接收用戶輸
      4入,并將該輸入通過(guò)路徑106和存儲(chǔ)器橋105轉(zhuǎn)發(fā)給CPU 102。并行處理子系統(tǒng)112通過(guò) 總線或其他通信路徑113 (例如PCIExpress、加速圖形端口或超傳輸鏈路)與存儲(chǔ)器橋105 相耦合;在一個(gè)實(shí)施例中,并行處理子系統(tǒng)112是將像素提供給顯示設(shè)備110(例如傳統(tǒng)的 CRT或基于IXD的顯示器)的圖形子系統(tǒng)。系統(tǒng)盤114同樣連接于I/O橋107。開(kāi)關(guān)116 提了 I/O橋107和諸如網(wǎng)絡(luò)適配器118以及各種插卡120和121的其他部件之間的連接。 包括USB或其他端口連接、CD驅(qū)動(dòng)器、DVD驅(qū)動(dòng)器、電影記錄設(shè)備等的其他部件(圖中沒(méi)有 明確示出),也可以與I/O橋107相連接。將圖1中的各種部件相互連接的通信路徑可以用 任何適用的協(xié)議來(lái)實(shí)現(xiàn),比如PCI (外設(shè)部件互連)、PCI Express (PCI-E)、AGP (加速圖形端 口)、超傳輸或任何其他總線或點(diǎn)對(duì)點(diǎn)通信協(xié)議,并且不同設(shè)備之間的連接可以使用不同協(xié) 議,如本領(lǐng)域已知的。在一個(gè)實(shí)施例中,并行處理子系統(tǒng)112包括為圖形和視頻處理優(yōu)化的電路,包括 例如視頻輸出電路,并構(gòu)成了圖形處理單元(GPU)。在另一實(shí)施例中,并行處理子系統(tǒng)112 包括為通用處理優(yōu)化,并保留了底層計(jì)算架構(gòu)的電路,本文將更加詳細(xì)地描述。在另一實(shí)施 例中,并行處理子系統(tǒng)112可以集成一個(gè)或多個(gè)其他系統(tǒng)元件,例如存儲(chǔ)器橋105、CPU 102 和I/O橋107,以形成片上系統(tǒng)(SoC)??梢岳斫獾氖?,這里示出的系統(tǒng)只是示意性的,可以對(duì)其進(jìn)行變化和修改。包括橋 的數(shù)量和排列的連接拓?fù)浣Y(jié)構(gòu)可以根據(jù)需要修改。例如,在一些實(shí)施例中,系統(tǒng)存儲(chǔ)器104 直接與CPU 102相連接而不是通過(guò)橋相連接,其他設(shè)備通過(guò)存儲(chǔ)器橋105和CPU 102與系 統(tǒng)存儲(chǔ)器104相通信。在其他可選擇的拓?fù)浣Y(jié)構(gòu)中,并行處理系統(tǒng)112與I/O橋107相連 接或直接與CPU 102相連接,而不是和存儲(chǔ)器橋105相連接。在其他實(shí)施例中,CPU102、I/ 0橋107、并行處理子系統(tǒng)112和存儲(chǔ)器橋105的一個(gè)或多個(gè)被集成到一個(gè)或多個(gè)芯片上。 這里示出的特定部件是可選的;例如,可以支持任何數(shù)量的插卡或外設(shè)。在一些實(shí)施例中, 省去了開(kāi)關(guān)116,網(wǎng)絡(luò)適配器118和插卡120、121直接和I/O橋107相連接。圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的并行處理子系統(tǒng)112。如圖所示,并行處理 子系統(tǒng)112包括一個(gè)或多個(gè)并行處理單元(PPU) 202,每個(gè)并行處理單元都和本地并行處理 (PP)存儲(chǔ)器204相耦合。通常,并行處理子系統(tǒng)包括U個(gè)PPU,其中U彡1。(在這里,相似 對(duì)象的多個(gè)例子用表明該對(duì)象的附圖標(biāo)記和表明該例子的附加說(shuō)明數(shù)字(需要時(shí))來(lái)表 示)。PPU 202和并行處理存儲(chǔ)器204可以使用例如可編程處理器,專用集成電路(ASIC) 或存儲(chǔ)器設(shè)備的一個(gè)或多個(gè)集成電路設(shè)備,或以任何其他技術(shù)上可行的方式來(lái)實(shí)現(xiàn)。再次參考圖1,在一些實(shí)施例中,在并行處理子系統(tǒng)112中的一些或者全部的并行 處理單元202是具有渲染流水線的圖形處理器,其能被配置成進(jìn)行與下列情形有關(guān)的各種 任務(wù)從通過(guò)CPU 102和/或系統(tǒng)存儲(chǔ)器104提供的圖形數(shù)據(jù)產(chǎn)生像素?cái)?shù)據(jù);與本地并行處 理存儲(chǔ)器204 (其能被用作圖形存儲(chǔ)器,例如包括常規(guī)的幀緩沖器)交互以存儲(chǔ)并更新像素 數(shù)據(jù);提供像素?cái)?shù)據(jù)給顯示設(shè)備110等。在一些實(shí)施例中,并行處理子系統(tǒng)112可包括作為 圖形處理器工作的一個(gè)或多個(gè)并行處理單元202和用于通用計(jì)算的一個(gè)或多個(gè)其他并行 處理單元202。并行處理單元可以是相同或不同的,且每個(gè)并行處理單元202可以有其自己 專用的并行處理存儲(chǔ)器設(shè)備或沒(méi)有專用的并行處理存儲(chǔ)器設(shè)備。一個(gè)或多個(gè)并行處理單元 202可以將數(shù)據(jù)輸出到顯示設(shè)備110或者每個(gè)并行處理單元202可以將數(shù)據(jù)輸出到一個(gè)或 多個(gè)顯示設(shè)備110。
      5
      參考圖2,在一些實(shí)施例中,可以沒(méi)有本地并行處理存儲(chǔ)器204,存儲(chǔ)器參考由本 地高速緩存(未示出)通過(guò)交叉器單元210和I/O單元205反映回到系統(tǒng)存儲(chǔ)器104(此 處未示出)。在操作中,CPU 102是計(jì)算機(jī)系統(tǒng)100的主處理器,其控制和協(xié)調(diào)其他系統(tǒng)部件 的操作。特別是,CPU 102發(fā)出控制并行處理單元202操作的命令。在一些實(shí)施例中,CPU 102將對(duì)于每個(gè)并行處理單元202的命令流寫入到命令緩沖器(圖1和圖2中未明確地示 出),該命令緩沖器可以位于系統(tǒng)存儲(chǔ)器104、并行處理存儲(chǔ)器204或是CPU 102和并行處 理單元202都可以訪問(wèn)的另一個(gè)存儲(chǔ)位置中。并行處理單元202從命令緩沖器中讀出命令 流,并且隨后相對(duì)于CPU 102的操作異步地執(zhí)行命令。CPU 102也可以建立數(shù)據(jù)緩沖器,并 行處理單元202可以響應(yīng)命令緩沖器中的命令讀取該數(shù)據(jù)緩沖器。每個(gè)命令和數(shù)據(jù)緩沖器 可以由并行處理單元202的每個(gè)讀取?,F(xiàn)在返回參考圖2,每個(gè)并行處理單元202包括通過(guò)通信路徑113和計(jì)算機(jī)系統(tǒng) 100的剩余部分通信的I/O (輸入/輸出)單元205,該通信路徑113與存儲(chǔ)器橋105相連 接(或是在一個(gè)可選實(shí)施例中直接與CPU 102相連接)。并行處理單元202和計(jì)算機(jī)系統(tǒng) 100的剩余部分的連接也可以變化。在一些實(shí)施例中,并行處理子系統(tǒng)112實(shí)現(xiàn)為插卡,其 能插入到計(jì)算機(jī)系統(tǒng)100的擴(kuò)展槽中。在其他實(shí)施例中,并行處理單元202能和總線橋一 起集成到單一芯片上,總線橋例如可以是存儲(chǔ)器橋105或I/O橋107。在另外其他實(shí)施例 中,并行處理單元202的一些或全部元件可以連同CPU102 —起集成到單一芯片上。在一個(gè)實(shí)施例中,通信路徑113是PCI-E鏈路,其中如本領(lǐng)域所已知的,專用通道 分配給每個(gè)PPU 202。也可以使用其他通信路徑。I/O單元205產(chǎn)生包(或其他信號(hào))以 在通信路徑113上傳輸,并也接收所有來(lái)自通信路徑113的輸入包(或其他信號(hào)),并將輸 入包引導(dǎo)至PPU 202的適當(dāng)?shù)牟考?。例如,和處理任?wù)有關(guān)的命令可以被引導(dǎo)至主機(jī)接口 206,而和存儲(chǔ)器操作有關(guān)的命令(例如從并行處理存儲(chǔ)器204中讀取或向其寫入)可以被 引導(dǎo)至存儲(chǔ)器交叉器(crossbar)單元210。主機(jī)接口 206讀取每個(gè)命令緩沖器,并將由命 令緩沖器指定的工作輸出到前端212。每個(gè)PPU 202有利地實(shí)現(xiàn)高度并行處理架構(gòu)。如詳細(xì)示出的,PPU 202(0)包括處 理簇陣列230,處理簇陣列230包括數(shù)量為C的通用處理簇(GPC) 208,其中C彡1。每個(gè)GPC 208能同時(shí)執(zhí)行大量(例如數(shù)百個(gè)或數(shù)千個(gè))線程,其中每個(gè)線程是程序的實(shí)例。在不同應(yīng) 用中,不同的GPC 208被分配用以處理不同類型的程序或進(jìn)行不同類型的計(jì)算。例如,在圖 形應(yīng)用中,第一組GPC 208可以分配為進(jìn)行鑲嵌操作并產(chǎn)生面片的圖元拓?fù)?,而第二組GPC 208可以分配為進(jìn)行鑲嵌著色以評(píng)價(jià)圖元拓?fù)涞拿嫫瑓?shù)并確定頂點(diǎn)位置和其他每頂點(diǎn)屬 性。GPC 208的分配基于每個(gè)類型的程序或計(jì)算產(chǎn)生的工作量是可以變化的。可選擇地, GPC 208可以分配為使用時(shí)間片方案進(jìn)行處理任務(wù)以在不同處理任務(wù)之間轉(zhuǎn)換。GPC 208通過(guò)工作分配單元200接收將要執(zhí)行的處理任務(wù),該工作分配單元200從 前端單元212接收限定了處理任務(wù)的命令。處理任務(wù)包括例如表面(面片)數(shù)據(jù)、圖元數(shù) 據(jù)、頂點(diǎn)數(shù)據(jù)和/或像素?cái)?shù)據(jù)的要處理數(shù)據(jù)的指針,還有狀態(tài)參數(shù)和限定數(shù)據(jù)如何處理的 命令(例如執(zhí)行什么程序)。工作分配單元200可以配置成取得對(duì)應(yīng)于處理任務(wù)的指針,工 作分配單元200可以從前端212接收指針,或者工作分配單元200可以直接從前端212接 收數(shù)據(jù)。在一些實(shí)施例中,索引指明了陣列中數(shù)據(jù)的位置。前端212保證在命令緩沖器指
      6定的處理啟動(dòng)前,GPC 208配置為有效狀態(tài)。例如,當(dāng)并行處理單元202用于圖形處理時(shí),每個(gè)面片的處理工作量被分成大約 相等大小的任務(wù),以使得能將鑲嵌處理分配給多個(gè)GPC 208。工作分配單元200可以配置 成以能提供任務(wù)到多個(gè)GPC 208用于處理的頻率輸出任務(wù)。在本發(fā)明的一些實(shí)施例中,部 分GPC 208配置成進(jìn)行不同類型的處理。例如,第一部分可以配置成進(jìn)行頂點(diǎn)著色和產(chǎn)生 拓?fù)浣Y(jié)構(gòu),第二部分可以配置成進(jìn)行鑲嵌和幾何著色,以及第三部分可以配置成在屏幕空 間上進(jìn)行像素著色以產(chǎn)生渲染的圖像。分配部分GPC 208以進(jìn)行不同類的處理任務(wù)的能力 有效地適應(yīng)了由那些不同類型的處理任務(wù)產(chǎn)生的數(shù)據(jù)的任何擴(kuò)展和縮減。GPC 208產(chǎn)生的 中間數(shù)據(jù)可以被緩沖,以在下游GPC 208接收數(shù)據(jù)的速度落后于上游GPC 208產(chǎn)生數(shù)據(jù)的 速度的情況下,允許中間數(shù)據(jù)在GPC 208之間以最少的停止發(fā)送。存儲(chǔ)器接口 214可以被分區(qū)成D個(gè)存儲(chǔ)器分區(qū)單元,每個(gè)存儲(chǔ)器分區(qū)單元與并行 處理存儲(chǔ)器204的一部分耦合,其中D > 1。并行處理存儲(chǔ)器204的每部分通常包括一個(gè)或 多個(gè)存儲(chǔ)器設(shè)備(例如DRAM 220)。本領(lǐng)域的普通技術(shù)人員可以理解的是,DRAM 220可以 由其他合適的存儲(chǔ)設(shè)備代替并且通??梢允菓T常的設(shè)計(jì)。因此省略了詳細(xì)的描述。在一個(gè) 實(shí)施例中,DRAM220可以全部省略,存儲(chǔ)器請(qǐng)求通過(guò)交叉器210和I/O單元205反映回到存 儲(chǔ)器橋105。例如幀緩沖器或紋理貼圖的渲染目標(biāo)可以跨越DRAM 220存儲(chǔ),允許分區(qū)單元 215將每個(gè)渲染目標(biāo)的部分并行寫入,以有效地使用并行處理存儲(chǔ)器204的可用帶寬。GPC 208的任何一個(gè)可以處理要寫入到并行處理存儲(chǔ)器204中的任何分區(qū)單元 215中的數(shù)據(jù)。交叉器(crossbar)單元210配置為將每個(gè)GPC 208的輸出路由至任何分區(qū) 單元215的輸入或另一 GPC 208以進(jìn)一步處理。GPC208通過(guò)交叉器單元210與存儲(chǔ)器接口 214通信以從各種外部存儲(chǔ)器設(shè)備中讀取或?qū)懭敫鞣N外部存儲(chǔ)器設(shè)備。在一個(gè)實(shí)施例中,交 叉器單元210與存儲(chǔ)器接口 214連接以與I/O單元205通信,交叉器單元210也和本地并 行處理存儲(chǔ)器204連接,因此使得不同GPC 208內(nèi)的處理內(nèi)核能與系統(tǒng)存儲(chǔ)器104或?qū)Σ?行處理單元202為非本地的其他存儲(chǔ)器通信。交叉器單元210可以使用虛擬通道以在GPC 208和分區(qū)單元215之間分開(kāi)通信流。此外,GPC 208能被編程以執(zhí)行與廣泛多種應(yīng)用相關(guān)的處理任務(wù),所述應(yīng)用包括但 不限于線性和非線性數(shù)據(jù)轉(zhuǎn)換、視頻和/或音頻數(shù)據(jù)的過(guò)濾、建模操作(例如,應(yīng)用物理規(guī) 律來(lái)確定對(duì)象的位置、速度和其他屬性)、圖像渲染操作(例如,鑲嵌著色器、頂點(diǎn)著色器、 幾何著色器和/或像素著色器程序)等等。并行處理單元202可以將數(shù)據(jù)從系統(tǒng)存儲(chǔ)器 104和/或本地并行處理存儲(chǔ)器204傳輸?shù)絻?nèi)部(片上)存儲(chǔ)器,處理數(shù)據(jù),并將結(jié)果數(shù)據(jù) 寫回到系統(tǒng)存儲(chǔ)器104和/或本地并行處理存儲(chǔ)器204中,其中這樣的數(shù)據(jù)能夠由包括CPU 102或另一并行處理子系統(tǒng)112的其他系統(tǒng)部件來(lái)訪問(wèn)。并行處理單元202可以提供有任意數(shù)量的本地并行處理存儲(chǔ)器204,包括沒(méi)有 本地存儲(chǔ)器,并可以以任意組合使用本地存儲(chǔ)器和系統(tǒng)存儲(chǔ)器。例如,在統(tǒng)一存儲(chǔ)器架構(gòu) (UMA)的實(shí)施例中,并行處理單元202可以是圖形處理器。在這樣的實(shí)施例中,會(huì)提供極少 或者不提供專用圖形(并行處理)存儲(chǔ)器,并行處理單元202唯一地使用或幾乎唯一地使 用系統(tǒng)存儲(chǔ)器。在UMA實(shí)施例中,并行處理單元202可被集成到橋芯片或處理器芯片中,或 者是提供為具有高速鏈路(例如PCI-E)的分立的芯片,該高速鏈路將并行處理單元202通 過(guò)橋芯片或其他通信裝置與系統(tǒng)存儲(chǔ)器相連接。
      7
      如上所述,并行處理子系統(tǒng)112中可以包括任意數(shù)量的并行處理單元202。例如, 多個(gè)并行處理單元202可以提供在單個(gè)的插卡上,或者多個(gè)插卡可以與通信路徑113相連, 或者一個(gè)或多個(gè)并行處理單元202可以集成到橋芯片中。多并行處理單元系統(tǒng)中的并行處 理單元202可以是彼此相同的,或者可以是彼此不同的。例如,不同的并行處理單元202可 以具有不同數(shù)量的處理內(nèi)核、不同數(shù)量的本地并行處理存儲(chǔ)器等等。當(dāng)存在有多個(gè)并行處 理單元202時(shí),那些并行處理單元可以以高于單個(gè)并行處理單元202可能達(dá)到的吞吐量來(lái) 并行操作以處理數(shù)據(jù)。包含有一個(gè)或多個(gè)并行處理單元202的系統(tǒng)可以以各種配置和形式 因素實(shí)現(xiàn),包括臺(tái)式計(jì)算機(jī)、筆記本計(jì)算機(jī)、或是手持個(gè)人計(jì)算機(jī)、服務(wù)器、工作站、游戲控 制臺(tái)、嵌入式系統(tǒng)等等。處理簇陣列概述圖3A是根據(jù)本發(fā)明一個(gè)實(shí)施例的在圖2的并行處理單元202之一中的GPC 208 的框圖。每個(gè)GPC 208可以配置為并行執(zhí)行大量的線程,在此術(shù)語(yǔ)“線程”是指對(duì)一特定組 的輸入數(shù)據(jù)執(zhí)行的特定程序的實(shí)例。在一些實(shí)施例中,單指令多數(shù)據(jù)(SIMD)指令發(fā)出技術(shù) 被用于支持并行執(zhí)行大量線程,而不用提供多個(gè)獨(dú)立的指令單元。在其他實(shí)施例中,使用配 置為向每個(gè)GPC 208中的一組處理引擎發(fā)出指令的共同指令單元,單指令多線程(SIMT)技 術(shù)被用來(lái)支持并行執(zhí)行大量通常同步的線程。不像SIMD執(zhí)行方式中所有處理引擎通常執(zhí) 行相同的指令,SIMT的執(zhí)行允許不同的線程通過(guò)給定的線程程序更加容易地跟隨分散的執(zhí) 行路徑。本領(lǐng)域的普通技術(shù)人員可以理解的是,SIMD處理方式代表了 SIMT處理方式的功 能性子集。在圖形應(yīng)用中,GPC 208可以被配置為實(shí)現(xiàn)圖元引擎以進(jìn)行屏幕空間圖形處理功 能,其包括但不限于圖元建立、光柵化和Z剔除。圖元引擎304從工作分配單元200接收處 理任務(wù),當(dāng)處理任務(wù)不需要由圖元引擎實(shí)施的操作時(shí),處理任務(wù)通過(guò)圖元引擎?zhèn)魉偷搅魉?線管理器305。GPC 208的操作通過(guò)流水線管理器305有利地控制,流水線管理器305將處 理任務(wù)分配給流多處理器(SPM) 310。流水線管理器305也可以配置為通過(guò)為SPM 310輸出 的處理的數(shù)據(jù)指定目的地來(lái)控制工作分配交叉器(crossbar) 330。在一個(gè)實(shí)施例中,每個(gè)GPC 208包括M個(gè)SPM 310,其中M彡1,每個(gè)SPM 310配置 成處理一個(gè)或多個(gè)線程組。此外,每個(gè)SPM 310有利地包括可以流水線化的相同組的功能 單元(例如算術(shù)邏輯單元等),允許新指令在前指令完成之前發(fā)出,這已在本領(lǐng)域中公知。 可以提供功能單元的任何組合。在一個(gè)實(shí)施例中,功能單元支持各種運(yùn)算,包括整數(shù)和浮點(diǎn) 算術(shù)(例如加法和乘法)、比較運(yùn)算、布爾運(yùn)算(與、或、異或)、移位和各種代數(shù)函數(shù)(例如 平面插值函數(shù)、三角算法函數(shù)、指數(shù)和對(duì)數(shù)函數(shù)等)計(jì)算;并且相同的功能單元硬件可以被 平衡為實(shí)施不同的運(yùn)算。發(fā)送到特定GPC 208的系列指令構(gòu)成了已在本文前面定義的線程,且在SPM 310 內(nèi)在并行處理引擎(未示出)上一定數(shù)量同時(shí)執(zhí)行的線程的集合在本文中稱為線程組。如 本文所使用的,線程組指的是對(duì)不同輸入數(shù)據(jù)同時(shí)執(zhí)行相同程序的線程的組,組中的每個(gè) 線程被分配給SPM 310中的不同處理引擎。線程組可以包括比SPM 310中處理引擎數(shù)量少 的線程,在這種情況中,在當(dāng)處理線程組時(shí)的周期期間,一些處理引擎將是空閑的。線程組 也可以包括比SPM 310中處理引擎數(shù)量多的線程,在這種情況中,處理將發(fā)生在多個(gè)時(shí)鐘 周期上。由于每個(gè)SPM 310可以同時(shí)支持多達(dá)G個(gè)線程組,因此多達(dá)GxM個(gè)線程組可以在任何給定的時(shí)間在GPC 208中執(zhí)行。另外,多個(gè)相關(guān)的線程組可以同時(shí)在SPM310中是活動(dòng)的(在不同的執(zhí)行階段)。 這個(gè)線程組的集合在本文中稱為“合作線程陣列”(“CTA”)。特定CTA的大小等于m*k,其 中k是在線程組中同時(shí)執(zhí)行的線程的數(shù)目且典型地是在SPM310中并行處理引擎的數(shù)目的 整數(shù)倍,m是在SPM310中同時(shí)活動(dòng)的線程組的數(shù)目。CTA的大小通常由程序員和CTA可用 的諸如存儲(chǔ)器或寄存器的硬件資源的數(shù)量確定。專有本地地址空間對(duì)每個(gè)線程可用,且共享的每CTA地址空間用于在CTA中的線 程之間傳遞數(shù)據(jù)。存儲(chǔ)在每線程本地地址空間和每CTA地址空間中的數(shù)據(jù)存儲(chǔ)在Ll高速 緩存320中,且可以使用逐出策略來(lái)幫助將數(shù)據(jù)保持在Ll高速緩存320中。每個(gè)SPM 310 使用在用于進(jìn)行裝載和存儲(chǔ)操作的相應(yīng)的Ll高速緩存320中的空間。每個(gè)SPM 310也訪問(wèn) 所有GPC 208共享并可以用于在線程之間傳輸數(shù)據(jù)的分區(qū)單元215中的L2高速緩存。最 后,SPM 310也訪問(wèn)片外“全局”存儲(chǔ)器,其可以包括例如并行處理存儲(chǔ)器204和/或系統(tǒng)存 儲(chǔ)器104。L2高速緩存可以用于存儲(chǔ)寫入到全局存儲(chǔ)器中和從全局存儲(chǔ)器中讀取的數(shù)據(jù)。 可以理解的是,并行處理單元202外部的任何存儲(chǔ)器都可以用作全局存儲(chǔ)器。在圖形應(yīng)用中,GPC 208可以配置為使得每個(gè)SPM 310和紋理單元315耦合以進(jìn) 行紋理貼圖操作,例如確定紋理樣本的位置、讀取紋理數(shù)據(jù)和過(guò)濾紋理數(shù)據(jù)。紋理數(shù)據(jù)通過(guò) 存儲(chǔ)器接口 214讀取并按照需要從L2高速緩存、并行處理存儲(chǔ)器204或者系統(tǒng)存儲(chǔ)器104 中取得。紋理單元315可以配置為在內(nèi)部高速緩存中存儲(chǔ)紋理數(shù)據(jù)。在一些實(shí)施例中,紋 理單元315與Ll高速緩存320耦合且紋理數(shù)據(jù)存儲(chǔ)在Ll高速緩存320中。每個(gè)SPM 310 向工作分配交叉器330輸出處理的任務(wù),以向另一 GPC 208提供處理的任務(wù)以做進(jìn)一步處 理,或通過(guò)交叉器單元210將處理的任務(wù)存儲(chǔ)在L2高速緩存、并行處理存儲(chǔ)器204或者系 統(tǒng)存儲(chǔ)器104中。PreROP(預(yù)先光柵操作器)325配置成從SPM 310中接收數(shù)據(jù),引導(dǎo)數(shù)據(jù) 至分區(qū)單元215內(nèi)的光柵操作單元,并進(jìn)行顏色混合的優(yōu)化,組織像素顏色數(shù)據(jù),并進(jìn)行地 址轉(zhuǎn)換??梢岳斫獾氖?,本文描述的內(nèi)核架構(gòu)是示例性的,可以做變化和改變。任何數(shù)量的 處理引擎,例如圖元引擎304、SPM 310、紋理單元315或PreROP 325可以包括在GPC 208 中。進(jìn)一步,雖然只示出了一個(gè)GPC 208,并行處理單元202可以包括任何數(shù)量的GPC 208, 這些GPC 208功能上有利地彼此相似,使得執(zhí)行行為不取決于哪個(gè)GPC 208接收了特定處 理任務(wù)。進(jìn)一步,每個(gè)GPC 208使用單獨(dú)的和不同的處理引擎、Ll高速緩存320等相對(duì)另 外的GPC 208有利地獨(dú)立地工作。圖3B是根據(jù)本發(fā)明一個(gè)實(shí)施例的圖2中并行處理單元202其中之一中的分區(qū)單 元215的框圖。如圖所示,分區(qū)單元215包括L2高速緩存350、幀緩沖器(FB) 355和光柵操 作單元(ROP) 360。L2高速緩存350是配置為進(jìn)行從交叉器單元210和ROP 360接收的裝 載和存儲(chǔ)操作的讀/寫高速緩存。讀取缺失和緊急寫回請(qǐng)求通過(guò)L2高速緩存350輸出到 幀緩沖器355處理。臟(dirty)更新也送到幀緩沖器355用于機(jī)會(huì)處理。幀緩沖器355直 接與并行處理存儲(chǔ)器204接口,輸出讀取和寫入請(qǐng)求,并接收從并行處理存儲(chǔ)器204讀取的 數(shù)據(jù)。在圖形應(yīng)用中,ROP 360是進(jìn)行光柵操作的處理單元,例如模板、ζ測(cè)試、混合等, 并將像素?cái)?shù)據(jù)輸出為處理的圖形數(shù)據(jù)以存儲(chǔ)在圖形存儲(chǔ)器中。在本發(fā)明的一些實(shí)施例中,
      9ROP 360包括在每個(gè)GPC 208中,而不是在分區(qū)單元215中,像素的讀和寫請(qǐng)求通過(guò)交叉器 單元210來(lái)發(fā)送,而不是通過(guò)像素段數(shù)據(jù)。處理的圖形數(shù)據(jù)可以顯示在顯示設(shè)備110上,或路由以通過(guò)CPU 102或通過(guò)并行 處理子系統(tǒng)112中的處理實(shí)體之一來(lái)進(jìn)一步處理。每個(gè)分區(qū)單元215包括ROP 360以分配 光柵操作的處理。在一些實(shí)施例中,ROP 360配置為壓縮寫到存儲(chǔ)器中的ζ或顏色數(shù)據(jù),并 將從存儲(chǔ)器中讀取的ζ或顏色數(shù)據(jù)解壓縮。本領(lǐng)域的技術(shù)人員可以理解的是,圖1、2、3A和3B中描述的架構(gòu)決不限制本發(fā)明 的范圍,本文中教導(dǎo)的技術(shù)可以在任何適合地配置的處理單元上實(shí)現(xiàn),該處理單元包括但 不限于一個(gè)或多個(gè)CPU、一個(gè)或多個(gè)多內(nèi)核CPU、一個(gè)或多個(gè)并行處理單元202、一個(gè)或多個(gè) GPC 208、一個(gè)或多個(gè)圖形或?qū)S锰幚韱卧?,這些都不離開(kāi)本發(fā)明的范圍。死鎖避免當(dāng)通信路徑113是PCIe總線時(shí),在PCIe總線中的待決的寫請(qǐng)求阻止從系統(tǒng)存儲(chǔ) 器104返回的讀完成到達(dá)并行處理子系統(tǒng)202。當(dāng)在待決的寫請(qǐng)求能處理之前并行處理子 系統(tǒng)202需要讀完成時(shí),死鎖發(fā)生。本發(fā)明的實(shí)施例提供了將讀完成通過(guò)與用于發(fā)送寫請(qǐng) 求的虛擬通道分開(kāi)的PCIe的虛擬通道(VC)路由的技術(shù)。因此,不會(huì)阻止讀完成到達(dá)并行 處理子系統(tǒng)202并避免了死鎖。圖4是根據(jù)本發(fā)明一個(gè)實(shí)施例的配置為避免死鎖的計(jì)算機(jī)系統(tǒng)400的框圖。如圖 所示,計(jì)算機(jī)系統(tǒng)400包括與存儲(chǔ)器橋105集成的CPU102、系統(tǒng)存儲(chǔ)器104、外圍部件接口 快速(PCIe)總線401和并行處理子系統(tǒng)202。CPU102通過(guò)存儲(chǔ)器橋105與系統(tǒng)存儲(chǔ)器104 耦合。CPU102也通過(guò)存儲(chǔ)器橋105和PCIe總線401與并行處理子系統(tǒng)202耦合。CPU102 通過(guò)存儲(chǔ)器橋105和PCIe總線401可以訪問(wèn)在并行處理子系統(tǒng)202中的存儲(chǔ)器單元。同 樣,并行處理子系統(tǒng)202也通過(guò)PCIe總線401和存儲(chǔ)器橋105訪問(wèn)系統(tǒng)存儲(chǔ)器104。CPU102是計(jì)算機(jī)系統(tǒng)400的主處理器并配置為通過(guò)存儲(chǔ)器橋105發(fā)出包括讀請(qǐng)求 和寫請(qǐng)求的請(qǐng)求給系統(tǒng)存儲(chǔ)器104。CPU102也通過(guò)存儲(chǔ)器橋105和PCIe總線401發(fā)出請(qǐng) 求給并行處理子系統(tǒng)202。并行處理子系統(tǒng)202是配置為為CPU102實(shí)施不同處理操作的協(xié)處理器。這些處理 操作包括數(shù)據(jù)壓縮和解壓縮。并行處理子系統(tǒng)202包括配置為通過(guò)PCIe總線401從CPU102 接收請(qǐng)求并將請(qǐng)求路由給并行處理子系統(tǒng)202的不同部件以處理的PCIe接口 402。PCIe 接口 402也通過(guò)PCIe總線401發(fā)送請(qǐng)求給CPU102或者系統(tǒng)存儲(chǔ)器104。PCIe接口 402通 過(guò)在PCIe總線401上的不同虛擬通道(VC)路由數(shù)據(jù)。這些虛擬通道包括VCO和VCl (未 示出)。并行處理子系統(tǒng)進(jìn)一步包括主機(jī)404、客戶端406A-406N、I/O單元205、交叉器單 元210、L2高速緩存350和并行處理存儲(chǔ)器204。I/O單元205允許并行處理子系統(tǒng)實(shí)施存 儲(chǔ)器訪問(wèn)操作并包括存儲(chǔ)器管理單元(MMU)仲裁器408、MMU410、轉(zhuǎn)換后備緩沖器(TLB)412 和一個(gè)或多個(gè)迭代器414。主機(jī)404是允許CPU102訪問(wèn)I/O單元205的引擎。主機(jī)404與在I/O單元205 中的MMU仲裁器408耦合。主機(jī)404從CPU102接收請(qǐng)求并將這些請(qǐng)求通過(guò)MMU仲裁器408 發(fā)送給MMU410??蛻舳?06A-406N也與MMU仲裁器408耦合??蛻舳?06A-406N是實(shí)施 不同功能的引擎,這些功能包括存儲(chǔ)器管理、圖形顯示、指令提取、加密、紋理處理和視頻解碼??蛻舳?06A-406N配置為發(fā)出請(qǐng)求給I/O單元205。MMU仲裁器408在主機(jī)404和客戶端406A-406N的每個(gè)之間仲裁并允許這些引擎 訪問(wèn)MMU410。MMU仲裁器408檢查與接收自主機(jī)404和客戶端406A-406N的請(qǐng)求相關(guān)的引 擎ID,該引擎ID指示是否請(qǐng)求來(lái)自CPU102。當(dāng)引擎ID指示請(qǐng)求來(lái)自CPU102時(shí),通過(guò)使在 請(qǐng)求中的“特殊”位等于1而將該請(qǐng)求標(biāo)記為“特殊”。然后請(qǐng)求路由給MMU410。MMU410為主機(jī)404和客戶端406A-406N提供虛擬到物理地址轉(zhuǎn)換。當(dāng)主機(jī)404和 /或客戶端406A-406N通過(guò)MMU仲裁器408發(fā)送請(qǐng)求給MMU410時(shí),MMU410將請(qǐng)求中指定的 虛擬地址轉(zhuǎn)換成物理地址。虛擬到物理地址轉(zhuǎn)換可以使用TLB412加速。TLB412存儲(chǔ)最近 訪問(wèn)的虛擬到物理地址的映射。如果接收的虛擬地址包括在TLB412中,那么與該虛擬地址 相關(guān)的物理地址可以快速地從TLB412獲取。如果TLB412沒(méi)有存儲(chǔ)需要的虛擬到物理的映 射,那么MMU410發(fā)出讀請(qǐng)求以檢索包括需要的虛擬到物理地址映射的頁(yè)表。作為另一請(qǐng)求的直接結(jié)果發(fā)出的這樣的讀請(qǐng)求在下面稱為“派生的讀請(qǐng)求”。如 果產(chǎn)生派生的讀請(qǐng)求的初始請(qǐng)求標(biāo)記為特殊,那么MMU410將派生的讀請(qǐng)求標(biāo)記為特殊。 MMU410將派生的讀請(qǐng)求發(fā)送給PCIe接口 402。當(dāng)派生的請(qǐng)求沒(méi)有標(biāo)記為特殊時(shí),PCIe接 口 402在VCO上路由派生的讀請(qǐng)求,當(dāng)派生的讀請(qǐng)求標(biāo)記為特殊時(shí),PCIe接口 402在VCl上 路由派生的讀請(qǐng)求。從沒(méi)有標(biāo)記為特殊的請(qǐng)求返回的讀完成在VCO上返回,而從標(biāo)記為特 殊的請(qǐng)求返回的讀完成在VCl上返回。當(dāng)系統(tǒng)存儲(chǔ)器104接收與請(qǐng)求的數(shù)據(jù)相關(guān)的讀完成 時(shí),初始請(qǐng)求的處理繼續(xù)。MMU410將請(qǐng)求和物理地址發(fā)送給迭代器414之一。迭代器414將物理地址轉(zhuǎn)換為 交叉器原始地址并將請(qǐng)求和交叉器原始地址發(fā)送給交叉器單元210。然后交叉器單元210 將請(qǐng)求路由給L2高速緩存350。L2高速緩存350是存儲(chǔ)可以由I/O單元205需要的數(shù)據(jù)的低延遲存儲(chǔ)器單元。L2 高速緩存350包括允許并行處理子系統(tǒng)202對(duì)接收自系統(tǒng)存儲(chǔ)器104的數(shù)據(jù)或存儲(chǔ)在L2高 速緩存350中的數(shù)據(jù)進(jìn)行壓縮和解壓縮的壓縮和解壓縮單元(未示出)。L2高速緩存350 包括標(biāo)簽存儲(chǔ)件(未示出),該標(biāo)簽存儲(chǔ)件包括指示L2高速緩存350的最近訪問(wèn)的高速緩 存行的壓縮狀態(tài)的標(biāo)簽。當(dāng)L2高速緩存350接收以L2高速緩存350中的特定高速緩存行為目標(biāo)的寫請(qǐng)求 時(shí),L2高速緩存350使用標(biāo)簽存儲(chǔ)件以確定是否目標(biāo)高速緩存行是壓縮的。當(dāng)標(biāo)簽存儲(chǔ)件 不包括由請(qǐng)求指示的高速緩存行的壓縮狀態(tài)時(shí),L2高速緩存350產(chǎn)生派生的讀請(qǐng)求以訪問(wèn) 在系統(tǒng)存儲(chǔ)器104中的后備存儲(chǔ)件(未示出)。L2高速緩存350通過(guò)交叉器單元210將派 生的讀請(qǐng)求發(fā)送給PCIe接口 402。PCIe接口 402確定是否派生的讀請(qǐng)求標(biāo)記為特殊,并因 此將派生的讀請(qǐng)求在PCIe總線401上路由。當(dāng)系統(tǒng)存儲(chǔ)器104返回與派生的讀請(qǐng)求相關(guān) 的讀完成時(shí),當(dāng)派生的讀請(qǐng)求標(biāo)記為特殊時(shí)這個(gè)讀完成在VCl上發(fā)送,因此當(dāng)寫請(qǐng)求已經(jīng) 在PICe總線401上時(shí)避免了死鎖條件。如果后備存儲(chǔ)件指示目標(biāo)高速緩存行是壓縮的,那么L2高速緩存350解壓縮目標(biāo) 高速緩存行,將解壓縮的數(shù)據(jù)與包括在寫請(qǐng)求中的數(shù)據(jù)合并,并將解壓縮的和合并的數(shù)據(jù) 寫回到在L2高速緩存350中的高速緩存行中。L2高速緩存350也可以更新標(biāo)簽存儲(chǔ)件以 包括最近訪問(wèn)的高速緩存行的壓縮狀態(tài)。在一個(gè)實(shí)施例中,合并的數(shù)據(jù)可以再次壓縮。當(dāng) 數(shù)據(jù)解壓縮時(shí),其以解壓縮的格式存儲(chǔ)。標(biāo)簽存儲(chǔ)件指示是否片是壓縮的并因此需要解壓
      11縮,或者可以直接寫而不用首先解壓縮。L2高速緩存350也可以接收寫請(qǐng)求,該寫請(qǐng)求指定CPU102需要向其寫數(shù)據(jù)的系統(tǒng) 存儲(chǔ)器104的壓縮的區(qū)域或“壓縮片”。典型地,雖然壓縮片來(lái)自并行處理子系統(tǒng)202中,但 在一個(gè)實(shí)施例中CPU102產(chǎn)生壓縮片。L2高速緩存350接收寫請(qǐng)求并產(chǎn)生派生的讀請(qǐng)求以 訪問(wèn)系統(tǒng)存儲(chǔ)器104并從系統(tǒng)存儲(chǔ)器104讀壓縮片。L2高速緩存350通過(guò)交叉器單元210 將派生的讀請(qǐng)求發(fā)送給PCIe接口 402。PCIe接口 402確定是否派生的讀請(qǐng)求標(biāo)記為特殊, 并因此將派生的讀請(qǐng)求在PCIe總線401上路由。如果派生的讀請(qǐng)求標(biāo)記為特殊,那么系統(tǒng) 存儲(chǔ)器104在VCl上返回與派生的讀請(qǐng)求相關(guān)的讀完成,因此避免了當(dāng)寫請(qǐng)求在PCIe總線 401上待決時(shí)可能發(fā)生的死鎖條件。L2高速緩存350接收從派生的請(qǐng)求返回的壓縮的數(shù)據(jù), 對(duì)壓縮的數(shù)據(jù)解壓縮,將寫數(shù)據(jù)與解壓縮的數(shù)據(jù)合并,壓縮合并的數(shù)據(jù)并將壓縮的、合并的 數(shù)據(jù)寫回到系統(tǒng)存儲(chǔ)器104。將CPU102發(fā)出的請(qǐng)求標(biāo)記為特殊,并也將響應(yīng)那些請(qǐng)求產(chǎn)生的派生的讀請(qǐng)求標(biāo) 記為特殊,由于與標(biāo)記為特殊的請(qǐng)求相關(guān)的讀完成在VCl而不是VCO上發(fā)送,因此允許避免 死鎖。使用標(biāo)準(zhǔn)的(非PCIe)總線協(xié)議技術(shù),請(qǐng)求也可以標(biāo)記為“靈活排序”或以其他方式 標(biāo)記,其指示讀完成可以不用考慮排序規(guī)則返回。雖然這個(gè)技術(shù)參考可能產(chǎn)生死鎖的特定 環(huán)境在上面做了描述,但是本領(lǐng)域的技術(shù)人員將理解的是,將CPU102發(fā)出的請(qǐng)求標(biāo)記為特 殊,并也將響應(yīng)那些請(qǐng)求產(chǎn)生的派生的讀請(qǐng)求標(biāo)記為特殊,當(dāng)PCIe總線401具有待決的寫 請(qǐng)求時(shí),允許避免死鎖。圖5是根據(jù)本發(fā)明一個(gè)實(shí)施例的避免死鎖的方法步驟的流程圖。本領(lǐng)域的技術(shù)人 員將理解的是,雖然該方法500結(jié)合圖1-4的系統(tǒng)做了描述,但是配置為以任何順序?qū)嵤┓?法步驟的任何系統(tǒng)都在本發(fā)明的范圍中。如圖所示,方法500開(kāi)始于步驟502,其中MMU仲裁器408從主機(jī)404或客戶端 406A-406N之一接收請(qǐng)求。請(qǐng)求可以是讀請(qǐng)求或?qū)懻?qǐng)求。另外,請(qǐng)求可以以L2高速緩存 350、并行處理存儲(chǔ)器204或系統(tǒng)存儲(chǔ)器104為目標(biāo)。在步驟504,MMU仲裁器408檢查與請(qǐng) 求相關(guān)的引擎ID。引擎ID指示請(qǐng)求的來(lái)源。例如,請(qǐng)求可能從客戶端406A-406N之一發(fā) 送,或者作為替換,可能通過(guò)主機(jī)404從CPU102發(fā)送。在步驟506,MMU仲裁器408確定是 否CPU102發(fā)送了請(qǐng)求。如果引擎ID指示CPU102發(fā)送請(qǐng)求,那么方法500進(jìn)行到步驟508。 在步驟506,如果MMU仲裁器408確定CPU102沒(méi)有發(fā)送請(qǐng)求,那么方法500進(jìn)行到步驟518。在步驟508,MMU仲裁器408將請(qǐng)求標(biāo)記為特殊。MMU仲裁器408配置為將在請(qǐng)求 中的位設(shè)置為“1”以指示該請(qǐng)求從CPU102發(fā)送。在步驟510,請(qǐng)求使得派生的讀請(qǐng)求產(chǎn)生。 請(qǐng)求使得派生的讀請(qǐng)求在不同環(huán)境下產(chǎn)生。例如,當(dāng)需要讀系統(tǒng)存儲(chǔ)器104以使MMU410可 以實(shí)施虛擬到物理地址轉(zhuǎn)換時(shí),MMU410產(chǎn)生以系統(tǒng)存儲(chǔ)器104為目標(biāo)的派生的讀請(qǐng)求???替換地,當(dāng)需要讀系統(tǒng)存儲(chǔ)器104以使L2高速緩存350可以確定高速緩存行的壓縮狀態(tài) 時(shí),L2高速緩存350產(chǎn)生以系統(tǒng)存儲(chǔ)器104為目標(biāo)的派生的讀請(qǐng)求。初始請(qǐng)求使得派生的 讀請(qǐng)求產(chǎn)生的各種其他情況是可能的。在步驟512,派生的讀請(qǐng)求標(biāo)記為特殊。當(dāng)MMU410產(chǎn)生派生的讀請(qǐng)求時(shí),MMU410 將派生的讀請(qǐng)求標(biāo)記為特殊。當(dāng)L2高速緩存350產(chǎn)生派生的讀請(qǐng)求時(shí),L2高速緩存350將 派生的讀請(qǐng)求標(biāo)記為特殊。如果并行處理子系統(tǒng)202的另外部件產(chǎn)生派生的讀請(qǐng)求時(shí),該 部件將派生的讀請(qǐng)求標(biāo)記為特殊。在步驟514,PCIe接口 402接收和檢查請(qǐng)求。該請(qǐng)求可以是派生的讀請(qǐng)求或可替換地是不同的請(qǐng)求。在步驟516,PCIe接口 402確定是否請(qǐng)求標(biāo)記為特殊。如果請(qǐng)求沒(méi)有標(biāo)記為特殊, 那么方法500進(jìn)行到步驟518,其中PCIe接口 402將請(qǐng)求和與請(qǐng)求相關(guān)的讀完成通過(guò)PCIe 總線401的VCO路由。如果請(qǐng)求標(biāo)記為特殊,方法500進(jìn)行到步驟520,且PCIe接口 402將 請(qǐng)求和與請(qǐng)求相關(guān)的讀完成通過(guò)PCIe總線401的VCl路由。然后方法終止??傊?,并行處理單元(PPU)將接收自中央處理單元(CPU)的請(qǐng)求標(biāo)記為“特殊”,使 得響應(yīng)請(qǐng)求產(chǎn)生的派生的讀請(qǐng)求也標(biāo)記為特殊并因此在外圍部件接口快速(PCIe)總線的 輔助虛擬通道上路由。PPU將標(biāo)記為特殊的請(qǐng)求通過(guò)外圍部件接口快速(PCIe)總線的虛擬 通道(VC)I發(fā)送。如果標(biāo)記為特殊的請(qǐng)求產(chǎn)生讀完成,那么讀完成通過(guò)PCIe總線的VCl返 回。有利地,由于與標(biāo)記為特殊的請(qǐng)求相關(guān)的讀完成在不同的虛擬通道上發(fā)送,因此 從標(biāo)記為特殊的請(qǐng)求返回的讀完成當(dāng)在VCO上已經(jīng)有寫請(qǐng)求時(shí)不會(huì)造成死鎖。因此,本發(fā)明的實(shí)施例提供了使用傳播通過(guò)結(jié)構(gòu)的狀態(tài)位用于識(shí)別和標(biāo)記由 CPU102發(fā)出給并行處理子系統(tǒng)202的可能造成死鎖的一定請(qǐng)求(例如讀和寫請(qǐng)求)的且由 該請(qǐng)求產(chǎn)生的任何派生的事務(wù)也用該狀態(tài)位標(biāo)記的技術(shù)。在其他實(shí)施例中,標(biāo)準(zhǔn)總線接口 限定的機(jī)制(例如“靈活排序”)可以用于避免死鎖。要注意的是,由并行處理子系統(tǒng)202發(fā)送給系統(tǒng)存儲(chǔ)器104的一定事務(wù)不會(huì)造成 死鎖且因此不在第二虛擬通道上傳輸。例如,用作同步基元的或者另外基于讀完成不超過(guò) 寫請(qǐng)求的排序規(guī)則的事務(wù)在第一虛擬通道上發(fā)送。例如,當(dāng)并行處理子系統(tǒng)202發(fā)出信號(hào) 收集以檢測(cè)CPU102向并行處理存儲(chǔ)器204的寫何時(shí)完成時(shí),讀完成保證了所有較早的CPU 啟動(dòng)的寫事務(wù)已經(jīng)到達(dá)連貫點(diǎn)。本發(fā)明的一個(gè)實(shí)施例可以實(shí)施為與計(jì)算機(jī)系統(tǒng)使用的程序產(chǎn)品。程序產(chǎn)品的程序 限定了實(shí)施例(包括本文描述的方法)的功能且能包含在各種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中。示 例的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)包括但不限于(i)其上信息被永久存儲(chǔ)的不可寫存儲(chǔ)介質(zhì)(例 如,計(jì)算機(jī)中的只讀存儲(chǔ)器設(shè)備,諸如由CD-ROM驅(qū)動(dòng)器可讀取的CD-ROM盤、閃存、ROM芯片 或任何類型的固態(tài)非易失半導(dǎo)體存儲(chǔ)器);和(ii)其上存儲(chǔ)可改變信息的可寫存儲(chǔ)介質(zhì) (例如,軟盤驅(qū)動(dòng)器中的軟盤或硬盤驅(qū)動(dòng)器或任何類型的固態(tài)隨機(jī)存取半導(dǎo)體存儲(chǔ)器)。上面已經(jīng)參考特定實(shí)施例對(duì)本發(fā)明進(jìn)行了描述。但是,本領(lǐng)域的技術(shù)人員將理解 的是,在不背離如所附的權(quán)利要求闡明的本發(fā)明的較寬的精神和范圍的情況下,可以對(duì)特 定實(shí)施例作出各種修改和改變。因此前述的描述和附圖是示例性的而不是限制性的。
      1權(quán)利要求
      一種計(jì)算機(jī)系統(tǒng),包括第一處理單元、第二處理單元、存儲(chǔ)器橋、系統(tǒng)存儲(chǔ)器和通過(guò)第一虛擬通道和第二虛擬通道將該第二處理單元連接到該第一處理單元、該存儲(chǔ)器橋和該系統(tǒng)存儲(chǔ)器的總線;其中該第二處理單元包括總線接口單元,該總線接口單元配置為(i)從該第一處理單元通過(guò)該第一虛擬通道接收讀或?qū)懻?qǐng)求;和(ii)將在處理該讀或?qū)懻?qǐng)求時(shí)產(chǎn)生的派生的讀請(qǐng)求在該第二虛擬通道上發(fā)送。
      2.根據(jù)權(quán)利要求1的計(jì)算機(jī)系統(tǒng),其中該第二處理單元進(jìn)一步包括具有轉(zhuǎn)換后備緩沖 器的存儲(chǔ)器管理單元,且當(dāng)在該轉(zhuǎn)換后備緩沖器中發(fā)生缺失時(shí)該存儲(chǔ)器管理單元產(chǎn)生該派 生的讀請(qǐng)求。
      3.根據(jù)權(quán)利要求1的計(jì)算機(jī)系統(tǒng),進(jìn)一步包括用于該第二處理單元的本地存儲(chǔ)器,其 中該第二處理單元通過(guò)高速緩存存儲(chǔ)器單元與該本地存儲(chǔ)器連接且該高速緩存存儲(chǔ)器單 元產(chǎn)生該派生的讀請(qǐng)求。
      4.根據(jù)權(quán)利要求3的計(jì)算機(jī)系統(tǒng),其中當(dāng)該讀或?qū)懻?qǐng)求訪問(wèn)沒(méi)有存儲(chǔ)在該高速緩存存 儲(chǔ)器單元中的壓縮狀態(tài)信息時(shí),該高速緩存存儲(chǔ)器單元產(chǎn)生該派生的讀請(qǐng)求。
      5.根據(jù)權(quán)利要求3的計(jì)算機(jī)系統(tǒng),其中當(dāng)該讀或?qū)懻?qǐng)求從該系統(tǒng)存儲(chǔ)器的壓縮的區(qū)域 訪問(wèn)數(shù)據(jù)時(shí),該高速緩存存儲(chǔ)器單元產(chǎn)生該派生的讀請(qǐng)求。
      6.根據(jù)權(quán)利要求1的計(jì)算機(jī)系統(tǒng),其中該第二處理單元進(jìn)一步包括存儲(chǔ)器管理單元仲 裁器,該存儲(chǔ)器管理單元仲裁器配置為從多個(gè)客戶端接收讀或?qū)懻?qǐng)求,且如果讀或?qū)懻?qǐng)求 接收自該第一處理單元,將該讀或?qū)懻?qǐng)求標(biāo)記為特殊。
      7.根據(jù)權(quán)利要求6的計(jì)算機(jī)系統(tǒng),其中該客戶端的每個(gè)具有客戶端標(biāo)識(shí)符且該存儲(chǔ)器 管理單元仲裁器配置為檢查與每個(gè)讀或?qū)懻?qǐng)求相關(guān)的該客戶端標(biāo)識(shí)符。
      8.根據(jù)權(quán)利要求1的計(jì)算機(jī)系統(tǒng),其中該第一處理單元是中央處理單元,該第二處理 單元是并行處理單元,和該總線是PCIe總線。
      9.在具有第一處理單元、第二處理單元、存儲(chǔ)器橋、系統(tǒng)存儲(chǔ)器和將該第二處理單元連 接到該第一處理單元、該存儲(chǔ)器橋和該系統(tǒng)存儲(chǔ)器的總線的計(jì)算機(jī)系統(tǒng)中,一種在第二處 理單元處理讀或?qū)懻?qǐng)求的方法,包括以下步驟通過(guò)該總線的第一虛擬通道在該第二處理單元接收讀或?qū)懻?qǐng)求;當(dāng)處理該讀或?qū)懻?qǐng)求時(shí)在該第二處理單元產(chǎn)生一個(gè)或多個(gè)派生的讀請(qǐng)求并將該派生 的讀請(qǐng)求通過(guò)該總線的第二虛擬通道發(fā)送給該系統(tǒng)存儲(chǔ)器;和通過(guò)該總線的該第二虛擬通道接收該派生的讀請(qǐng)求的完成,和完成該最初接收的讀或?qū)懻?qǐng)求。
      10.根據(jù)權(quán)利要求9的方法,其中在處理該讀或?qū)懻?qǐng)求時(shí),當(dāng)訪問(wèn)該系統(tǒng)存儲(chǔ)器的壓縮 的區(qū)域時(shí),產(chǎn)生該派生的讀請(qǐng)求。
      全文摘要
      通過(guò)標(biāo)記CPU流量為特殊來(lái)避免死鎖。通過(guò)將并行處理器發(fā)出給系統(tǒng)存儲(chǔ)器的讀請(qǐng)求標(biāo)記為“特殊”而避免死鎖。標(biāo)記為特殊的與讀請(qǐng)求相關(guān)的讀完成在PCIe總線的虛擬通道1上路由。在虛擬通道1上返回的數(shù)據(jù)不會(huì)由在虛擬通道0上的寫請(qǐng)求停止,因此避免了潛在的死鎖。
      文檔編號(hào)G06F9/38GK101901198SQ200910249698
      公開(kāi)日2010年12月1日 申請(qǐng)日期2009年12月14日 優(yōu)先權(quán)日2008年12月12日
      發(fā)明者丹尼斯·K.·馬, 塞繆爾·H.·鄧肯, 帕特里克·R.·馬爾尚, 戴維·B.·格拉斯科, 阿圖·卡拉姆布爾, 黃偉杰 申請(qǐng)人:輝達(dá)公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1