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

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

文檔序號:6622500閱讀:246來源:國知局
使用寫入掩碼的具有simd架構(gòu)的寄存器分配的制作方法
【專利摘要】單指令多數(shù)據(jù)處理器可以通過識別在編譯期間具有不兼容寫入掩碼的生命期來實現(xiàn)寄存器分配。然后,在沖突圖中,在具有不兼容掩碼的生命期之間添加邊,以使得這些生命期將不會被分派給相同物理寄存器。
【專利說明】使用寫入掩碼的具有SIMD架構(gòu)的寄存器分配
[0001] 本申請是申請日為2011年02月23日、申請?zhí)枮?01110044003. 1、名稱為"使用 寫入掩碼的具有SIMD架構(gòu)的寄存器分配"的中國發(fā)明專利申請的分案申請。

【背景技術(shù)】
[0002] 本發(fā)明總體上涉及處理器,并且具體地涉及單指令多數(shù)據(jù)處理器。
[0003] 單指令多數(shù)據(jù)(SMD)處理器是在其中每一個指令可以并行地操作多個數(shù)據(jù)元 素的處理器。一些單指令多數(shù)據(jù)處理器可以以不同長度進行操作,例如SMD8、SMD16,或 SMD32。
[0004] 物理SMD寄存器具有可以用來存儲多個小數(shù)據(jù)元素的大量比特。操作的模式可 以大致的描述為SIMDmxn,其中"m"是描述向量大小的數(shù)值項,以及"η"是在SIMD中執(zhí)行的 并發(fā)程序流的數(shù)量。SMD8, SMDlx8的簡稱,基于陣列數(shù)據(jù)結(jié)構(gòu)的結(jié)構(gòu)來表示SMD操作, 其中一個寄存器包含由八個向量構(gòu)成的一個數(shù)據(jù)元素(同一個)。有效地,存在八個并發(fā)程 序流。SMD16是SMDlxl6的簡稱,其中每一個SMD指令對包含由16個向量構(gòu)成的一個數(shù) 據(jù)元素(同一個)的一對寄存器進行操作。SIMD16具有16個并發(fā)程序流。
[0005] 寫入掩碼(write mask)可以用于允許通過一個控制流分支來計算寄存器的一部 分并通過另一控制流分支來計算寄存器的另一部分。當用一個控制流分支中的一個掩碼寫 入的寄存器被用并行控制流分支中不同的掩碼寫入時,可能發(fā)生執(zhí)行錯誤。
[0006] 例如,簡單執(zhí)行錯誤在將常量數(shù)據(jù)塊加載到在"那么"(then)分支中也被寫入的寄 存器中的指令的"并行"分支中使用"無掩碼"修飾符(modifier)。具有無掩碼修飾符的指 令可以重寫在"那么"分支中寫入的數(shù)據(jù)。如果省略無掩碼修飾符或如果將不同寄存器用 作所述塊加載的目的地,那么將重寫沒有意義的數(shù)據(jù)。然而,在該情況下,需要無掩碼修飾 符,并且大部分寄存器分配算法將允許相同目的地用于每一個指令。
[0007] 通常地,這意味著除非所有的"并行"分支使用相同類型的掩碼,例如相同寬度的 掩碼,否則不可以使用掩碼修飾符或?qū)懭胙诖a。這種無法使用具有不同寫入掩碼類型的寫 入掩碼或掩碼修飾符可能導(dǎo)致效率降低,因為使用較少數(shù)量的并發(fā)程序流。

【專利附圖】

【附圖說明】
[0008] 圖1是本發(fā)明的一個實施例的流程圖;
[0009] 圖2是根據(jù)一個實施例的圖1中示出的流程圖的構(gòu)建階段的流程圖;
[0010] 圖3是假設(shè)的控制流圖;
[0011] 圖4是假設(shè)的支配樹;
[0012] 圖5是根據(jù)本發(fā)明的另一實施例的構(gòu)建階段的流程圖;以及
[0013] 圖6是根據(jù)一個實施例的計算機系統(tǒng)的示意性描述。

【具體實施方式】
[0014] 根據(jù)本發(fā)明的一些實施例,可以在寄存器分配算法的構(gòu)建階段之前或期間檢測不 能具有不兼容(即,沖突)的寫入掩碼的生命期(live range)。因此,可以檢測沖突并可以 采取糾正動作。這與傳統(tǒng)技術(shù)形成對比,所述傳統(tǒng)技術(shù)簡單地確定是否可能存在沖突并且 采取糾正動作,而不管沖突是否事實上已經(jīng)發(fā)生。
[0015] 根據(jù)一些實施例,可以通過為沖突圖增加邊來修補這些沖突。這與可以簡單地排 除兩種不同單指令多數(shù)據(jù)模式的使用的傳統(tǒng)技術(shù)形成對比。因此,例如,在允許SMD8和 SIMD16二者的架構(gòu)中,在一些傳統(tǒng)的方法中,只有使用較小數(shù)量的流的模式可以被使用或 只有寫入掩碼的較低部分可以被使用,以避免沖突的可能性。
[0016] 在一些實施例中,可以使用圖著色寄存器分配算法來為特定的寄存器分配變量和 生命期。在這種情況下,如圖1所說明的,可以將檢測和沖突消解二者添加到寄存器分配算 法的構(gòu)建階段。寄存器分配是將程序變量分派到少數(shù)量的處理器寄存器中的過程??偟哪?標是將盡可能多的操作數(shù)保持在寄存器中以最大化結(jié)果程序的執(zhí)行速度。
[0017] 已知不同的寄存器分配機制,包括裝箱、諸如Chow式分配器的基于優(yōu)先級的圖著 色、諸如Chaitin式分配器的自底向上的圖著色,以及線性掃描寄存器分配方法(常用在即 時(JIT)編譯器中)。根據(jù)本發(fā)明的一些實施例,使用了 Chaitin-Briggs圖著色寄存器分 配算法,但是在其他實施例中,可以使用其他寄存器分配算法。
[0018] 寄存器分配算法試圖保證在并行控制流分支中不使用不兼容的掩碼來寫入寄存 器。在一些實施例中,這可以通過使用圖1中所示的圖著色寄存器分配算法10來完成。思 想是將盡可能多的變量分配到寄存器并且只在必要時將變量拋出到主存儲器。根據(jù)使用 Chaitin-Briggs圖著色的實施例,在重編號階段12,每一個變量被給予其自身唯一編號的 邏輯寄存器。該重編號階段也可以被稱為寄存器變量識別。
[0019] 在構(gòu)建階段14,獲得沖突圖。變量和生命期被表示為無向圖中的頂點,并且當兩個 頂點(也被稱為"結(jié)點")對應(yīng)的變量由于同時存在而沖突時可以通過邊將它們連接起來。 可以將該圖的頂點著色視為寄存器分配,其中由頂點顏色來表示每一個寄存器并且沒有頂 點具有與其鄰居相同的顏色。生命期是變量活動的時間間隔。在一些實施例中,可以可互 換地看待變量和生命期。
[0020] 當兩個變量同時存在并且由此沖突時在它們之間畫一條邊。因此,沖突變量需要 在不同的寄存器位置處存在或在圖中具有不同的顏色以避免沖突。
[0021] 接著,合并階段16試圖優(yōu)化每一個圖的路徑。當可能時,通過用一個變量取代兩 個不沖突的變量來合并結(jié)點以減少圖著色問題的大小。
[0022] 接著,在框18計算拋出成本。在構(gòu)建沖突圖之后,考慮到寄存器數(shù)量有限,因此可 能不能將所有的結(jié)點映射到寄存器。所以可以拋出或移動一些結(jié)點到外部存儲器。
[0023]目標是拋出導(dǎo)致最小拋出成本的那些結(jié)點。拋出成本是將結(jié)點拋出到外部存儲器 的成本,并且可以取決于多個因素,包括使用變量的頻率??梢允褂糜捎趻伋鰧?dǎo)致的執(zhí)行性 能的降低的啟發(fā)式測量來對拋出哪些結(jié)點進行優(yōu)先化。該優(yōu)先化確定將結(jié)點移到外部存儲 器的順序。
[0024] 接著,在簡化/選擇階段20,通過將可用顏色應(yīng)用到每一個頂點結(jié)點來完成圖的 實際著色,其中所述顏色對應(yīng)不同的寄存器。這可以一個塊接一個塊地完成。塊簡單地說 是要編譯的代碼塊。
[0025] 階段20之后,在框22之中實際確定拋出代碼。拋出代碼是使得變量被拋出到外 部存儲器所需的代碼。該流程針對所有塊在移動到下一級之前執(zhí)行。然后,在簡化/選擇 級之后,隨后的循環(huán)在確定拋出代碼之后回到開始。
[0026] 接著參考圖2,根據(jù)一個實施例,構(gòu)建階段14在菱形30處從確定兩個寫入掩碼之 間是否可能存在沖突開始。如果是,那么在框32,實際確定不能具有不兼容寫入掩碼的那些 生命期。接著,在框34將邊添加到?jīng)_突圖,以使得具有不兼容寫入掩碼的生命期不被分派 給相同的物理寄存器。
[0027] 因此,參考圖3,在該例子中,假設(shè)的控制流圖可以包括入口塊,其后是在出口塊之 前的編號為ΒΒ0到BB7的一系列塊。該控制流圖示出了要被編譯的算法的邏輯流。
[0028] 圖4示出了圖3中示出的控制流圖的假設(shè)的支配樹。在編譯器中使用支配樹來確 定樹中哪些基本塊是另一基本塊的孩子。一個塊是一個子塊的父親,也即保證流要通過該 父塊來到達該子塊。例如,在圖3的控制流圖中,基本塊1(BB1)是基本塊2(BB2)的父親, 如圖4的支配樹所示。
[0029] 因此,支配樹指示哪些結(jié)點(稱為父結(jié)點)被遍歷以到達其他結(jié)點(稱為子結(jié) 點)。支配樹可以由編譯器根據(jù)控制流圖而得到,但是編譯器不能根據(jù)支配樹而得到控制流 圖。在一個實施例中,使用支配樹來找到并行分支和并行活動集。并行活動集是不能具有 不兼容寫入掩碼的生命期的集合。
[0030] 與另一基本塊并行的基本塊是該基本塊的支配樹前趨(直到支配不在該基本塊 的支配路徑中的出口塊的前趨)的直接后繼。換言之,并行塊可以包括到并行執(zhí)行分支的 入口結(jié)點。基本塊2是到基本塊6的并行執(zhí)行分支的入口結(jié)點。并行塊還包括來自并行執(zhí) 行分支的"聯(lián)合節(jié)點"(join node)。在該例子中,基本塊7是基本塊6的聯(lián)合節(jié)點。并行 塊還包括"臨界邊結(jié)點"(critical edge node)。在該例子中,基本塊5是基本塊6的臨界 邊結(jié)點。如所指示的,在圖3和圖4的橢圓中為與基本塊6并行的基本塊指示了這些基本 塊的生命內(nèi)(live-in)集合。生命內(nèi)集合共同地描述了并行活動集。因此,在一些實施例 中,并行塊可以被自動地檢測為到并行執(zhí)行分支的入口結(jié)點、來自并行執(zhí)行分支的聯(lián)合節(jié) 點,或在一些實施例中檢測為臨界邊結(jié)點。
[0031] 入口結(jié)點、基本塊1、基本塊3和基本塊4不被認為是與基本塊6并行的,因為它們 在包括基本塊6的相同支配路徑上。此外,基本塊0不被認為是并行的,因為基本塊1支配 出口結(jié)點并且沒有檢查基本塊1的上游結(jié)點。最后,盡管基本塊7不是直觀地與基本塊6 并行的,但是基本塊7結(jié)點的生命內(nèi)集合與基本塊6并行。這是因為基本塊7結(jié)點生命內(nèi) 的生命期在與基本塊6并行的結(jié)點的生命外(live-out)集合內(nèi)。具體而言,基本塊7的生 命內(nèi)集合由基本塊2和基本塊5的生命外集合構(gòu)成。更一般地說,聯(lián)合節(jié)點的生命內(nèi)集合 與其前趨結(jié)點的生命外集合相同。通過將聯(lián)合節(jié)點的生命內(nèi)集合包括到并行活動集中,算 法不需要考慮生命外集合。
[0032] -旦找到基本塊的并行活動集,檢查基本塊中的每一個指令,并且核查確定其寫 入掩碼是否與并行活動集中的每一個生命期的掩碼不兼容。如果是,那么算法在該生命期 和該指令的目的地之間插入沖突(這在原始Chaitin-Briggs算法中可能并不沖突)。
[0033] 如果兩個掩碼能夠?qū)懭氲讲⑿蟹种е械南嗤琒MD子通道,那么它們是不兼容的。 在一些實施例中,對于避免具有不兼容寫入掩碼的指令的需求可以避免,并且可以在極少 或沒有效率損失的情況下處理該需求。
[0034] 參考圖5,根據(jù)更詳細的實施例,在框40選擇初始基本塊。然后如框42所指示的, 識別不在所選擇的基本塊的支配路徑上的并行基本塊。接著,如框44所指示的,確定并行 基本塊的生命內(nèi)集合以建立并行生命內(nèi)集合。
[0035] 如框46所指示的,然后可以檢查所選擇的基本塊的每一個指令以查看其掩碼是 否與并行生命內(nèi)集合中的掩碼不兼容。如果如菱形48所確定的,不存在不兼容性,那么在 菱形52的核查確定這是否是最后的塊。如果是,那么流程結(jié)束,否則,流程迭代回框40。
[0036] 如果存在不兼容性,那么如框50所示,在沖突圖中插入邊,并且流程進行迭代。
[0037] 圖6中示出的計算機系統(tǒng)130可以包括通過總線104耦合到芯片組核心邏輯110 的可移動介質(zhì)136和硬盤驅(qū)動器134。在一個實施例中,核心邏輯可以耦合到圖形處理器 112 (經(jīng)由總線105)和主處理器100。圖形處理器112還可以通過總線106耦合到幀緩沖 器114。幀緩沖器114可以通過總線107耦合到顯示屏118,顯示屏118又通過總線108耦 合到諸如鍵盤或鼠標120的傳統(tǒng)部件。
[0038] 在軟件實現(xiàn)的情況中,可以將實現(xiàn)圖2和圖5的序列的相關(guān)代碼存儲在包括主存 儲器132(在本文中有時也被稱為外部存儲器)的任何合適的半導(dǎo)體、磁的或光的存儲器 中。因此,在一個實施例中,可以將代碼139存儲在諸如主存儲器132或幀緩沖器114的機 器可讀介質(zhì)中,以由諸如處理器1〇〇或圖形處理器112的處理器執(zhí)行。
[0039] 在軟件實施例中,圖2和圖5中示出的序列可以是圖形處理器112的一部分。然 而,這些序列也可以用存儲在幀緩沖器114或主存儲器132中的軟件來實現(xiàn),如139所示。 當然,這些軟件可以位于圖形處理器112或任何其他存儲設(shè)備中。
[0040] 可以用各種硬件架構(gòu)來實現(xiàn)本文描述的圖形處理技術(shù)。例如,可以將圖形功能性 集成到芯片組內(nèi)??商鎿Q地,可以使用分立的圖形處理器。作為另一個實施例,可以由包括 多核心處理器的通用處理器來實現(xiàn)這些圖形功能。
[0041] 貫穿本說明書提及的"一個實施例"或"實施例"意味著結(jié)合該實施例描述的特定 特征、結(jié)構(gòu)或特性至少包含在本發(fā)明涵蓋的一個實現(xiàn)中。因此,短語"一個實施例"或"在實 施例中"的出現(xiàn)未必都指同一實施例。此外,可以用不同于所說明的具體實施例的其他合適 形式來創(chuàng)立這些特定特征、結(jié)構(gòu)或特性,并且所有這些形式可以包含在本申請的權(quán)利要求 中。
[0042] 盡管參照有限數(shù)量的實施例描述了本發(fā)明,但是本領(lǐng)域中的技術(shù)人員將理解從中 進行的大量修改和變型。所附權(quán)利要求旨在覆蓋落在本發(fā)明的真實精神和范圍內(nèi)的所有這 種修改和變型。
【權(quán)利要求】
1. 一種用于單指令多數(shù)據(jù)處理器的方法,包括: 確定在所述單指令多數(shù)據(jù)處理器的編譯期間不能具有不兼容寫入掩碼的生命期,其 中,如果兩個掩碼能夠?qū)懭氲讲⑿蟹种е械南嗤膯沃噶疃鄶?shù)據(jù)子通道,那么它們是不兼 容的;以及 響應(yīng)于所述確定,執(zhí)行糾正動作。
2. 根據(jù)權(quán)利要求1所述的方法,其中,所述糾正動作包括將邊添加到?jīng)_突圖,以使得具 有不兼容寫入掩碼的生命期將不被分派給相同物理寄存器。
3. 根據(jù)權(quán)利要求1所述的方法,包括使用支配樹來確定不能具有不兼容寫入掩碼的生 命期。
4. 根據(jù)權(quán)利要求3所述的方法,包括找到不在選擇的基本塊的支配路徑上的并行基本 塊。
5. 根據(jù)權(quán)利要求4所述的方法,包括確定并行基本塊的活動集以建立并行生命內(nèi)集 合。
6. 根據(jù)權(quán)利要求5所述的方法,包括檢查所述選擇的基本塊的每一個指令,以查看其 掩碼是否與所述并行生命內(nèi)集合中的掩碼不兼容。
7. 根據(jù)權(quán)利要求1所述的方法,包括使得能夠在所述單指令多數(shù)據(jù)處理器中使用兩個 不同的單指令多數(shù)據(jù)模式。
8. 根據(jù)權(quán)利要求1所述的方法,其中,如果所述寫入掩碼能夠?qū)懭氲讲⑿谢緣K中的 相同的單指令多數(shù)據(jù)子通道,那么所述寫入掩碼是不兼容的。
9. 一種用于單指令多數(shù)據(jù)處理器的裝置,包括: 第一邏輯,用于確定兩個寫入掩碼之間是否可能存在沖突; 第二邏輯,用于如果確定可能存在所述沖突,則確定不能具有不兼容寫入掩碼的生命 期; 第三邏輯,用于將邊添加到?jīng)_突圖,以使得具有不兼容寫入掩碼的生命期將不被分派 給相同物理寄存器,其中,如果兩個掩碼能夠?qū)懭氲讲⑿蟹种е械南嗤膯沃噶疃鄶?shù)據(jù)子 通道,那么它們是不兼容的。
10. 根據(jù)權(quán)利要求9所述的裝置,其中,所述裝置用于確定在所述單指令多數(shù)據(jù)處理器 的編譯期間不能具有不兼容寫入掩碼的生命期。
11. 根據(jù)權(quán)利要求9所述的裝置,其中,所述裝置用于使用支配樹來確定不能具有不兼 容寫入掩碼的生命期。
12. 根據(jù)權(quán)利要求11所述的裝置,其中,所述裝置用于找到不在選擇的基本塊的支配 路徑上的并行基本塊。
13. 根據(jù)權(quán)利要求12所述的裝置,其中,所述裝置用于確定所述并行基本塊的活動集 以建立并行生命內(nèi)集合。
14. 根據(jù)權(quán)利要求13所述的裝置,其中,所述裝置用于檢查所述選擇的基本塊的每一 個指令以查看其掩碼是否與所述并行生命內(nèi)集合中的掩碼不兼容。
15. -種計算機系統(tǒng),包括: 單指令多數(shù)據(jù)處理器,用于確定在編譯期間不能具有不兼容寫入掩碼的生命期,其中, 如果兩個掩碼能夠?qū)懭氲讲⑿蟹种е械南嗤膯沃噶疃鄶?shù)據(jù)子通道,那么它們是不兼容 的;以及 耦合到所述處理器的存儲器。
16. 根據(jù)權(quán)利要求15所述的系統(tǒng),所述處理器將邊添加到?jīng)_突圖,以使得具有不兼容 寫入掩碼的生命期將不被分派給相同物理寄存器。
17. 根據(jù)權(quán)利要求15所述的系統(tǒng),所述處理器使用支配樹來確定不能具有沖突寫入掩 碼的生命期。
18. 根據(jù)權(quán)利要求17所述的系統(tǒng),所述處理器找到不在選擇的基本塊的支配路徑上的 并行基本塊。
19. 根據(jù)權(quán)利要求18所述的系統(tǒng),所述處理器確定并行基本塊的活動集以建立并行生 命內(nèi)集合。
20. 根據(jù)權(quán)利要求19所述的系統(tǒng),所述處理器檢查所述選擇的基本塊的每一個指令以 查看其掩碼是否與所述并行生命內(nèi)集合中的掩碼不兼容。
21. 根據(jù)權(quán)利要求15所述的系統(tǒng),其中,所述處理器是圖形處理器。
22. 根據(jù)權(quán)利要求15所述的系統(tǒng),其中,所述存儲器是系統(tǒng)存儲器。
23. 根據(jù)權(quán)利要求15所述的系統(tǒng),其中,所述處理器是多核處理器。
【文檔編號】G06F9/45GK104156253SQ201410381252
【公開日】2014年11月19日 申請日期:2011年2月23日 優(yōu)先權(quán)日:2010年2月24日
【發(fā)明者】T·揚恰克, B·J·阿什博 申請人:英特爾公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
梁平县| 宜兰县| 独山县| 建水县| 石门县| 四会市| 托里县| 大同市| 鱼台县| 彰化市| 巴彦淖尔市| 彭泽县| 九江县| 沾化县| 乌兰察布市| 日照市| 清水河县| 建昌县| 大新县| 渭南市| 静乐县| 阿拉善盟| 威信县| 长治县| 宁陕县| 龙陵县| 郎溪县| 临高县| 惠东县| 濉溪县| 阳高县| 丹寨县| 扶绥县| 织金县| 湖北省| 新丰县| 潢川县| 彭阳县| 仁化县| 田林县| 惠州市|