欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

使用寫入掩碼的具有simd架構(gòu)的寄存器分配的制作方法

文檔序號(hào):6354841閱讀:296來(lái)源:國(guó)知局
專利名稱:使用寫入掩碼的具有simd架構(gòu)的寄存器分配的制作方法
使用寫入掩碼的具有SIMD架構(gòu)的寄存器分配
背景技術(shù)
本發(fā)明總體上涉及處理器,并且具體地涉及單指令多數(shù)據(jù)處理器。單指令多數(shù)據(jù)(SIMD)處理器是在其中每一個(gè)指令可以并行地操作多個(gè)數(shù)據(jù)元素的處理器。一些單指令多數(shù)據(jù)處理器可以以不同長(zhǎng)度進(jìn)行操作,例如SIMD8、SIMD16,或 SIMD32。物理SIMD寄存器具有可以用來(lái)存儲(chǔ)多個(gè)小數(shù)據(jù)元素的大量比特。操作的模式可以大致的描述為SIMDmxn,其中“m”是描述向量大小的數(shù)值項(xiàng),以及“η”是在SIMD中執(zhí)行的并發(fā)程序流的數(shù)量。SIMD8,SIMDlxS的簡(jiǎn)稱,基于陣列數(shù)據(jù)結(jié)構(gòu)的結(jié)構(gòu)來(lái)表示SIMD操作, 其中一個(gè)寄存器包含由八個(gè)向量構(gòu)成的一個(gè)數(shù)據(jù)元素(同一個(gè))。有效地,存在八個(gè)并發(fā)程序流。SIMD16是SIMDlxl6的簡(jiǎn)稱,其中每一個(gè)SIMD指令對(duì)包含由16個(gè)向量構(gòu)成的一個(gè)數(shù)據(jù)元素(同一個(gè))的一對(duì)寄存器進(jìn)行操作。SIMD16具有16個(gè)并發(fā)程序流。寫入掩碼(write mask)可以用于允許通過(guò)一個(gè)控制流分支來(lái)計(jì)算寄存器的一部分并通過(guò)另一控制流分支來(lái)計(jì)算寄存器的另一部分。當(dāng)用一個(gè)控制流分支中的一個(gè)掩碼寫入的寄存器被用并行控制流分支中不同的掩碼寫入時(shí),可能發(fā)生執(zhí)行錯(cuò)誤。例如,簡(jiǎn)單執(zhí)行錯(cuò)誤在將常量數(shù)據(jù)塊加載到在“那么”(then)分支中也被寫入的寄存器中的指令的“并行”分支中使用“無(wú)掩碼”修飾符(modifier)。具有無(wú)掩碼修飾符的指令可以重寫在“那么”分支中寫入的數(shù)據(jù)。如果省略無(wú)掩碼修飾符或如果將不同寄存器用作所述塊加載的目的地,那么將重寫沒(méi)有意義的數(shù)據(jù)。然而,在該情況下,需要無(wú)掩碼修飾符,并且大部分寄存器分配算法將允許相同目的地用于每一個(gè)指令。通常地,這意味著除非所有的“并行”分支使用相同類型的掩碼,例如相同寬度的掩碼,否則不可以使用掩碼修飾符或?qū)懭胙诖a。這種無(wú)法使用具有不同寫入掩碼類型的寫入掩碼或掩碼修飾符可能導(dǎo)致效率降低,因?yàn)槭褂幂^少數(shù)量的并發(fā)程序流。


圖1是本發(fā)明的一個(gè)實(shí)施例的流程圖;圖2是根據(jù)一個(gè)實(shí)施例的圖1中示出的流程圖的構(gòu)建階段的流程圖;圖3是假設(shè)的控制流圖;圖4是假設(shè)的支配樹(shù);圖5是根據(jù)本發(fā)明的另一實(shí)施例的構(gòu)建階段的流程圖;以及圖6是根據(jù)一個(gè)實(shí)施例的計(jì)算機(jī)系統(tǒng)的示意性描述。
具體實(shí)施例方式根據(jù)本發(fā)明的一些實(shí)施例,可以在寄存器分配算法的構(gòu)建階段之前或期間檢測(cè)不能具有不兼容(即,沖突)的寫入掩碼的生命期(live range) 0因此,可以檢測(cè)沖突并可以采取糾正動(dòng)作。這與傳統(tǒng)技術(shù)形成對(duì)比,所述傳統(tǒng)技術(shù)簡(jiǎn)單地確定是否可能存在沖突并且采取糾正動(dòng)作,而不管沖突是否事實(shí)上已經(jīng)發(fā)生。
根據(jù)一些實(shí)施例,可以通過(guò)為沖突圖增加邊來(lái)修補(bǔ)這些沖突。這與可以簡(jiǎn)單地排除兩種不同單指令多數(shù)據(jù)模式的使用的傳統(tǒng)技術(shù)形成對(duì)比。因此,例如,在允許SIMD8和 SIMD16 二者的架構(gòu)中,在一些傳統(tǒng)的方法中,只有使用較小數(shù)量的流的模式可以被使用或只有寫入掩碼的較低部分可以被使用,以避免沖突的可能性。在一些實(shí)施例中,可以使用圖著色寄存器分配算法來(lái)為特定的寄存器分配變量和生命期。在這種情況下,如圖1所說(shuō)明的,可以將檢測(cè)和沖突消解二者添加到寄存器分配算法的構(gòu)建階段。寄存器分配是將程序變量分派到少數(shù)量的處理器寄存器中的過(guò)程??偟哪繕?biāo)是將盡可能多的操作數(shù)保持在寄存器中以最大化結(jié)果程序的執(zhí)行速度。已知不同的寄存器分配機(jī)制,包括裝箱、諸如Chow式分配器的基于優(yōu)先級(jí)的圖著色、諸如Chaitin式分配器的自底向上的圖著色,以及線性掃描寄存器分配方法(常用在即時(shí)(JIT)編譯器中)。根據(jù)本發(fā)明的一些實(shí)施例,使用了 Chaitin-Briggs圖著色寄存器分配算法,但是在其他實(shí)施例中,可以使用其他寄存器分配算法。寄存器分配算法試圖保證在并行控制流分支中不使用不兼容的掩碼來(lái)寫入寄存器。在一些實(shí)施例中,這可以通過(guò)使用圖1中所示的圖著色寄存器分配算法10來(lái)完成。思想是將盡可能多的變量分配到寄存器并且只在必要時(shí)將變量拋出到主存儲(chǔ)器。根據(jù)使用 Chaitin-Briggs圖著色的實(shí)施例,在重編號(hào)階段12,每一個(gè)變量被給予其自身唯一編號(hào)的邏輯寄存器。該重編號(hào)階段也可以被稱為寄存器變量識(shí)別。在構(gòu)建階段14,獲得沖突圖。變量和生命期被表示為無(wú)向圖中的頂點(diǎn),并且當(dāng)兩個(gè)頂點(diǎn)(也被稱為“結(jié)點(diǎn)”)對(duì)應(yīng)的變量由于同時(shí)存在而沖突時(shí)可以通過(guò)邊將它們連接起來(lái)。 可以將該圖的頂點(diǎn)著色視為寄存器分配,其中由頂點(diǎn)顏色來(lái)表示每一個(gè)寄存器并且沒(méi)有頂點(diǎn)具有與其鄰居相同的顏色。生命期是變量活動(dòng)的時(shí)間間隔。在一些實(shí)施例中,可以可互換地看待變量和生命期。當(dāng)兩個(gè)變量同時(shí)存在并且由此沖突時(shí)在它們之間畫(huà)一條邊。因此,沖突變量需要在不同的寄存器位置處存在或在圖中具有不同的顏色以避免沖突。接著,合并階段16試圖優(yōu)化每一個(gè)圖的路徑。當(dāng)可能時(shí),通過(guò)用一個(gè)變量取代兩個(gè)不沖突的變量來(lái)合并結(jié)點(diǎn)以減少圖著色問(wèn)題的大小。接著,在框18計(jì)算拋出成本。在構(gòu)建沖突圖之后,考慮到寄存器數(shù)量有限,因此可能不能將所有的結(jié)點(diǎn)映射到寄存器。所以可以拋出或移動(dòng)一些結(jié)點(diǎn)到外部存儲(chǔ)器。目標(biāo)是拋出導(dǎo)致最小拋出成本的那些結(jié)點(diǎn)。拋出成本是將結(jié)點(diǎn)拋出到外部存儲(chǔ)器的成本,并且可以取決于多個(gè)因素,包括使用變量的頻率。可以使用由于拋出導(dǎo)致的執(zhí)行性能的降低的啟發(fā)式測(cè)量來(lái)對(duì)拋出哪些結(jié)點(diǎn)進(jìn)行優(yōu)先化。該優(yōu)先化確定將結(jié)點(diǎn)移到外部存儲(chǔ)器的順序。接著,在簡(jiǎn)化/選擇階段20,通過(guò)將可用顏色應(yīng)用到每一個(gè)頂點(diǎn)結(jié)點(diǎn)來(lái)完成圖的實(shí)際著色,其中所述顏色對(duì)應(yīng)不同的寄存器。這可以一個(gè)塊接一個(gè)塊地完成。塊簡(jiǎn)單地說(shuō)是要編譯的代碼塊。階段20之后,在框22之中實(shí)際確定拋出代碼。拋出代碼是使得變量被拋出到外部存儲(chǔ)器所需的代碼。該流程針對(duì)所有塊在移動(dòng)到下一級(jí)之前執(zhí)行。然后,在簡(jiǎn)化/選擇級(jí)之后,隨后的循環(huán)在確定拋出代碼之后回到開(kāi)始。接著參考圖2,根據(jù)一個(gè)實(shí)施例,構(gòu)建階段14在菱形30處從確定兩個(gè)寫入掩碼之間是否可能存在沖突開(kāi)始。如果是,那么在框32,實(shí)際確定不能具有不兼容寫入掩碼的那些生命期。接著,在框34將邊添加到?jīng)_突圖,以使得具有不兼容寫入掩碼的生命期不被分派給相同的物理寄存器。因此,參考圖3,在該例子中,假設(shè)的控制流圖可以包括入口塊,其后是在出口塊之前的編號(hào)為BBO到BB7的一系列塊。該控制流圖示出了要被編譯的算法的邏輯流。圖4示出了圖3中示出的控制流圖的假設(shè)的支配樹(shù)。在編譯器中使用支配樹(shù)來(lái)確定樹(shù)中哪些基本塊是另一基本塊的孩子。一個(gè)塊是一個(gè)子塊的父親,也即保證流要通過(guò)該父塊來(lái)到達(dá)該子塊。例如,在圖3的控制流圖中,基本塊I(BBl)是基本塊2(BB2)的父親, 如圖4的支配樹(shù)所示。因此,支配樹(shù)指示哪些結(jié)點(diǎn)(稱為父結(jié)點(diǎn))被遍歷以到達(dá)其他結(jié)點(diǎn)(稱為子結(jié)點(diǎn))。支配樹(shù)可以由編譯器根據(jù)控制流圖而得到,但是編譯器不能根據(jù)支配樹(shù)而得到控制流圖。在一個(gè)實(shí)施例中,使用支配樹(shù)來(lái)找到并行分支和并行活動(dòng)集。并行活動(dòng)集是不能具有不兼容寫入掩碼的生命期的集合。與另一基本塊并行的基本塊是該基本塊的支配樹(shù)前趨(直到支配不在該基本塊的支配路徑中的出口塊的前趨)的直接后繼。換言之,并行塊可以包括到并行執(zhí)行分支的入口結(jié)點(diǎn)?;緣K2是到基本塊6的并行執(zhí)行分支的入口結(jié)點(diǎn)。并行塊還包括來(lái)自并行執(zhí)行分支的“聯(lián)合節(jié)點(diǎn)”(join node) 0在該例子中,基本塊7是基本塊6的聯(lián)合節(jié)點(diǎn)。并行塊還包括“臨界邊結(jié)點(diǎn)”(critical edge node)。在該例子中,基本塊5是基本塊6的臨界邊結(jié)點(diǎn)。如所指示的,在圖3和圖4的橢圓中為與基本塊6并行的基本塊指示了這些基本塊的生命內(nèi)(live-in)集合。生命內(nèi)集合共同地描述了并行活動(dòng)集。因此,在一些實(shí)施例中,并行塊可以被自動(dòng)地檢測(cè)為到并行執(zhí)行分支的入口結(jié)點(diǎn)、來(lái)自并行執(zhí)行分支的聯(lián)合節(jié)點(diǎn),或在一些實(shí)施例中檢測(cè)為臨界邊結(jié)點(diǎn)。入口結(jié)點(diǎn)、基本塊1、基本塊3和基本塊4不被認(rèn)為是與基本塊6并行的,因?yàn)樗鼈冊(cè)诎ɑ緣K6的相同支配路徑上。此外,基本塊0不被認(rèn)為是并行的,因?yàn)榛緣K1支配出口結(jié)點(diǎn)并且沒(méi)有檢查基本塊1的上游結(jié)點(diǎn)。最后,盡管基本塊7不是直觀地與基本塊6 并行的,但是基本塊7結(jié)點(diǎn)的生命內(nèi)集合與基本塊6并行。這是因?yàn)榛緣K7結(jié)點(diǎn)生命內(nèi)的生命期在與基本塊6并行的結(jié)點(diǎn)的生命外(live-out)集合內(nèi)。具體而言,基本塊7的生命內(nèi)集合由基本塊2和基本塊5的生命外集合構(gòu)成。更一般地說(shuō),聯(lián)合節(jié)點(diǎn)的生命內(nèi)集合與其前趨結(jié)點(diǎn)的生命外集合相同。通過(guò)將聯(lián)合節(jié)點(diǎn)的生命內(nèi)集合包括到并行活動(dòng)集中,算法不需要考慮生命外集合。一旦找到基本塊的并行活動(dòng)集,檢查基本塊中的每一個(gè)指令,并且核查確定其寫入掩碼是否與并行活動(dòng)集中的每一個(gè)生命期的掩碼不兼容。如果是,那么算法在該生命期和該指令的目的地之間插入沖突(這在原始Chaitin-Briggs算法中可能并不沖突)。如果兩個(gè)掩碼能夠?qū)懭氲讲⑿蟹种е械南嗤琒IMD子通道,那么它們是不兼容的。 在一些實(shí)施例中,對(duì)于避免具有不兼容寫入掩碼的指令的需求可以避免,并且可以在極少或沒(méi)有效率損失的情況下處理該需求。參考圖5,根據(jù)更詳細(xì)的實(shí)施例,在框40選擇初始基本塊。然后如框42所指示的, 識(shí)別不在所選擇的基本塊的支配路徑上的并行基本塊。接著,如框44所指示的,確定并行基本塊的生命內(nèi)集合以建立并行生命內(nèi)集合。
如框46所指示的,然后可以檢查所選擇的基本塊的每一個(gè)指令以查看其掩碼是否與并行生命內(nèi)集合中的掩碼不兼容。如果如菱形48所確定的,不存在不兼容性,那么在菱形52的核查確定這是否是最后的塊。如果是,那么流程結(jié)束,否則,流程迭代回框40。如果存在不兼容性,那么如框50所示,在沖突圖中插入邊,并且流程進(jìn)行迭代。圖6中示出的計(jì)算機(jī)系統(tǒng)130可以包括通過(guò)總線104耦合到芯片組核心邏輯110 的可移動(dòng)介質(zhì)136和硬盤驅(qū)動(dòng)器134。在一個(gè)實(shí)施例中,核心邏輯可以耦合到圖形處理器 112(經(jīng)由總線10 和主處理器100。圖形處理器112還可以通過(guò)總線106耦合到幀緩沖器114。幀緩沖器114可以通過(guò)總線107耦合到顯示屏118,顯示屏118又通過(guò)總線108耦合到諸如鍵盤或鼠標(biāo)120的傳統(tǒng)部件。在軟件實(shí)現(xiàn)的情況中,可以將實(shí)現(xiàn)圖2和圖5的序列的相關(guān)代碼存儲(chǔ)在包括主存儲(chǔ)器132(在本文中有時(shí)也被稱為外部存儲(chǔ)器)的任何合適的半導(dǎo)體、磁的或光的存儲(chǔ)器中。因此,在一個(gè)實(shí)施例中,可以將代碼139存儲(chǔ)在諸如主存儲(chǔ)器132或幀緩沖器114的機(jī)器可讀介質(zhì)中,以由諸如處理器100或圖形處理器112的處理器執(zhí)行。在軟件實(shí)施例中,圖2和圖5中示出的序列可以是圖形處理器112的一部分。然而,這些序列也可以用存儲(chǔ)在幀緩沖器114或主存儲(chǔ)器132中的軟件來(lái)實(shí)現(xiàn),如139所示。 當(dāng)然,這些軟件可以位于圖形處理器112或任何其他存儲(chǔ)設(shè)備中??梢杂酶鞣N硬件架構(gòu)來(lái)實(shí)現(xiàn)本文描述的圖形處理技術(shù)。例如,可以將圖形功能性集成到芯片組內(nèi)。可替換地,可以使用分立的圖形處理器。作為另一個(gè)實(shí)施例,可以由包括多核心處理器的通用處理器來(lái)實(shí)現(xiàn)這些圖形功能。貫穿本說(shuō)明書(shū)提及的“一個(gè)實(shí)施例”或“實(shí)施例”意味著結(jié)合該實(shí)施例描述的特定特征、結(jié)構(gòu)或特性至少包含在本發(fā)明涵蓋的一個(gè)實(shí)現(xiàn)中。因此,短語(yǔ)“一個(gè)實(shí)施例”或“在實(shí)施例中”的出現(xiàn)未必都指同一實(shí)施例。此外,可以用不同于所說(shuō)明的具體實(shí)施例的其他合適形式來(lái)創(chuàng)立這些特定特征、結(jié)構(gòu)或特性,并且所有這些形式可以包含在本申請(qǐng)的權(quán)利要求中。盡管參照有限數(shù)量的實(shí)施例描述了本發(fā)明,但是本領(lǐng)域中的技術(shù)人員將理解從中進(jìn)行的大量修改和變型。所附權(quán)利要求旨在覆蓋落在本發(fā)明的真實(shí)精神和范圍內(nèi)的所有這種修改和變型。
權(quán)利要求
1.一種方法,包括確定在單指令多數(shù)據(jù)處理器的編譯期間不能具有沖突寫入掩碼的生命期。
2.根據(jù)權(quán)利要求1所述的方法,包括將邊添加到?jīng)_突圖,以使得具有不兼容寫入掩碼的生命期將不被分派給相同物理寄存器。
3.根據(jù)權(quán)利要求1所述的方法,包括使用支配樹(shù)來(lái)確定不能具有沖突寫入掩碼的生命期。
4.根據(jù)權(quán)利要求3所述的方法,包括找到不在選擇的基本塊的支配路徑上的并行基本塊。
5.根據(jù)權(quán)利要求4所述的方法,包括確定并行基本塊的活動(dòng)集以建立并行生命內(nèi)集合。
6.根據(jù)權(quán)利要求5所述的方法,包括檢查所述選擇的基本塊的每一個(gè)指令,以查看其掩碼是否與所述并行生命內(nèi)集合中的掩碼不兼容。
7.一種計(jì)算機(jī)可讀介質(zhì),其存儲(chǔ)用于使得計(jì)算機(jī)能夠執(zhí)行以下操作的指令將邊添加到?jīng)_突圖,以使得具有不兼容寫入掩碼的生命期將不被分派給相同物理寄存器。
8.根據(jù)權(quán)利要求7所述的介質(zhì),還存儲(chǔ)用于確定在單指令多數(shù)據(jù)處理器的編譯期間不能具有沖突寫入掩碼的生命期的指令。
9.根據(jù)權(quán)利要求7所述的介質(zhì),還存儲(chǔ)用于使用支配樹(shù)來(lái)確定不能具有沖突寫入掩碼的生命期的指令。
10.根據(jù)權(quán)利要求9所述的介質(zhì),還存儲(chǔ)用于找到不在選擇的基本塊的支配路徑上的并行基本塊的指令。
11.根據(jù)權(quán)利要求10所述的介質(zhì),還存儲(chǔ)用于確定并行基本塊的活動(dòng)集以建立并行生命內(nèi)集合的指令。
12.根據(jù)權(quán)利要求11所述的介質(zhì),還存儲(chǔ)用于檢查所述選擇的基本塊的每一個(gè)指令以查看其掩碼是否與所述并行生命內(nèi)集合中的掩碼不兼容的指令。
13.一種裝置,包括單指令多數(shù)據(jù)處理器,用于確定在編譯期間不能具有沖突寫入掩碼的生命期;以及耦合到所述處理器的存儲(chǔ)器。
14.根據(jù)權(quán)利要求13所述的裝置,所述處理器將邊添加到?jīng)_突圖,以使得具有不兼容寫入掩碼的生命期將不被分派給相同物理寄存器。
15.根據(jù)權(quán)利要求13所述的裝置,所述處理器使用支配樹(shù)來(lái)確定不能具有沖突寫入掩碼的生命期。
16.根據(jù)權(quán)利要求15所述的裝置,所述處理器找到不在選擇的基本塊的支配路徑上的并行基本塊。
17.根據(jù)權(quán)利要求16所述的裝置,所述處理器確定并行基本塊的活動(dòng)集以建立并行生命內(nèi)集合。
18.根據(jù)權(quán)利要求17所述的裝置,所述處理器檢查所述選擇的基本塊的每一個(gè)指令以查看其掩碼是否與在所述并行生命內(nèi)集合中的掩碼不兼容。
19.根據(jù)權(quán)利要求13所述的裝置,其中所述處理器是圖形處理器。
20.根據(jù)權(quán)利要求13所述的裝置,其中所述存儲(chǔ)器是系統(tǒng)存儲(chǔ)器。
全文摘要
單指令多數(shù)據(jù)處理器可以通過(guò)識(shí)別在編譯期間具有不兼容寫入掩碼的生命期來(lái)實(shí)現(xiàn)寄存器分配。然后,在沖突圖中,在具有不兼容掩碼的生命期之間添加邊,以使得這些生命期將不會(huì)被分派給相同物理寄存器。
文檔編號(hào)G06F9/38GK102163142SQ20111004400
公開(kāi)日2011年8月24日 申請(qǐng)日期2011年2月23日 優(yōu)先權(quán)日2010年2月24日
發(fā)明者B·J·阿什博, T·揚(yáng)恰克 申請(qǐng)人:英特爾公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
梁山县| 巴彦淖尔市| 平顶山市| 平远县| 皋兰县| 甘谷县| 天台县| 甘泉县| 邵东县| 太仆寺旗| 香格里拉县| 湄潭县| 莫力| 皮山县| 赤水市| 许昌市| 东安县| 内黄县| 佳木斯市| 临武县| 宾阳县| 阿拉善左旗| 睢宁县| 藁城市| 揭阳市| 黄陵县| 社会| 四平市| 汨罗市| 闽侯县| 延津县| 日喀则市| 安义县| 弋阳县| 商丘市| 康乐县| 怀宁县| 名山县| 侯马市| 利津县| 乡宁县|