專利名稱:用于自動(dòng)線程劃分編譯器的裝置和方法
技術(shù)領(lǐng)域:
本發(fā)明的一個(gè)或更多個(gè)實(shí)施方案總地涉及多線程微體系結(jié)構(gòu)。更具體地,本發(fā)明的一個(gè)或更多個(gè)實(shí)施方案涉及用于自動(dòng)線程劃分(thread-partition)編譯器的裝置和方法。
背景技術(shù):
硬件多線程化正成為現(xiàn)代處理器設(shè)計(jì)中的一項(xiàng)實(shí)用技術(shù)。在行業(yè)中已經(jīng)公布了幾種多線程處理器,或者它們在高性能計(jì)算、多媒體處理和網(wǎng)絡(luò)分組(packet)處理領(lǐng)域中處于生產(chǎn)階段。屬于IntelInternet ExchangeTMArchitecture(因特網(wǎng)交換體系結(jié)構(gòu),IXA)網(wǎng)絡(luò)處理器(NP)家族的因特網(wǎng)交換處理器(IXP)系列就是這樣的多線程處理器的實(shí)施例。一般來說,為了滿足分組處理的高性能要求,每個(gè)IXP都包括高度并行、多線程的體系結(jié)構(gòu)。
一般來說,NP被特別地設(shè)計(jì)以執(zhí)行分組處理。常規(guī)地,NP可以用于作為高速通信路由器的核心部件(core element)來執(zhí)行這樣的分組處理。一般來說,用于執(zhí)行分組處理的傳統(tǒng)網(wǎng)絡(luò)應(yīng)用是使用順序語義以常規(guī)的方式編碼的。一般來說,這樣的網(wǎng)絡(luò)應(yīng)用被編碼為使用始終運(yùn)行的分組處理單元(分組處理級(PPS))。因此,當(dāng)新的分組到達(dá)時(shí),PPS執(zhí)行一系列任務(wù)(例如分組的接收、路由表查找和分組的入隊(duì)列)。因此,PPS通常被表達(dá)為無限循環(huán)(或PPS循環(huán)),其中每次迭代處理不同的分組。
因此,盡管高度并行,但是由現(xiàn)代NP提供的多線程體系結(jié)構(gòu)不能在高度未占用處理器資源中利用這些并行化結(jié)果。毫無疑問,如果順序應(yīng)用程序運(yùn)行在由NP提供的高級多線程體系結(jié)構(gòu)之上,則可能會(huì)獲得低的性能增益。為了達(dá)到高性能,編程者嘗試了通過利用順序應(yīng)用的線程級并行性來完全利用NP提供的多線程體系結(jié)構(gòu)。不幸的是,對于大多數(shù)編程者來說,手動(dòng)的線程劃分是一種挑戰(zhàn)。
附圖簡要說明在附圖中,本發(fā)明的各種實(shí)施方案是以實(shí)施例的方式來說明的,而不是以限定的方式來說明的,其中
圖1是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出具有線程劃分編譯器的計(jì)算機(jī)系統(tǒng)的框圖。
圖2A-2C根據(jù)本發(fā)明的一個(gè)實(shí)施方案,描繪了順序分組處理級(PPS)到兩個(gè)應(yīng)用程序線程的變換。
圖3A-3B根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出順序PPS循環(huán)(loop)序列的變換,所述序列包括被一個(gè)或更多個(gè)邊界指令(boundary instruction)包圍的臨界區(qū)。
圖4是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出包括多線程體系結(jié)構(gòu)的處理器的框圖。
圖5是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出用于線程劃分順序應(yīng)用程序的循環(huán)體的方法的框圖。
圖6A-6B是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出控制流圖(CFG循環(huán))的形成的框圖。
圖7是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出用于修改在邊界指令對內(nèi)包括已標(biāo)識臨界區(qū)的CFG循環(huán)的方法的流程圖。
圖8是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出用于減少相應(yīng)的邊界指令對之間的指令量的方法的流程圖。
圖9是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出用于提升(hoisting)移動(dòng)候選指令的方法的流程圖。
圖10是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出流相關(guān)圖(flow dependence graph)的框圖。
圖11是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出用于提升移動(dòng)候選指令的方法的流程圖。
圖12是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出用于下降(sinking)移動(dòng)候選指令的方法的流程圖。
圖13是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出用于下降移動(dòng)候選指令的方法的流程圖。
圖14是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出用于提升移動(dòng)候選指令的方法的流程圖。
圖15A和15B是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出移動(dòng)候選的計(jì)算的框圖。
圖16是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出用于將順序應(yīng)用程序劃分為多個(gè)應(yīng)用程序線程以供并發(fā)執(zhí)行所述程序線程的流程圖。
詳細(xì)描述描述了用于自動(dòng)線程劃分編譯器的方法和裝置。在一個(gè)實(shí)施方案中,所述方法包括順序應(yīng)用程序到多個(gè)應(yīng)用程序線程的變換。一旦被劃分,所述多個(gè)應(yīng)用程序線程作為多線程體系結(jié)構(gòu)的各個(gè)線程并發(fā)地執(zhí)行。因此,通過隱藏存儲器訪問延時(shí)(latency)來達(dá)到并行多線程體系結(jié)構(gòu)的性能提高,隱藏存儲器訪問延時(shí)是通過或者借助于將存儲器訪問與計(jì)算或其他存儲器訪問重疊來進(jìn)行的。
在下面的描述中,使用了某些術(shù)語來描述本發(fā)明的特征。例如,術(shù)語“邏輯”代表被配置為執(zhí)行一個(gè)或更多個(gè)功能的硬件和/或軟件。例如,“硬件”的實(shí)施例包括,但不限制或不限定于,集成電路、有限狀態(tài)機(jī)或甚至組合邏輯。集成電路可以采取諸如微處理器的處理器、專用集成電路、數(shù)字信號處理器、微控制器等等的形式。
“軟件”的實(shí)施例包括應(yīng)用、小應(yīng)用程序(applet)、例程(routine)或甚至指令串形式的可執(zhí)行代碼。軟件可以被儲存在任何計(jì)算機(jī)或機(jī)器可讀介質(zhì)中,例如可編程電子電路、包括易失性存儲器(例如隨機(jī)訪問存儲器等)和/或非易失性存儲器(例如任何類型的只讀存儲器“ROM”,閃存存儲器)半導(dǎo)體存儲器設(shè)備、軟盤、光盤(例如致密盤或數(shù)字視頻盤“DVD”)、硬驅(qū)動(dòng)器盤等等。
在一個(gè)實(shí)施方案中,本發(fā)明可以被提供為可以包括具有存儲在其上的指令的機(jī)器或計(jì)算機(jī)可讀介質(zhì)的制品,所述指令可以用于將計(jì)算機(jī)(或其他電子設(shè)備)編程為根據(jù)本發(fā)明的一個(gè)實(shí)施方案執(zhí)行處理。計(jì)算機(jī)可讀介質(zhì)可以包括,但不限于,軟盤、光盤、致密盤只讀存儲器(CD-ROM)和磁光盤、只讀存儲器(ROM)、隨機(jī)訪問存儲器(RAM)、可擦除可編程只讀存儲器(EPROM)、電可擦除可編程只讀存儲器(EEPROM)、磁卡或光卡、閃存等等。
圖1是根據(jù)本發(fā)明的一個(gè)實(shí)施方案示出包括線程劃分編譯器200的計(jì)算機(jī)系統(tǒng)100的框圖。如所示出的,計(jì)算機(jī)系統(tǒng)100包括CPU 110、存儲器140和耦合到存儲器控制器中心(MCH)120的圖形控制器130。如這里所描述的,MCH 120可以被稱為北橋,并且在一個(gè)實(shí)施方案中,MCH 120可以被稱為存儲器控制器。此外,計(jì)算機(jī)系統(tǒng)100包括I/O(輸入/輸出)控制器中心(ICH)160。如這里所描述的,ICH 160可以被稱為南橋或I/O控制器。南橋,或ICH 160耦合到本地I/O 150和硬盤驅(qū)動(dòng)器設(shè)備(HDD)190。
在示出的實(shí)施方案中,ICH 160耦合到I/O總線172,I/O總線172耦合多個(gè)I/O設(shè)備,例如PCI或外設(shè)部件互連(PCI)設(shè)備170,包括PCI-express、PCI-X、第三代I/O(3GIO)或其他類似的互連協(xié)議。總起來說,MCH 120和ICH 160被稱為芯片組180。如這里所描述的,術(shù)語“芯片組”是以對本領(lǐng)域技術(shù)人員來說眾所周知的方式被用來在整體上描述耦合到CPU 110以執(zhí)行期望的系統(tǒng)功能性的各種器件。在一個(gè)實(shí)施方案中,主存儲器140是易失性存儲器,包括但不限于,隨機(jī)訪問存儲器(RAM)、同步RAM(SRAM)、動(dòng)態(tài)RAM(DRAM)、同步DRAM(SDRAM)、雙倍數(shù)據(jù)率(DDR)SDRAM(DDR SDRAM)、Rambus DRAM(RDRAM)、直接RDRAM(DRDRAM)等等。
系統(tǒng)與常規(guī)計(jì)算機(jī)系統(tǒng)相比,計(jì)算機(jī)系統(tǒng)100包括用于將順序應(yīng)用程序劃分為多個(gè)應(yīng)用程序線程(“線程劃分”)的線程劃分編譯器200。因此,編譯器200可以橋接網(wǎng)絡(luò)處理器的多線程體系結(jié)構(gòu)和用于編碼常規(guī)網(wǎng)絡(luò)應(yīng)用的順序編程模型之間的差距(gap)。解決該問題的一種方法是利用順序應(yīng)用的線程級并行性。不幸的是,對于大多數(shù)編程者來說,對順序應(yīng)用進(jìn)行手動(dòng)地線程劃分是一種挑戰(zhàn)。在一個(gè)實(shí)施方案中,提供線程劃分編譯器200來自動(dòng)地將如圖2A中所示的順序網(wǎng)絡(luò)應(yīng)用線程劃分為如圖2B-2C中所示的多個(gè)程序線程。
參照圖2A,示出順序網(wǎng)絡(luò)應(yīng)用的順序分組處理級(PPS)280。在一個(gè)實(shí)施方案中,PPS 280變換為用于在例如圖4的多線程網(wǎng)絡(luò)處理器400中執(zhí)行的第一程序線程300-1(圖2B)和第二程序線程300-2(圖2C)。在一個(gè)實(shí)施方案中,通過將如參照圖2A示出的傳統(tǒng)網(wǎng)絡(luò)應(yīng)用變換為如參照圖2B-2C示出的多個(gè)程序線程,提高了多線程體系結(jié)構(gòu)的性能。
在一個(gè)實(shí)施方案中,順序PPS無限循環(huán)282變換為多個(gè)程序線程(300-1,300-2),其中在程序線程之間具有優(yōu)化的同步,以達(dá)到改進(jìn)的并行執(zhí)行。不幸的是,順序PPS循環(huán)(例如282)包括相關(guān)操作的順序執(zhí)行,所述相關(guān)操作包括例如循環(huán)承載變量(loop carriedvariable)。如這里所描述的,循環(huán)承載變量是從循環(huán)的一次迭代到另一次迭代的數(shù)據(jù)相關(guān)關(guān)系。在一個(gè)實(shí)施方案中,循環(huán)承載變量包括兩種屬性(i)循環(huán)承載變量在順序PPS的PPS循環(huán)的回邊有效;以及(ii)循環(huán)承載變量的值在PPS循環(huán)體中改變。代表性地,變量i 286代表PPS循環(huán)282的臨界區(qū)(critical section)284中的循環(huán)承載變量,如下面進(jìn)一步詳細(xì)描述的。
在一個(gè)實(shí)施方案中,順序PPS的臨界區(qū)由包圍的邊界指令(302和304)標(biāo)識,如圖2B和圖2C中所示。代表性地,順序PPS 280被線程劃分為兩個(gè)程序線程(300-1和300-2)。一旦被劃分,程序線程的執(zhí)行以線程300-2(線程1)的執(zhí)行開始,其中通過例如輸入程序初始化變量i 282。一旦被初始化,線程劃分300-1(線程0)被告知開始執(zhí)行。一旦臨界區(qū)的執(zhí)行完成,線程300-1通知線程300-2。因此,程序線程300-1執(zhí)行順序PPS循環(huán)282的0、2、4、…、N次迭代,而程序線程300-2執(zhí)行PPS 282的1、3、5、…、M次迭代。
在一個(gè)實(shí)施方案中,通過減少被包括在臨界區(qū)中的指令量來增加并行性水平。因此,通過最小化臨界區(qū)代碼,要求按嚴(yán)格順序的線程次序執(zhí)行的代碼段(fragment)量被最小化。一旦檢測到循環(huán)承載變量和相關(guān)操作,就通過邊界指令區(qū)分臨界區(qū)。因此,在一個(gè)實(shí)施方案中,對于執(zhí)行線程劃分的準(zhǔn)備工作包括識別所有循環(huán)承載變量。在一個(gè)實(shí)施方案中,通過輸入程序來執(zhí)行對循環(huán)承載變量的識別,并且因此省略了關(guān)于檢測循環(huán)承載變量的額外細(xì)節(jié),以避免模糊本發(fā)明的實(shí)施方案的細(xì)節(jié)。
在一個(gè)實(shí)施方案中,線程劃分編譯器200(圖1)維護(hù)順序應(yīng)用程序的程序線程間的順序語義。在一個(gè)實(shí)施方案中,線程劃分編譯器在線程劃分之間引入同步,所述同步足以加強(qiáng)程序線程循環(huán)的迭代之間的相關(guān)性(dependency)。在一個(gè)實(shí)施方案中,提供AWAIT(等待)操作和ADVANCE(前進(jìn))操作來執(zhí)行同步,并且確保程序線程劃分循環(huán)按順序的線程次序執(zhí)行。因此,如參照圖3A-3B所示出的,每個(gè)循環(huán)承載變量被指派到唯一的臨界區(qū)中,以同步對循環(huán)承載變量的訪問,從而形成程序線程300-1(圖3A)和程序線程300-2(圖3B)。
在圖3A-3B中示出的程序表示中,臨界區(qū)被指示為N,并且以特別的AWAIT(N)操作開始,以ADVANCE(N)操作結(jié)束。如這里所描述的,AWAIT指令是指中止當(dāng)前線程的執(zhí)行,直到處理鏈上前一線程通知開始執(zhí)行。如這里所描述的,術(shù)語ADVANCE操作是指告知處理鏈上的后一線程進(jìn)入臨界區(qū)并且開始執(zhí)行臨界區(qū)。在一個(gè)實(shí)施方案中,邊界指令(即AWAIT和ADVANCE指令)同步對循環(huán)承載變量的訪問,以按照嚴(yán)格順序的線程次序完成執(zhí)行。
圖4是示出多處理器的框圖,所述多處理器例如被配置為提供多線程體系結(jié)構(gòu)的網(wǎng)絡(luò)處理器(NP)400。在一個(gè)實(shí)施方案中,NP 400執(zhí)行圖3A和3B的程序線程300-1和程序線程300-2。在一個(gè)實(shí)施方案中,同步塊420執(zhí)行相應(yīng)的ADVANCE和AWAIT指令之間的通信。代表性地,程序線程300-1和300-2由微體系結(jié)構(gòu)線程410(410-1,…,410-N)并行執(zhí)行。因此,NP 400執(zhí)行從順序應(yīng)用程序形成的線程劃分300-1和300-2。在一個(gè)實(shí)施方案中,可以用其他操作來并發(fā)地執(zhí)行存儲器訪問,以通過在存儲器訪問期間完成線程執(zhí)行來隱藏存儲器訪問延時(shí)。
例如,在一個(gè)實(shí)施方案中,網(wǎng)絡(luò)處理器400在圖1的處理器100中實(shí)現(xiàn),從而圖1的處理器100實(shí)現(xiàn)多線程微體系結(jié)構(gòu)。在一個(gè)實(shí)施方案中,可以在任何計(jì)算機(jī)體系結(jié)構(gòu)上執(zhí)行用于傳統(tǒng)網(wǎng)絡(luò)分組處理應(yīng)用的自動(dòng)線程劃分的一般框架,所述自動(dòng)線程劃分的一般框架包括以下特征(1)提供多線程體系結(jié)構(gòu);(2)提供由每個(gè)線程排他地進(jìn)行的線程局部儲存設(shè)備訪問,以及由所有線程進(jìn)行的全局儲存訪問;以及(3)提供線程間通信和同步機(jī)制信號?,F(xiàn)在描述用于實(shí)現(xiàn)本發(fā)明的實(shí)施方案的過程方法。
操作圖5是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出用于線程劃分順序應(yīng)用程序的方法500的流程圖。在處理框502,為順序應(yīng)用程序的循環(huán)體構(gòu)建控制流圖(control flow graph,CFG),以形成CFG循環(huán)。如這里所描述的,CFG是代表對程序的控制流的圖,其中每個(gè)點(diǎn)(vertex)代表基本塊(basic block),并且每條邊代表基本塊之間潛在的控制流??刂屏鲌D具有唯一的源節(jié)點(diǎn)(入口)。在一個(gè)實(shí)施方案中,CFG循環(huán)的形成如參照圖6A和6B示出的。
如圖6A中所示出的,用于順序應(yīng)用600的CFG 600包括節(jié)點(diǎn)602、節(jié)點(diǎn)604和節(jié)點(diǎn)606,以及回邊608。在一個(gè)實(shí)施方案中,線程劃分主要著重于識別順序應(yīng)用程序的PPS循環(huán)。代表性地,CFG 600的PPS循環(huán)體由節(jié)點(diǎn)604、節(jié)點(diǎn)606和回邊608組成。在一個(gè)實(shí)施方案中,如圖6B中所示,通過移除節(jié)點(diǎn)602、邊603和回邊608來形成CFG循環(huán)610。在一個(gè)實(shí)施方案中,CFG循環(huán)610用于使能(enable)順序應(yīng)用程序的PPS循環(huán)體的變換,以最小化臨界區(qū)。
在處理框510,CFG循環(huán)的節(jié)點(diǎn)被更新,以包括在邊界指令對中的順序應(yīng)用程序的已標(biāo)識臨界區(qū)。在一個(gè)實(shí)施方案中,最開始將AWAIT和ADVANCE操作對插入圖6B的CFG循環(huán)610的頂端604和底端606。在一個(gè)實(shí)施方案中,AWAIT和ADVANCE操作被視為臨界區(qū)的邊界。在處理框520,CFG循環(huán)的節(jié)點(diǎn)被修改,以減少在相應(yīng)的邊界指令對之間的指令量,從而形成修改的CFG循環(huán)。
圖7是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出用于更新圖5的處理框510的CFG循環(huán)的節(jié)點(diǎn)的方法511的流程圖。在處理框512,選擇順序應(yīng)用程序的已標(biāo)識臨界區(qū)。在一個(gè)實(shí)施方案中,由輸入程序標(biāo)識順序應(yīng)用程序的臨界區(qū)。如這里所描述的,每個(gè)已標(biāo)識臨界區(qū)與一個(gè)循環(huán)承載變量相對應(yīng)。在一個(gè)實(shí)施方案中,最開始每個(gè)臨界區(qū)包括PPS循環(huán)中的所有指令。因此,初始臨界區(qū)的范圍就是整個(gè)PPS循環(huán)體。代表性地,在處理框514,將AWAIT指令插入CFG循環(huán)的頂端節(jié)點(diǎn)。類似地,在處理框516,將ADVANCE指令插入CFG循環(huán)的底端節(jié)點(diǎn)。
相應(yīng)地,在處理框518,針對順序應(yīng)用程序的每個(gè)已標(biāo)識臨界區(qū)重復(fù)處理框514-516。例如,如參照圖6B所示出的,在節(jié)點(diǎn)604內(nèi)插入AWAIT操作,而在節(jié)點(diǎn)606中插入ADVANCE操作。然而,在臨界區(qū)之間或者在臨界區(qū)內(nèi)的操作的順序的線程次序執(zhí)行要求減少了所執(zhí)行的并行執(zhí)行量,因?yàn)樵谂R界區(qū)中的操作量增加了。在一個(gè)實(shí)施方案中,被包括在臨界區(qū)中的代碼量被最小化,以增加程序線程的并行執(zhí)行。在一個(gè)實(shí)施方案中,使用數(shù)據(jù)流分析以及代碼移動(dòng)來最小化要求以嚴(yán)格順序的線程次序進(jìn)行執(zhí)行的代碼段。
相應(yīng)地,一旦為用于順序應(yīng)用程序的所有已標(biāo)識臨界區(qū)的CFG循環(huán)600插入AWAIT和ADVANCE操作,則在CFG循環(huán)上執(zhí)行代碼移動(dòng),以減少被包括在由AWAIT和ADVANCE操作標(biāo)識的臨界區(qū)內(nèi)的操作量。然而,本領(lǐng)域技術(shù)人員意識到可以使用其他數(shù)據(jù)分析或圖論技術(shù)來執(zhí)行臨界區(qū)內(nèi)的代碼最小化,但是仍然落入所描述的發(fā)明的實(shí)施方案中。
如這里所描述的,數(shù)據(jù)流分析不限于僅對變量的定義和使用(數(shù)據(jù)流)的計(jì)算。數(shù)據(jù)流分析提供用于計(jì)算關(guān)于通過程序或進(jìn)程的路徑的實(shí)際情況的技術(shù)。數(shù)據(jù)流分析概念的前提是控制流圖(CFG)或簡單的流圖,例如參照圖6A所示出的。CFG是俘獲控制流或程序的一部分的有向圖。例如,CFG可以代表進(jìn)程大小的程序段。如這里所描述的,CFG節(jié)點(diǎn)是基本塊(永遠(yuǎn)按次序執(zhí)行的代碼部分),并且邊(edge)代表在基本塊之間的可能控制流。例如,如參照圖6A所示出的,控制流圖600由節(jié)點(diǎn)602-606,以及邊603、605和回邊608組成。
如這里所描述的,代碼移動(dòng)是一種用于塊間和塊內(nèi)指令重新排序(提升/下降)的技術(shù)。在一個(gè)實(shí)施方案中,為了最小化已標(biāo)識臨界區(qū)中的指令/操作量,代碼移動(dòng)將不相關(guān)的代碼移動(dòng)到已標(biāo)識臨界區(qū)之外。為了執(zhí)行塊間和塊內(nèi)的指令重新排序,代碼移動(dòng)最開始標(biāo)識移動(dòng)候選指令(motion candidate instruction)。在一個(gè)實(shí)施方案中,使用數(shù)據(jù)流分析來標(biāo)識移動(dòng)候選指令。代表性地,解決一系列的數(shù)據(jù)流問題來執(zhí)行對已標(biāo)識移動(dòng)候選指令的提升和下降。
圖8是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出用于修改圖5的處理框520的CFG循環(huán)的節(jié)點(diǎn)的方法522的流程圖。在處理框524,使用代碼移動(dòng),用固定的AWAIT邊界指令來在CFG循環(huán)的節(jié)點(diǎn)內(nèi)提升移動(dòng)候選指令。在處理框552,使用代碼移動(dòng),用固定的ADVANCE操作來在CFG循環(huán)的節(jié)點(diǎn)內(nèi)下降移動(dòng)候選指令。在處理框580,使用固定的AWAIT操作和固定的ADVANCE操作來在CFG循環(huán)的節(jié)點(diǎn)內(nèi)提升移動(dòng)候選指令。在一個(gè)實(shí)施方案中,方法522代表根據(jù)本發(fā)明的一個(gè)實(shí)施方案用于限制操作或減少以AWAIT和ADVANCE操作為邊界的操作量的三階段代碼移動(dòng)。
在一個(gè)實(shí)施方案中,使用三階段代碼移動(dòng)來最小化線程劃分循環(huán)的已標(biāo)識臨界區(qū)內(nèi)的操作量。代表性地,代碼移動(dòng)的前兩個(gè)階段分別用固定的AWAIT操作和固定的ADVANCE操作來執(zhí)行代碼移動(dòng)。結(jié)果,ADVANCE操作被放置到最優(yōu)基本塊,并且AWAIT操作被放置到最優(yōu)基本塊。在該實(shí)施方案中,代碼移動(dòng)的最后階段用固定的AWAIT操作和固定的ADVANCE操作執(zhí)行代碼移動(dòng)。代表性地,代碼移動(dòng)的最后階段將不相關(guān)的指令移動(dòng)到臨界區(qū)之外,同時(shí)將AWAIT和ADVANCE操作放置到最優(yōu)位置。
圖9是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出用圖8的處理框524的固定AWAIT操作來提升指令的方法526的流程圖。在處理框528,CFG循環(huán)的基本塊內(nèi)的除AWAIT操作之外的每條指令被標(biāo)識為移動(dòng)候選指令。因此,AWAIT操作不被標(biāo)識為移動(dòng)候選指令。在處理框530,構(gòu)建CFG循環(huán)的逆圖(inverse graph)。在一個(gè)實(shí)施方案中,根據(jù)由逆圖指示的拓?fù)浯涡蚺判蚧緣K。
在處理框550,確定是否不再檢測到提升指令。直到是這種情況,在處理框551,在CFG循環(huán)的基本塊內(nèi)提升移動(dòng)候選指令。在處理框551,根據(jù)順序應(yīng)用程序的相關(guān)圖提升CFG循環(huán)的源基本塊中的指令。如這里所描述的,構(gòu)造相關(guān)圖來圖示PPS循環(huán)體的數(shù)據(jù)相關(guān)性(data dependence),以提供關(guān)于數(shù)據(jù)相關(guān)性的信息。因此,提升或下降任何移動(dòng)候選指令不能違背原始程序上的數(shù)據(jù)相關(guān)性。如這里所描述的,相關(guān)圖示出節(jié)點(diǎn)間的數(shù)據(jù)相關(guān)性和節(jié)點(diǎn)間的控制相關(guān)性。
如參照圖10所示出的,流相關(guān)圖620示出AWAIT操作634、對臨界區(qū)內(nèi)(例如循環(huán)承載變量i)的訪問操作640之間的流相關(guān)性,以及在對循環(huán)承載變量i和ADVANCE操作650之間的流相關(guān)性關(guān)系。因此,流相關(guān)圖620確保對循環(huán)承載變量i的訪問被臨界區(qū)n同步,以使能循環(huán)承載變量i的順序的線程次序執(zhí)行。
圖11是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出用于在圖9的處理框534的CFG循環(huán)的基本塊內(nèi)提升指令的方法536的流程圖。在處理框538,使基本塊從提升隊(duì)列(hoist queue)中出隊(duì)列,作為當(dāng)前塊。在處理框540,基于順序應(yīng)用程序的相關(guān)圖從基本塊的移動(dòng)候選指令計(jì)算提升指令。
在處理框542,將計(jì)算的提升指令提升到相應(yīng)的基本塊,所述提升指令可以被放置在所述基本塊中。在處理框544,確定是否檢測到其他的代碼移動(dòng),例如通過提升計(jì)算的提升指令檢測到的改變。當(dāng)在處理框544檢測到改變時(shí),在處理框546,使來自CFG循環(huán)的當(dāng)前塊的前驅(qū)塊(predecessor)入隊(duì)列到提升隊(duì)列中。在處理框548,重復(fù)處理框538-546,直到提升隊(duì)列為空。
圖12是根據(jù)本發(fā)明的實(shí)施方案,示出用于以圖11的處理框552的固定ADVANCE指令下降檢測到的下降指令的方法554的流程圖。在處理框556,通過數(shù)據(jù)流分析標(biāo)識CFG循環(huán)的基本塊中除ADVANCE操作以外的移動(dòng)候選指令。如上面所提到的,數(shù)據(jù)流分析通過解答一系列數(shù)據(jù)流方程來標(biāo)識提升指令以及下降指令。通常形成數(shù)據(jù)流方程來建立路徑斷定(path predicate)的邏輯真和邏輯假。
路徑斷定是關(guān)于在程序執(zhí)行期間沿特定的控制路徑發(fā)生事情的語句(statement),所述控制路徑在所有這樣的路徑上普遍地或存在性地被量化。如這里所描述的,控制流路徑是CFG循環(huán)中的路徑。例如,定義可到達(dá)性問題詢問每個(gè)控制流節(jié)點(diǎn)n和每個(gè)變量定義d,是否d可以到達(dá)n,其中到達(dá)意味著定義將值賦給變量,并且該變量之后不會(huì)被再定義。例如,路徑斷定可以根據(jù)以下方程表達(dá)。
REACHDEF(節(jié)點(diǎn)n,定義d)=存在從開始到n的路徑p,從而d在p發(fā)生,并且在d之后不發(fā)生定義 (1)如這里所描述的,數(shù)據(jù)流方程將對路徑斷定的答案表示為描述在每個(gè)節(jié)點(diǎn)處的解的方程系統(tǒng)。即,對于CFG中的每個(gè)節(jié)點(diǎn),我們能夠?qū)τ诟信d趣的定義是否到達(dá)節(jié)點(diǎn)說是或者否。例如,考慮如下形式的任何單個(gè)的三地址代碼語句di:x:=y(tǒng) op z (2)該程序語句定義變量x。因此,如這里所描述的,如果在控制流圖的節(jié)點(diǎn)中包括這樣的語句,則包括該程序語句的控制流圖的節(jié)點(diǎn)(N)被設(shè)置為生成定義di,并且刪除定義x的之前的程序語句中任何其他定義。當(dāng)根據(jù)集合來分析時(shí),建立以下關(guān)系式gen[N]=(di)kill[N]=Dx-(di)其中dx指程序中x的其他定義 (3)相應(yīng)地,考慮基本塊N,斷定哪些定義到達(dá)基本塊N要求分析基本塊N的前驅(qū)塊。例如,令符號 代表CFG中兩個(gè)節(jié)點(diǎn)上的前驅(qū)塊關(guān)系,如果在控制流圖中存在從p->b的邊,則我們說p是b的前驅(qū)塊。因此,基于前驅(qū)塊關(guān)系,生成以下數(shù)據(jù)流方程。
out[B]=gen[B]∪(in[B]-kill[B]) (5)相應(yīng)地,為了通過數(shù)據(jù)流分析計(jì)算移動(dòng)候選(motion candidate),并且根據(jù)本發(fā)明的一個(gè)實(shí)施方案,對于每個(gè)指令i,以下數(shù)據(jù)流方程可以如下描述GEN[i]={N|AWAIT(N) 如果i是AWAIT} (6)KILL[i]={N|AWAIT(N) 如果i是ADVANCE} (7)
IN[i]=∪P∈Pred(i)OUT[P]---(8)]]>OUT[i]=GEN[i]∪(IN[i]-KILL[i])(9)相應(yīng)地,在一個(gè)實(shí)施方案中,如下計(jì)算移動(dòng)候選(1)AWAIT被標(biāo)識為移動(dòng)候選;(2)僅當(dāng)IN[i]不等于空集(0)時(shí)指令i為候選。換言之,對于每個(gè)指令i,根據(jù)數(shù)據(jù)流方程生成位向量,以確定指令i是否要被標(biāo)識為移動(dòng)候選。在所描述的實(shí)施方案中,ADVANCE操作不被標(biāo)識為移動(dòng)候選。
再次參照圖12,一旦標(biāo)識了移動(dòng)候選,在處理框558,用CFG循環(huán)的基本塊初始化下降隊(duì)列。在一個(gè)實(shí)施方案中,基于CFG循環(huán)中的拓?fù)浯涡蛟谙陆店?duì)列中對基本塊進(jìn)行排序。在處理框560,移動(dòng)候選指令在基本塊(basing block)之間下降,直到在處理框574中不再檢測到下降指令。在處理框576,根據(jù)順序應(yīng)用程序的相關(guān)圖,移動(dòng)候選指令在包括ADVANCE操作的基本塊內(nèi)下降。
換言之,對下降指令以及提升指令的檢測和下降不應(yīng)該違背由順序應(yīng)用程序的相關(guān)圖所指示的任何數(shù)據(jù)相關(guān)性,或者例如控制相關(guān)性。換言之,與相關(guān)圖的一致性確保從順序應(yīng)用程序生成程序線程。在一個(gè)實(shí)施方案中,程序線程維持原始程序的順序語義,并且執(zhí)行與順序應(yīng)用程序的PPS循環(huán)相對應(yīng)的程序線程迭代之間的相關(guān)性。
圖13是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出用于下降圖12的處理框560的移動(dòng)候選指令的方法562的流程圖。在處理框564,使基本塊從下降隊(duì)列(sink queue)中出隊(duì)列,作為當(dāng)前塊。在處理框566,基于順序應(yīng)用程序的相關(guān)圖為在基本塊中標(biāo)識的移動(dòng)候選指令計(jì)算下降指令,以維持順序應(yīng)用程序的順序語義。在處理框567,計(jì)算的下降指令下降到相應(yīng)的基本塊中。在處理框570,如果在處理框568檢測到作為計(jì)算的下降指令下降的結(jié)果的代碼移動(dòng)改變,則使CFG循環(huán)中當(dāng)前塊的后繼塊(successor)入隊(duì)列到下降隊(duì)列中。在處理框572,重復(fù)處理框564-570,直到下降隊(duì)列為空。
圖14是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出用圖8的處理框580的固定的AWAIT指令和ADVANCE指令來提升移動(dòng)候選指令的方法582的流程圖。在處理框584,使用數(shù)據(jù)流分析,用固定的AWAIT操作和ADVANCE操作來從基本塊中檢測移動(dòng)候選指令。在一個(gè)實(shí)施方案中,根據(jù)上面描述的數(shù)據(jù)流分析計(jì)算移動(dòng)候選。
在一個(gè)實(shí)施方案中,用CFG循環(huán)的基本塊初始化提升隊(duì)列。在一個(gè)實(shí)施方案中,基于CFG循環(huán)中的拓?fù)浯涡蚺判蚧緣K。在處理框586,在基本塊之間提升移動(dòng)候選指令,直到不再檢測到提升指令。在處理框588,基于順序應(yīng)用程序的相關(guān)圖,在包括AWAIT指令的基本塊內(nèi)提升檢測到的提升指令,以保持原始程序次序。
在一個(gè)實(shí)施方案中,處理框588描述塊內(nèi)提升。在這樣的實(shí)施方案中,在基本塊中提升除AWAIT操作和ADVANCE操作之外的移動(dòng)候選,所述基本塊包括盡可能高的AWAIT操作而不違背相關(guān)圖。在一個(gè)實(shí)施方案中,被提升到最外層的臨界區(qū)之外的指令不再被認(rèn)為是移動(dòng)候選。例如,如參照圖15A-15C所示出的,被提升或下降到最外層ADVANCE操作664或最外層AWAIT操作662之外的指令(667/668)不再被視為提升候選指令或下降候選指令。一旦在CFG循環(huán)上執(zhí)行了代碼移動(dòng),就形成修改的CFG,所述修改的CFG可以用來形成順序應(yīng)用程序的并行版本的程序線程。
圖16是根據(jù)本發(fā)明的一個(gè)實(shí)施方案,示出用于將順序應(yīng)用程序劃分為多個(gè)應(yīng)用程序劃分線程的方法590的流程圖。在處理框592,使用處理框520(圖5)的修改的控制流圖來形成順序應(yīng)用程序的程序線程。一旦形成多個(gè)程序線程,在處理框594,在多線程體系結(jié)構(gòu)的各個(gè)線程中并發(fā)地執(zhí)行所述多個(gè)程序線程。在一個(gè)實(shí)施方案中,參照圖4示出程序線程的并發(fā)執(zhí)行。
相應(yīng)地,在一個(gè)實(shí)施方案中,線程劃分編譯器使用三階段代碼移動(dòng)來提供順序應(yīng)用程序的自動(dòng)多線程變換,以達(dá)到提高的并行化性。在多線程體系結(jié)構(gòu)中,在任何一個(gè)時(shí)刻只有一個(gè)線程有效。因此,通過將存儲器訪問與計(jì)算或者由其他線程執(zhí)行的存儲器訪問重疊來隱藏存儲器延時(shí),可以大大提高網(wǎng)絡(luò)分組處理級的行處理速率(line rate)。
可替換的實(shí)施方案已經(jīng)描述了用于提供多個(gè)程序線程的線程劃分編譯器的一個(gè)實(shí)現(xiàn)的幾個(gè)方面。然而,線程劃分編譯器的各種實(shí)現(xiàn)提供包括、補(bǔ)足、補(bǔ)充和/或替代上述特征的很多特征。在不同實(shí)施方案的實(shí)現(xiàn)中,特征可以被實(shí)現(xiàn)為編譯器的一部分或硬件/軟件翻譯處理的一部分。此外,出于解釋的目的,前面的描述使用具體的術(shù)語來提供對本發(fā)明的實(shí)施方案的全面理解。然而,本領(lǐng)域的技術(shù)人員將會(huì)清楚,不要求所述具體細(xì)節(jié)來實(shí)踐本發(fā)明的實(shí)施方案。
此外,盡管這里描述的實(shí)施方案指向線程劃分編譯器,但是本領(lǐng)域技術(shù)人員將會(huì)意識到本發(fā)明的實(shí)施方案可以應(yīng)用于其他系統(tǒng)。事實(shí)上,如由所附權(quán)利要求書所定義的那樣,用于在臨界區(qū)中執(zhí)行代碼移動(dòng)的數(shù)據(jù)分析或圖論技術(shù)落入本發(fā)明的實(shí)施方案中。為了最佳地解釋本發(fā)明的實(shí)施方案的原理和它的實(shí)踐應(yīng)用,選擇并描述上述實(shí)施方案。這些實(shí)施方案被選擇,由此使本領(lǐng)域的其他技術(shù)人員能夠用適合于所預(yù)期的特定使用的各種修改來最佳地利用本發(fā)明和各種實(shí)施方案。
應(yīng)該理解,盡管在前面的描述中已經(jīng)闡述本發(fā)明的各種實(shí)施方案的很多特性和優(yōu)勢以及本發(fā)明的各種實(shí)施方案的結(jié)構(gòu)和功能的細(xì)節(jié),但是此公開僅僅是說明性的。在一些情況下,僅使用一個(gè)這樣的實(shí)施方案來詳細(xì)描述某些子配件(subassembly)。然而,應(yīng)該認(rèn)識到并期望,可以在本發(fā)明的其他實(shí)施方案中使用這樣的子配件。在本發(fā)明的實(shí)施方案的原理內(nèi),在由所附權(quán)利要求書被表達(dá)的語句的寬泛的通用意義所指定的程度上,可以在細(xì)節(jié)上,特別是在組成部分的結(jié)構(gòu)和管理上作出改變。
已經(jīng)公開示例性實(shí)施方案和最佳模式,可以對已公開實(shí)施方案作出修改和變化,同時(shí)仍然落入所附權(quán)利要求書所定義的本發(fā)明的實(shí)施方案的范圍內(nèi)。
權(quán)利要求
1.一種方法,包括為順序應(yīng)用程序的循環(huán)體構(gòu)建控制流圖(CFG),以形成CFG循環(huán);更新所述CFG循環(huán)的節(jié)點(diǎn),以包括在邊界指令對中的順序應(yīng)用程序的已標(biāo)識臨界區(qū);以及修改所述CFG循環(huán)的節(jié)點(diǎn),以減少在相應(yīng)的約束指令對之間的指令量,從而形成修改的CFG循環(huán)。
2.如權(quán)利要求1所述的方法,其中更新所述CFG循環(huán)的操作包括選擇所述順序應(yīng)用程序的已標(biāo)識臨界區(qū);在所述CFG循環(huán)的頂端節(jié)點(diǎn)內(nèi)插入等待指令;在所述CFG循環(huán)的底端節(jié)點(diǎn)內(nèi)插入前進(jìn)指令;以及對所述順序應(yīng)用程序的每個(gè)已標(biāo)識臨界區(qū)重復(fù)所述選擇、插入和插入操作。
3.如權(quán)利要求1所述的方法,其中修改所述CFG循環(huán)的節(jié)點(diǎn)的操作包括使用代碼移動(dòng),用固定的等待邊界指令在所述CFG循環(huán)的所述節(jié)點(diǎn)內(nèi)提升已標(biāo)識移動(dòng)候選指令;使用代碼移動(dòng),用固定的前進(jìn)指令在所述CFG循環(huán)的所述節(jié)點(diǎn)內(nèi)下降已標(biāo)識移動(dòng)候選指令;以及用固定的等待指令和固定的前進(jìn)指令在所述CFG循環(huán)的所述節(jié)點(diǎn)內(nèi)提升已標(biāo)識移動(dòng)候選指令。
4.如權(quán)利要求3所述的方法,其中用固定的等待指令提升檢測到的提升指令的操作包括將所述CFG循環(huán)的基本塊內(nèi)除等待指令之外的每條指令標(biāo)識為移動(dòng)候選指令;構(gòu)建所述CFG循環(huán)的逆圖;用來自所述CFG循環(huán)的所述基本塊初始化提升隊(duì)列,所述基本塊按照由所述逆圖指示的拓?fù)浯涡蚺判颍惶嵘龌緣K的移動(dòng)候選指令,直到不再從所述移動(dòng)候選指令檢測到提升指令;以及根據(jù)所述順序應(yīng)用程序的相關(guān)圖提升從所述CFG循環(huán)的源基本塊中的移動(dòng)候選指令檢測到的提升指令。
5.如權(quán)利要求4所述的方法,其中提升從所述基本塊的所述移動(dòng)候選指令中檢測到的提升指令的操作包括使基本塊從所述提升隊(duì)列中出對列,作為當(dāng)前塊;基于所述順序應(yīng)用程序的相關(guān)圖從所述基本塊的所述移動(dòng)候選指令計(jì)算提升指令;將計(jì)算的提升指令提升到相應(yīng)的基本塊中;以及當(dāng)檢測到改變時(shí),使所述當(dāng)前塊的前驅(qū)塊從所述CFG循環(huán)入隊(duì)列到所述提升隊(duì)列。
6.如權(quán)利要求4所述的方法,其中用固定的前進(jìn)指令下降檢測到的下降指令的操作包括通過數(shù)據(jù)流分析,用固定的前進(jìn)指令標(biāo)識所述CFG循環(huán)的所述基本塊內(nèi)的移動(dòng)候選指令;用基于所述CFG循環(huán)中的拓?fù)浯涡蚺判虻乃龌緣K初始化下降隊(duì)列;在所述基本塊之間下降檢測到的下降指令,直到不再檢測到下降指令;以及根據(jù)所述相關(guān)圖,在包括前進(jìn)指令的基本塊內(nèi)下降檢測到的移動(dòng)候選。
7.如權(quán)利要求6所述的方法,其中在所述基本塊之間下降檢測到的下降指令的操作包括使基本塊從所述下降隊(duì)列出隊(duì)列,作為當(dāng)前塊;基于所述順序應(yīng)用程序的相關(guān)圖從移動(dòng)候選指令計(jì)算下降指令;將計(jì)算的下降指令下降到相應(yīng)的基本塊;以及如果檢測到改變,使所述CFG循環(huán)中的當(dāng)前塊的后繼塊入隊(duì)列到所述下降隊(duì)列中。
8.如權(quán)利要求3所述的方法,其中用所述固定的等待指令和前進(jìn)指令執(zhí)行指令提升的操作包括用基于所述CFG循環(huán)中的拓?fù)浯涡蚺判虻乃龌緣K初始化提升隊(duì)列;通過數(shù)據(jù)流分析,用固定的前進(jìn)指令和固定的等待指令標(biāo)識所述CFG循環(huán)的所述基本塊內(nèi)的移動(dòng)候選指令;在所述基本塊之間提升檢測到的提升指令,直到不再檢測到提升指令;以及基于所述順序應(yīng)用程序的相關(guān)圖,在包括等待指令的基本塊內(nèi)提升移動(dòng)候選。
9.如權(quán)利要求8所述的方法,其中被提升到最外層等待指令之外的移動(dòng)候選指令不再被作為移動(dòng)候選來對待;并且其中在最外層前進(jìn)指令之外的移動(dòng)候選指令不再被作為移動(dòng)候選來對待。
10.如權(quán)利要求1所述的方法,還包括從所述修改的CFG循環(huán)形成多個(gè)應(yīng)用程序線程劃分;以及在多線程系統(tǒng)結(jié)構(gòu)的各個(gè)線程內(nèi)并發(fā)地執(zhí)行所述多個(gè)應(yīng)用程序線程。
11.一種包括具有儲存在其上的指令的機(jī)器可讀介質(zhì)的制品,所述指令可以被用來編程系統(tǒng)以執(zhí)行方法,所述方法包括為順序應(yīng)用程序的循環(huán)體構(gòu)建控制流圖(CFG),以形成CFG循環(huán);更新所述CFG循環(huán)的節(jié)點(diǎn),以包括在邊界指令對中的順序應(yīng)用程序的已標(biāo)識臨界區(qū);以及修改所述CFG循環(huán)的節(jié)點(diǎn),以減少在相應(yīng)的約束指令對之間的指令量,從而形成修改的CFG循環(huán)。
12.如權(quán)利要求11所述的制品,更新所述CFG循環(huán)的操作包括選擇所述順序應(yīng)用程序的已標(biāo)識臨界區(qū);在所述CFG循環(huán)的頂端節(jié)點(diǎn)內(nèi)插入等待指令;在所述CFG循環(huán)的底端節(jié)點(diǎn)內(nèi)插入前進(jìn)指令;以及為所述順序應(yīng)用程序的每個(gè)已標(biāo)識臨界區(qū)重復(fù)所述選擇、插入和插入操作。
13.如權(quán)利要求11所述的制品,其中修改所述CFG循環(huán)的節(jié)點(diǎn)的操作包括使用代碼移動(dòng),用固定的等待邊界指令在所述CFG循環(huán)的所述節(jié)點(diǎn)內(nèi)提升已標(biāo)識移動(dòng)候選指令;使用代碼移動(dòng),用固定的前進(jìn)指令在所述CFG循環(huán)的所述節(jié)點(diǎn)內(nèi)下降已標(biāo)識移動(dòng)候選指令;以及用固定的等待指令和固定的前進(jìn)指令在所述CFG循環(huán)的所述節(jié)點(diǎn)內(nèi)提升已標(biāo)識移動(dòng)候選指令。
14.如權(quán)利要求13所述的制品,其中用固定的等待指令提升檢測到的提升指令的操作包括將所述CFG循環(huán)的基本塊內(nèi)除等待指令之外的每條指令標(biāo)識為移動(dòng)候選指令;構(gòu)建所述CFG循環(huán)的逆圖;用來自所述CFG循環(huán)的所述基本塊初始化提升隊(duì)列,所述基本塊按照由所述逆圖指示的拓?fù)浯涡蚺判颍惶嵘龌緣K的移動(dòng)候選指令,直到不再從所述移動(dòng)候選指令檢測到提升指令;以及根據(jù)所述順序應(yīng)用程序的相關(guān)圖提升從所述CFG循環(huán)的源基本塊中的移動(dòng)候選指令檢測到的提升指令。
15.如權(quán)利要求14所述的制品,其中提升從所述基本塊的所述移動(dòng)候選指令中檢測到的提升指令的操作包括使基本塊從所述提升隊(duì)列中出對列,作為當(dāng)前塊;基于所述順序應(yīng)用程序的相關(guān)圖從所述基本塊的所述移動(dòng)候選指令計(jì)算提升指令;將計(jì)算的提升指令提升到相應(yīng)的基本塊中;以及當(dāng)檢測到改變時(shí),使所述當(dāng)前塊的前驅(qū)塊從所述CFG循環(huán)入隊(duì)列到所述提升隊(duì)列。
16.如權(quán)利要求14所述的制品,其中用固定的前進(jìn)指令下降檢測到的下降指令的操作包括通過數(shù)據(jù)流分析,用固定的前進(jìn)指令標(biāo)識所述CFG循環(huán)的所述基本塊內(nèi)的移動(dòng)候選指令;用基于所述CFG循環(huán)中的拓?fù)浯涡蚺判虻乃龌緣K初始化下降隊(duì)列;在所述基本塊之間下降檢測到的下降指令,直到不再檢測到下降指令;以及根據(jù)所述相關(guān)圖,在包括前進(jìn)指令的基本塊內(nèi)下降檢測到的移動(dòng)候選。
17.如權(quán)利要求16所述的制品,其中在所述基本塊之間下降檢測到的下降指令的操作包括使基本塊從所述下降隊(duì)列出隊(duì)列,作為當(dāng)前塊;基于所述順序應(yīng)用程序的相關(guān)圖從移動(dòng)候選指令計(jì)算下降指令;將計(jì)算的下降指令下降到相應(yīng)的基本塊;以及如果檢測到改變,使所述CFG循環(huán)中的當(dāng)前塊的后繼塊入隊(duì)列到所述下降隊(duì)列中。
18.如權(quán)利要求13所述的制品,其中用所述固定的等待指令和前進(jìn)指令執(zhí)行指令提升的操作包括用基于所述CFG循環(huán)中的拓?fù)浯涡蚺判虻乃龌緣K初始化提升隊(duì)列;通過數(shù)據(jù)流分析,用固定的前進(jìn)指令和固定的等待指令標(biāo)識所述CFG循環(huán)的所述基本塊內(nèi)的移動(dòng)候選指令;在所述基本塊之間提升檢測到的提升指令,直到不再檢測到提升指令;以及基于所述順序應(yīng)用程序的相關(guān)圖,在包括等待指令的基本塊內(nèi)提升移動(dòng)候選。
19.如權(quán)利要求18所述的制品,其中被提升到最外層等待指令之外的移動(dòng)候選指令不再被作為移動(dòng)候選來對待;并且其中在最外層前進(jìn)指令之外的移動(dòng)候選指令不再被作為移動(dòng)候選來對待。
20.如權(quán)利要求11所述的制品,還包括從所述修改的CFG循環(huán)形成多個(gè)應(yīng)用程序線程劃分;以及在多線程系統(tǒng)結(jié)構(gòu)的各個(gè)線程內(nèi)并發(fā)地執(zhí)行所述多個(gè)應(yīng)用程序線程。
21.一種方法,包括將順序應(yīng)用程序劃分為多個(gè)應(yīng)用程序線程;以及在多線程系統(tǒng)結(jié)構(gòu)的各個(gè)線程中并發(fā)地執(zhí)行所述多個(gè)應(yīng)用程序線程。
22.如權(quán)利要求21所述的方法,其中劃分所述順序應(yīng)用程序的操作包括確定多線程體系結(jié)構(gòu)的線程計(jì)數(shù);接收所述順序應(yīng)用程序內(nèi)的已標(biāo)識臨界區(qū);以及根據(jù)所述線程計(jì)數(shù)生成多個(gè)應(yīng)用程序線程,以在所述多個(gè)應(yīng)用程序線程之間同步對已標(biāo)識臨界區(qū)的訪問。
23.如權(quán)利要求21所述的方法,其中并發(fā)地執(zhí)行的操作還包括通過不同的多線程體系結(jié)構(gòu)執(zhí)行線程程序循環(huán)的每次迭代;以及以順序的線程次序執(zhí)行所述線程程序循環(huán)的臨界區(qū)。
24.如權(quán)利要求22所述的方法,其中生成所述應(yīng)用程序線程的操作包括處理已標(biāo)識臨界區(qū),以減少被包括在線程程序循環(huán)的臨界區(qū)內(nèi)的代碼量。
25.如權(quán)利要求24所述的方法,其中使用代碼移動(dòng)來減少所述線程程序循環(huán)的臨界區(qū)內(nèi)的所述代碼量。
26.一種包括具有儲存在其上的指令的機(jī)器可讀介質(zhì)的制品,所述指令可以被用來編程系統(tǒng)以執(zhí)行方法,所述方法包括將順序應(yīng)用程序劃分為多個(gè)應(yīng)用程序線程;以及在多線程系統(tǒng)結(jié)構(gòu)的各個(gè)線程中并發(fā)地執(zhí)行所述多個(gè)應(yīng)用程序線程。
27.如權(quán)利要求26所述的制品,其中劃分所述順序應(yīng)用程序的操作包括確定多線程體系結(jié)構(gòu)的線程計(jì)數(shù);接收所述順序應(yīng)用程序內(nèi)的已標(biāo)識臨界區(qū);以及根據(jù)所述線程計(jì)數(shù)生成多個(gè)應(yīng)用程序線程,以在所述多個(gè)應(yīng)用程序線程之間同步對已標(biāo)識臨界區(qū)的訪問。
28.如權(quán)利要求26所述的制品,其中并發(fā)地執(zhí)行的操作還包括通過不同的多線程體系結(jié)構(gòu)執(zhí)行線程程序循環(huán)的每次迭代;以及以順序的線程次序執(zhí)行所述線程程序循環(huán)的臨界區(qū)。
29.如權(quán)利要求27所述的制品,其中生成所述應(yīng)用程序線程的操作包括處理已標(biāo)識臨界區(qū),以減少被包括在線程程序循環(huán)的臨界區(qū)內(nèi)的代碼量。
30.如權(quán)利要求29所述的制品,其中使用代碼移動(dòng)來減少所述線程程序循環(huán)的臨界區(qū)內(nèi)的所述代碼量。
31.一種裝置,包括處理器;耦合到所述處理器的存儲器,所述存儲器包括編譯器,所述編譯器導(dǎo)致將順序應(yīng)用程序劃分為多個(gè)應(yīng)用程序線程,以使能在多線程系統(tǒng)結(jié)構(gòu)的各個(gè)線程內(nèi)所述多個(gè)程序線程的并發(fā)執(zhí)行。
32.如權(quán)利要求31所述的裝置,其中所述編譯器導(dǎo)致為順序應(yīng)用程序的循環(huán)體構(gòu)建控制流圖(CFG),以形成CFG循環(huán),所述編譯器導(dǎo)致更新所述CFG循環(huán)的節(jié)點(diǎn),以包括在邊界指令對中的順序應(yīng)用程序的已標(biāo)識臨界區(qū),所述編譯器導(dǎo)致修改所述CFG循環(huán)的節(jié)點(diǎn),以減少在相應(yīng)的約束指令對之間的指令量,從而形成修改的CFG循環(huán)。
33.如權(quán)利要求32所述的裝置,其中所述編譯器導(dǎo)致使用代碼移動(dòng)用固定的等待邊界指令在所述CFG循環(huán)的所述節(jié)點(diǎn)內(nèi)提升已標(biāo)識移動(dòng)候選指令,所述編譯器導(dǎo)致使用代碼移動(dòng)用固定的前進(jìn)指令在所述CFG循環(huán)的所述節(jié)點(diǎn)內(nèi)下降已標(biāo)識移動(dòng)候選指令,所述編譯器導(dǎo)致用固定的等待指令和固定的前進(jìn)指令在所述CFG循環(huán)的所述節(jié)點(diǎn)內(nèi)提升移動(dòng)候選指令。
34.一種系統(tǒng),包括處理器;耦合到所述處理器的存儲器控制器;以及耦合到所述處理器的DDR SRAM存儲器,所述存儲器包括編譯器,所述編譯器導(dǎo)致將順序應(yīng)用程序劃分為多個(gè)應(yīng)用程序線程,以使能在多線程系統(tǒng)結(jié)構(gòu)的各個(gè)線程內(nèi)所述多個(gè)應(yīng)用程序線程的并發(fā)執(zhí)行。
35.如權(quán)利要求34所述的系統(tǒng),其中所述編譯器導(dǎo)致為順序應(yīng)用程序的循環(huán)體構(gòu)建控制流圖(CFG),以形成CFG循環(huán),所述編譯器導(dǎo)致更新所述CFG循環(huán)的節(jié)點(diǎn),以包括在邊界指令對中的順序應(yīng)用程序的已標(biāo)識臨界區(qū),所述編譯器導(dǎo)致修改所述CFG循環(huán)的節(jié)點(diǎn),以減少在相應(yīng)的約束指令對之間的指令量,從而形成修改的CFG循環(huán)。
36.如權(quán)利要求35所述的系統(tǒng),其中所述編譯器導(dǎo)致使用代碼移動(dòng)用固定的等待邊界指令在所述CFG循環(huán)的所述節(jié)點(diǎn)內(nèi)提升已標(biāo)識移動(dòng)候選指令,所述編譯器導(dǎo)致使用代碼移動(dòng)用固定的前進(jìn)指令在所述CFG循環(huán)的所述節(jié)點(diǎn)內(nèi)下降已標(biāo)識移動(dòng)候選指令,所述編譯器導(dǎo)致用固定的等待指令和固定的前進(jìn)指令在所述CFG循環(huán)的所述節(jié)點(diǎn)內(nèi)提升移動(dòng)候選指令。
全文摘要
在一些實(shí)施方案中,描述了用于自動(dòng)的線程劃分編譯器的方法和裝置。在一些實(shí)施方案中,所述方法包括順序應(yīng)用程序到多個(gè)應(yīng)用程序線程的變換。一旦被劃分,所述多個(gè)應(yīng)用程序線程作為多線程體系結(jié)構(gòu)的各個(gè)線程并發(fā)地執(zhí)行。因此,通過隱藏存儲器訪問延時(shí)來達(dá)到并行多線程體系結(jié)構(gòu)的性能提高,隱藏存儲器訪問延時(shí)是通過或者借助于將存儲器訪問與計(jì)算或其他存儲器訪問重疊來進(jìn)行的。描述了其他實(shí)施方案并主張對它們的權(quán)利要求。
文檔編號G06F9/48GK1906578SQ200480040477
公開日2007年1月31日 申請日期2004年11月5日 優(yōu)先權(quán)日2003年11月14日
發(fā)明者L·李, 科頓·錫德, B·黃, 威廉·哈里森三世, J·戴 申請人:英特爾公司