两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

優(yōu)化線程棧存儲(chǔ)器的管理的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的制作方法

文檔序號(hào):6523329閱讀:171來(lái)源:國(guó)知局
優(yōu)化線程棧存儲(chǔ)器的管理的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的制作方法
【專利摘要】本發(fā)明公開(kāi)了用于優(yōu)化線程棧存儲(chǔ)器分配的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品。方法包括以下步驟:接收用于程序的源代碼,將源代碼轉(zhuǎn)譯成中間表示,分析中間表示以標(biāo)識(shí)可使用線程棧存儲(chǔ)器中的第一所分配存儲(chǔ)器空間的至少兩個(gè)對(duì)象,以及通過(guò)以對(duì)至少兩個(gè)對(duì)象中的第二對(duì)象的引用替換對(duì)至少兩個(gè)對(duì)象中的第一對(duì)象的引用來(lái)修改中間表示。
【專利說(shuō)明】?jī)?yōu)化線程棧存儲(chǔ)器的管理的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及編譯器,并且更具體地,涉及存儲(chǔ)器分配中的優(yōu)化。
【背景技術(shù)】
[0002]可用于程序的執(zhí)行的本地存儲(chǔ)器是系統(tǒng)架構(gòu)中的重要資源。該資源的適當(dāng)管理對(duì)于程序的高效執(zhí)行是至關(guān)重要的。理想地,在程序的執(zhí)行期間,僅分配包括用于當(dāng)前指令和未來(lái)指令的數(shù)據(jù)的存儲(chǔ)器,而包含使用在先前被執(zhí)行的指令中的數(shù)據(jù)的任何存儲(chǔ)器被解除分配并被返回到自由存儲(chǔ)器池??捎沙绦蛟O(shè)計(jì)員來(lái)管理某一存儲(chǔ)器,諸如通過(guò)在采用C++所寫的程序中使用malloc和free指令以明確地分配和釋放存儲(chǔ)器塊。
[0003]然而,就線程棧存儲(chǔ)器(即充當(dāng)后進(jìn)先出(LIFO)隊(duì)列的分配給程序線程的存儲(chǔ)器的一部分)而言,程序設(shè)計(jì)員典型地不管理線程棧存儲(chǔ)器。相反,線程棧存儲(chǔ)器隨程序執(zhí)行而動(dòng)態(tài)地得以分配。當(dāng)前編譯器通常不解決對(duì)于線程棧存儲(chǔ)器的高效管理的優(yōu)化。因此,存在對(duì)于解決該問(wèn)題和/或與現(xiàn)有技術(shù)相關(guān)聯(lián)的其他問(wèn)題的需要。

【發(fā)明內(nèi)容】

[0004]公開(kāi)了用于優(yōu)化線程棧存儲(chǔ)器分配的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品。方法包括以下步驟:接收用于程序的源代碼,將源代碼轉(zhuǎn)譯成中間表示,分析中間表示以標(biāo)識(shí)可使用線程棧存儲(chǔ)器中的第一所分配存儲(chǔ)器空間的至少兩個(gè)對(duì)象,以及通過(guò)以對(duì)至少兩個(gè)對(duì)象中的第二對(duì)象的引用替換對(duì)至少兩個(gè)對(duì)象中的第一對(duì)象的引用來(lái)修改中間表示。
【專利附圖】

【附圖說(shuō)明】
[0005]圖1示出根據(jù)一個(gè)實(shí)施例的、用于優(yōu)化線程棧存儲(chǔ)器的分配的方法的流程圖;
[0006]圖2示出根據(jù)一個(gè)實(shí)施例的、用于優(yōu)化線程棧存儲(chǔ)器的分配的系統(tǒng);
[0007]圖3A示出根據(jù)一個(gè)實(shí)施例的、用于示范性程序的源代碼;
[0008]圖3B示出根據(jù)一個(gè)實(shí)施例的、與圖3A的示范性程序相對(duì)應(yīng)的中間表示;
[0009]圖3C示出根據(jù)一個(gè)實(shí)施例的、是圖3B的中間表示的經(jīng)修改版本的中間表示;
[0010]圖4示出根據(jù)一個(gè)實(shí)施例的、用于分析中間表示以確定哪些對(duì)象可以被分配到線程棧存儲(chǔ)器中的相同的存儲(chǔ)器空間的方法的流程圖;
[0011]圖5示出根據(jù)一個(gè)實(shí)施例的并行處理單元;
[0012]圖6示出根據(jù)一個(gè)實(shí)施例的、圖5的流多處理器;以及
[0013]圖7示出在其中可實(shí)現(xiàn)各先前實(shí)施例的各架構(gòu)和/或功能性的示例性系統(tǒng)。
【具體實(shí)施方式】
[0014]一些常規(guī)編譯器通過(guò)實(shí)施數(shù)據(jù)流分析和將程序指令以使得某些寄存器可以被重新用來(lái)在程序執(zhí)行中的不同時(shí)刻存儲(chǔ)不同的值的方式進(jìn)行排序,而在一定程度上優(yōu)化寄存器的分配。編譯器典型地將源代碼(例如采用諸如C++的高級(jí)語(yǔ)言所寫的程序)轉(zhuǎn)譯成中間表示(IR),該IR是表示程序的意義(包括執(zhí)行次序)的數(shù)據(jù)結(jié)構(gòu)。IR可以是用于抽象機(jī)器的中間語(yǔ)言。IR在生成要由處理器執(zhí)行的機(jī)器代碼之前使編譯器能夠?qū)嵤?shù)據(jù)流分析和重新排列程序的次序。
[0015]上文關(guān)于寄存器分配所描述的優(yōu)化不能以相同方式應(yīng)用到線程棧中的較大存儲(chǔ)器結(jié)構(gòu)。在線程棧中所分配的對(duì)象的大小可以變化。相反,寄存器具有定義明確的大小,諸如32位。當(dāng)包括在程序中的指令將值存儲(chǔ)在寄存器中時(shí),值必需覆寫先前分配到該寄存器的所有數(shù)據(jù)。線程棧存儲(chǔ)器中的對(duì)象的表現(xiàn)不同。當(dāng)值被存儲(chǔ)在對(duì)象的元素諸如數(shù)組的一個(gè)條目中時(shí),值覆寫先前被存儲(chǔ)在該條目中的數(shù)據(jù)。然而,對(duì)象的其它條目可能仍然是有效的并且分配給先前被存儲(chǔ)在對(duì)象中的數(shù)據(jù)。嘗試跟蹤線程棧中的每個(gè)條目的數(shù)據(jù)流分析將變得非常復(fù)雜并且本將能夠達(dá)到的優(yōu)化可能無(wú)效。
[0016]下文所描述的算法實(shí)施一個(gè)不同類型的數(shù)據(jù)流分析,其跟蹤分配到線程棧存儲(chǔ)器的對(duì)象(即配棧對(duì)象(stack allocated object))在程序的不同部分是否是“活的”。下面的定義貫穿本公開(kāi)而使用。在本描述的上下文中,如果存儲(chǔ)在對(duì)象中的數(shù)據(jù)潛在地由當(dāng)前指令或未來(lái)指令所需要,那么對(duì)象在程序中的某個(gè)點(diǎn)(即指令)處是活的。對(duì)象的def是將數(shù)據(jù)存儲(chǔ)在對(duì)象中的指令。對(duì)象的def的示例包括存儲(chǔ)指令、在指令的左邊(LHS)具有指向?qū)ο蟮淖兞康闹噶畹取V噶畈恍枰矊懛峙浣o對(duì)象的整個(gè)存儲(chǔ)器,而僅需要將數(shù)據(jù)寫入對(duì)象的一部分中。針對(duì)對(duì)象的存儲(chǔ)器的分配不是對(duì)象的def (因?yàn)閷?duì)象中的數(shù)據(jù)未被初始化)。對(duì)象的use是使用具有對(duì)配棧對(duì)象的訪問(wèn)權(quán)的變量的指令。對(duì)象的use的示例包括加載指令、涉及指向?qū)ο蟮闹羔樀亩M(jìn)制操作等。
[0017]圖1示出根據(jù)一個(gè)實(shí)施例的、用于優(yōu)化線程棧存儲(chǔ)器的分配的方法100的流程圖。在步驟102,編譯器接收所要編譯的程序。程序可以采用高級(jí)編程語(yǔ)言來(lái)寫,所述高級(jí)編程語(yǔ)言諸如C++、C# (C sharp)、Java、Cg (用于圖形的C)或某一其他高級(jí)編程語(yǔ)言。在步驟104,編譯器將程序轉(zhuǎn)譯成IR。IR可以是中間語(yǔ)言,諸如LLVM (低級(jí)虛擬機(jī)編譯器基礎(chǔ)結(jié)構(gòu))匯編語(yǔ)言、C、三地址碼(TAC)或某一其他類型的中間語(yǔ)言。在步驟106,編譯器分析IR以標(biāo)識(shí)可使用線程棧存儲(chǔ)器中的相同的所分配存儲(chǔ)器空間的至少兩個(gè)對(duì)象。一般地,如果對(duì)象的壽命不沖突,那么兩個(gè)對(duì)象可以使用相同的所分配存儲(chǔ)器空間。換句話說(shuō),只要兩個(gè)對(duì)象不被初始化或使用在程序中的相同點(diǎn)處,那么兩個(gè)對(duì)象可以使用相同的所分配存儲(chǔ)器空間。
[0018]在步驟108,編譯器通過(guò)以對(duì)至少兩個(gè)對(duì)象中的第二對(duì)象的引用替換對(duì)至少兩個(gè)對(duì)象中的第一對(duì)象的引用來(lái)修改IR。在一個(gè)實(shí)施例中,當(dāng)兩個(gè)配棧對(duì)象可被分配到相同存儲(chǔ)器空間時(shí),編譯器將以指向較大對(duì)象的新指令來(lái)替換指向較小對(duì)象的指令(即依據(jù)分配給對(duì)象的存儲(chǔ)器大小)。應(yīng)注意的是,雖然本文關(guān)于優(yōu)化線程棧存儲(chǔ)器的分配而闡述了各可選特征,但是這類特征僅出于示例性目的而闡述并且不應(yīng)被視為以任何方式加以限制。
[0019]圖2示出根據(jù)一個(gè)實(shí)施例的、用于優(yōu)化線程棧存儲(chǔ)器的分配的系統(tǒng)200。如圖2所示,系統(tǒng)200包括編譯器210、程序201、中間表示(IR)202和經(jīng)編譯的機(jī)器代碼203。程序201、IR202和機(jī)器代碼203是存儲(chǔ)在計(jì)算機(jī)系統(tǒng)的存儲(chǔ)器中的數(shù)據(jù)文件。編譯器210是存儲(chǔ)在存儲(chǔ)器中的、可執(zhí)行的二進(jìn)制數(shù)并配置為由計(jì)算機(jī)系統(tǒng)的處理器執(zhí)行。編譯器210從存儲(chǔ)器讀取程序201并且轉(zhuǎn)移程序201中的數(shù)據(jù)以生成IR202。在一個(gè)實(shí)施例中,編譯器210實(shí)現(xiàn)為用于圖形處理單元的驅(qū)動(dòng)程序的一部分,并且程序201是由應(yīng)用所生成并被傳送給驅(qū)動(dòng)程序以在圖形處理單元上執(zhí)行的著色器程序。
[0020]在一個(gè)實(shí)施例中,程序201是文本文件(例如ASCII文本),該文本文件包括多個(gè)以人類可讀的格式的指令。程序201可以采用諸如C++的高級(jí)編程語(yǔ)言來(lái)寫。IR202包括被抽象成采用中間語(yǔ)言的多個(gè)指令的、來(lái)自程序201的多個(gè)指令的表示。例如,中間語(yǔ)言可以是TAC并且IR202的每個(gè)指令表示目標(biāo)處理器的一個(gè)基本操作(例如二進(jìn)制操作、邏輯操作、加載/存儲(chǔ)操作等)。程序201中的指令可能不能在單個(gè)時(shí)鐘周期中執(zhí)行。例如,如“D=A+B+C”的二進(jìn)制操作可能不能由處理器在單個(gè)時(shí)鐘周期中執(zhí)行。因此,采用中間語(yǔ)言,上文所闡述的指令可被分解成采用中間語(yǔ)言的兩個(gè)指令(例如第一指令“T1=A+B”和第二指令“D=T1+C”)。
[0021]一旦編譯器210已生成IR202,編譯器就對(duì)IR202實(shí)施數(shù)據(jù)流分析。例如,編譯器210可以重新排列IR202中的指令的次序。通過(guò)改變指令的次序,編譯器可能能夠以更高效的方式來(lái)分配線程棧中的存儲(chǔ)器,重新使用相同存儲(chǔ)器位置用于程序201中的不同變量。編譯器可以分析所重新排列的指令以找到可被指派給相同存儲(chǔ)器對(duì)象的變量,以及修改IR202中的指令使得程序201中的不同變量可以重新使用線程棧中的相同存儲(chǔ)器對(duì)象。一旦編譯器210已修改IR202并且已對(duì)代碼做出某些優(yōu)化,編譯器210就編譯IR202以生成機(jī)器代碼203用于由處理器執(zhí)行。
[0022]圖3A示出根據(jù)一個(gè)實(shí)施例的、用于示范性程序201的源代碼。如圖3A所示,程序201是采用C++寫的。程序201將常數(shù)N定義為2000并且包括采取三個(gè)參數(shù)(即整數(shù)n、m和k)的函數(shù)g的定義。在函數(shù)g的每一次調(diào)用期間,聲明三個(gè)整數(shù)數(shù)組(即變量A、B和C)以及整數(shù)值(即變量result)。變量result被初始化為0,而數(shù)組A、B和C不立即被初始化。數(shù)組A首先被使用在程序201的第11行上,其可以被稱為A的def。數(shù)組A還被使用在程序201的第14行上,其可以被稱為A的use。數(shù)組A在程序201的第14行之后不被使用或定義。類似地,數(shù)組B首先被使用在程序201的第18行上,數(shù)組C首先被使用在程序201的第21行上,并且數(shù)組B和C被使用在程序201的第24行上。
[0023]函數(shù)g的主體包括If…Else語(yǔ)句。當(dāng)參數(shù)η小于參數(shù)m時(shí),If…Else語(yǔ)句的第一塊(即程序201的第10-15行)被執(zhí)行。當(dāng)參數(shù)η大于或等于參數(shù)m時(shí),第二塊(即程序201的第17-25行)被執(zhí)行。然后,變量result的值被函數(shù)返回。更詳細(xì)地檢查If…Else語(yǔ)句,本領(lǐng)域的技術(shù)人員將注意到數(shù)組A在第一塊中在第一個(gè)for循環(huán)(即程序201的第10-12行)內(nèi)被初始化并且然后在第二個(gè)for循環(huán)(即程序201的第13-15行)內(nèi)多個(gè)A的值被添加到變量result。數(shù)組B在第三個(gè)for循環(huán)(即程序201的第17-19行)中被初始化,數(shù)組C在第四個(gè)for循環(huán)(即程序201的第20-22行)中被初始化,并且然后在第五個(gè)for循環(huán)(即程序201的第23-25行)內(nèi)B的每個(gè)第k個(gè)值乘以C的每個(gè)第k個(gè)值并被添加到變量result。
[0024]應(yīng)理解的是,每次函數(shù)g被線程調(diào)用時(shí),函數(shù)將執(zhí)行If…Else語(yǔ)句的第一塊或第二塊,而不是第一塊和第二塊。換句話說(shuō),在執(zhí)行期間,基于條件語(yǔ)句(“n〈m”),或者數(shù)組A將被定義并使用在一個(gè)或多個(gè)指令中,或者數(shù)組B和C將被定義并使用在一個(gè)或多個(gè)指令中。有利地,編譯器可以優(yōu)化用于程序201的IR202使得數(shù)組A以及或者數(shù)組B或者數(shù)組C可被分配給線程棧存儲(chǔ)器中的相同對(duì)象。相反,因?yàn)閿?shù)組B和數(shù)組C可能在程序的相同點(diǎn)處是活的(例如在第五個(gè)for循環(huán)中來(lái)自數(shù)組B和數(shù)組C這二者的值可以用作相同指令中的操作數(shù)),所以數(shù)組必須指向線程棧存儲(chǔ)器中的不同對(duì)象。更一般地,如果兩個(gè)對(duì)象在程序的相同點(diǎn)處不是活的,那么兩個(gè)對(duì)象可被分配到具有至少像兩個(gè)對(duì)象中的較大者的大小那樣大的相同存儲(chǔ)器空間。換句話說(shuō),線程棧存儲(chǔ)器的一部分被分配一次并由兩個(gè)對(duì)象來(lái)使用。由于標(biāo)量值典型地由編譯器分配給寄存器,所以分配到線程棧存儲(chǔ)器的對(duì)象典型地是數(shù)組或大于單個(gè)寄存器的寬度的聚合的值。
[0025]圖3B示出根據(jù)一個(gè)實(shí)施例的、與圖3A的示范性程序201相對(duì)應(yīng)的IR202。如圖3B所示,編譯器210已將程序201轉(zhuǎn)譯成IR202。在第I到4行,IR202包括用于變量A、B、C和result的分配指令。用于變量A、B和C的對(duì)象是2000元素的整數(shù)數(shù)組,而用于變量result的對(duì)象是單個(gè)整數(shù)。在IR202的第5行中,result的值被初始化為O。IR202的第6行與程序201中的主If…Else語(yǔ)句的條件語(yǔ)句相對(duì)應(yīng)。因此,IR202的第7到23行與程序201中的If…Else語(yǔ)句的第一塊相對(duì)應(yīng),第24到51行與程序201中的If…Else語(yǔ)句的第二塊相對(duì)應(yīng)。IR202的第7到14行與程序201中的第一個(gè)for循環(huán)相對(duì)應(yīng),第15到23行與程序201中的第二個(gè)for循環(huán)相對(duì)應(yīng),第24到31行與程序201中的第三個(gè)for循環(huán)相對(duì)應(yīng),第32到39行與程序201中的第四個(gè)for循環(huán)相對(duì)應(yīng),以及第40到51行與程序201中的第五個(gè)for循環(huán)相對(duì)應(yīng)。
[0026]圖3C示出根據(jù)一個(gè)實(shí)施例的、是圖3B的IR202的經(jīng)修改版本的IR202-1。如圖3C所示,圖3B的IR202中的指令中的一些已經(jīng)被修改以優(yōu)化線程棧存儲(chǔ)器的分配。線程棧存儲(chǔ)器的部分被分配給第一數(shù)組A、第二數(shù)組B以及整數(shù)result,所述整數(shù)result被初始化為O。不同于IR202,線程棧存儲(chǔ)器的部分最初未被分配給第三數(shù)組C。IR202-1中的If…Else語(yǔ)句的第一塊(即第6到22行)保持與圖3B的IR202中的If…Else語(yǔ)句的第一塊(即第7到23行)相同。然而,編譯器210已修改IR202-1中的If…Else語(yǔ)句的第二塊(即第23到50行)以優(yōu)化線程棧存儲(chǔ)器的分配。應(yīng)理解的是,僅兩個(gè)數(shù)組A和B被分配在IR202-1中。包括引用IR202中的數(shù)組B的操作數(shù)的指令已被以引用IR202-1中的數(shù)組A的操作數(shù)所替換。類似地,包括引用IR202中的數(shù)組C的操作數(shù)的指令已被以引用IR202-1中的數(shù)組B的操作數(shù)所替換。因此,被分配在IR202-1中的兩個(gè)數(shù)組A和B分別與圖3B的IR202的數(shù)組B和C相對(duì)應(yīng)。因此,與用于IR202中的三個(gè)2000元素的數(shù)組的24千字節(jié)相t匕,用于IR202-1的所分配線程棧存儲(chǔ)器的量是用于IR202-1中的兩個(gè)2000元素的數(shù)組的最大值16千字節(jié)(假定變量result被分配給寄存器而不是線程棧存儲(chǔ)器)。
[0027]圖4示出根據(jù)一個(gè)實(shí)施例的、用于分析IR202以確定哪些對(duì)象可被分配到線程棧存儲(chǔ)器中的相同存儲(chǔ)器空間的方法400的流程圖。在步驟402,編譯器210標(biāo)識(shí)IR202中的所有配棧對(duì)象。編譯器210可以逐句通過(guò)IR202中的指令的每一個(gè)并且確定指令是否使線程棧中的存儲(chǔ)器被分配給對(duì)象。如果是,那么對(duì)象被標(biāo)識(shí)為配棧對(duì)象。例如,IR202可以包括分配指令(例如“a=alloc(int,2000) ”),其將線程棧存儲(chǔ)器的一部分分配給對(duì)象并且將指向?qū)ο蟮闹羔樦概山o變量a。
[0028]在步驟404,針對(duì)每個(gè)配棧對(duì)象,編譯器210分析IR202以標(biāo)識(shí)具有對(duì)配棧對(duì)象的訪問(wèn)權(quán)的所有變量。換句話說(shuō),作為指令的結(jié)果,如果在指令的右邊(RHS)的一個(gè)或多個(gè)變量指向?qū)ο?,那么表示指令的左?LHS)的變量“指向”對(duì)象。例如,如果句柄a被拷貝到b,那么b被認(rèn)為指向被分配給a的對(duì)象并且因此應(yīng)被跟蹤以確定用于a的存儲(chǔ)器空間何時(shí)正被使用。對(duì)其而言結(jié)果可指向配棧對(duì)象的具體指令是不同的,這取決于由IR202所利用的中間語(yǔ)言。指向配棧對(duì)象的指令的類型包括但不限于拷貝指令、二進(jìn)制操作、轉(zhuǎn)換(例如類型轉(zhuǎn)換)、PHI節(jié)點(diǎn)(即用來(lái)選擇取決于當(dāng)前塊的前驅(qū)的值的特殊指令)、存儲(chǔ)指令以及函數(shù)調(diào)用。在一個(gè)實(shí)施例中,如果變量指向被分配給對(duì)象的存儲(chǔ)器空間中的任何位置,那么變量被認(rèn)為指向整個(gè)對(duì)象(即不僅是對(duì)象的特定元素)。表1示出用于標(biāo)識(shí)具有對(duì)配棧對(duì)象的訪問(wèn)權(quán)的所有變量的示范性偽代碼:
[0029]表1
[0030]
【權(quán)利要求】
1.一種方法,包括: 接收用于程序的源代碼; 將所述源代碼轉(zhuǎn)譯成中間表示(IR); 分析所述IR以標(biāo)識(shí)能使用線程棧存儲(chǔ)器中的第一所分配存儲(chǔ)器空間的至少兩個(gè)對(duì)象;以及 通過(guò)以對(duì)所述至少兩個(gè)對(duì)象中的第二對(duì)象的引用替換對(duì)所述至少兩個(gè)對(duì)象中的第一對(duì)象的引用來(lái)修改所述IR。
2.根據(jù)權(quán)利要求1所述的方法,其中所述IR包括LLVM(低級(jí)虛擬機(jī)編譯器基礎(chǔ)結(jié)構(gòu))匯編語(yǔ)目。
3.根據(jù)權(quán)利要求1所述的方法,其中所述源代碼包括由C++、Java、C#以及Cg中的至少一個(gè)高級(jí)編程語(yǔ)言所指定的多個(gè)指令。
4.根據(jù)權(quán)利要求1所述的方法,其中分析所述IR包括: 標(biāo)識(shí)所述IR中的多個(gè)配棧對(duì)象; 針對(duì)所述多個(gè)配棧對(duì)象中的每個(gè)配棧對(duì)象,標(biāo)識(shí)具有對(duì)所述配棧對(duì)象的訪問(wèn)權(quán)的所有變量; 確定哪些配棧對(duì)象在所述IR中的相同點(diǎn)處是活的;以及 確定哪些配棧對(duì)象能被分`配到所述第一所分配存儲(chǔ)器空間。
5.根據(jù)權(quán)利要求4所述的方法,其中分析所述IR進(jìn)一步包括生成用于所述多個(gè)配棧對(duì)象中的每個(gè)配棧對(duì)象的活性網(wǎng)。
6.根據(jù)權(quán)利要求5所述的方法,其中所述活性網(wǎng)包括用于所述配棧對(duì)象的def和use的合集。
7.根據(jù)權(quán)利要求1所述的方法,其中將所述源代碼轉(zhuǎn)譯成所述IR由實(shí)現(xiàn)在用于圖形處理單元的驅(qū)動(dòng)程序中的編譯器實(shí)施。
8.根據(jù)權(quán)利要求7所述的方法,其中所述源代碼包括著色器程序。
9.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括: 分析所述IR以標(biāo)識(shí)能使用所述線程棧存儲(chǔ)器中的第二所分配存儲(chǔ)器空間的至少兩個(gè)附加的對(duì)象;以及 通過(guò)以對(duì)所述至少兩個(gè)附加的對(duì)象中的第二對(duì)象的引用替換對(duì)所述至少兩個(gè)附加的對(duì)象中的第一對(duì)象的引用來(lái)修改所述IR。
10.根據(jù)權(quán)利要求9所述的方法,其中分析所述IR以標(biāo)識(shí)至少兩個(gè)附加的對(duì)象包括: 標(biāo)識(shí)與使用所述第一所分配存儲(chǔ)器空間的另一個(gè)對(duì)象沖突的第一附加的對(duì)象;以及 標(biāo)識(shí)與使用所述第一所分配存儲(chǔ)器空間的另一個(gè)對(duì)象沖突的至少一個(gè)附加的對(duì)象。
11.一種存儲(chǔ)指令的非易失性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述指令當(dāng)由處理器執(zhí)行時(shí)使所述處理器實(shí)施步驟,包括: 接收用于程序的源代碼; 將所述源代碼轉(zhuǎn)譯成中間表示(IR); 分析所述IR以標(biāo)識(shí)能使用線程棧存儲(chǔ)器中的第一所分配存儲(chǔ)器空間的至少兩個(gè)對(duì)象;以及 通過(guò)以對(duì)所述至少兩個(gè)對(duì)象中的第二對(duì)象的引用替換對(duì)所述至少兩個(gè)對(duì)象中的第一對(duì)象的引用來(lái)修改所述IR。
12.根據(jù)權(quán)利要求11所述的非易失性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中所述IR包括LLVM(低級(jí)虛擬機(jī)編譯器基礎(chǔ)結(jié)構(gòu))匯編語(yǔ)言。
13.根據(jù)權(quán)利要求11所述的非易失性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中分析所述IR包括: 標(biāo)識(shí)所述IR中的多個(gè)配棧對(duì)象; 針對(duì)所述多個(gè)配棧對(duì)象中的每個(gè)配棧對(duì)象,標(biāo)識(shí)具有對(duì)所述配棧對(duì)象的訪問(wèn)權(quán)的所有變量; 確定哪些配棧對(duì)象在所述IR中的相同點(diǎn)處是活的;以及 確定哪些配棧對(duì)象能被分配到所述第一所分配存儲(chǔ)器空間。
14.根據(jù)權(quán)利要求11所述的非易失性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中分析所述IR進(jìn)一步包括生成用于所述多個(gè)配棧對(duì)象中的每個(gè)配棧對(duì)象的活性網(wǎng)。
15.根據(jù)權(quán)利要求11所述的非易失性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中將所述源代碼轉(zhuǎn)譯成所述IR由實(shí)現(xiàn)在用于圖形處理單元的驅(qū)動(dòng)程序中的編譯器實(shí)施。
16.—種系統(tǒng),包括: 存儲(chǔ)器,其配置為存儲(chǔ)用于程序的源代碼;以及 處理單元,其配置為: 接收所述源代碼, 將所述源代碼轉(zhuǎn)譯成中間 表示(IR), 分析所述IR以標(biāo)識(shí)能使用線程棧存儲(chǔ)器中的第一所分配存儲(chǔ)器空間的至少兩個(gè)對(duì)象,以及 通過(guò)利用以對(duì)所述至少兩個(gè)對(duì)象中的第二對(duì)象的引用替換對(duì)所述至少兩個(gè)對(duì)象中的第一對(duì)象的引用來(lái)修改所述IR。
17.根據(jù)權(quán)利要求16所述的系統(tǒng),其中分析所述IR包括: 標(biāo)識(shí)所述IR中的多個(gè)配棧對(duì)象; 針對(duì)所述多個(gè)配棧對(duì)象中的每個(gè)配棧對(duì)象,標(biāo)識(shí)具有對(duì)所述配棧對(duì)象的訪問(wèn)權(quán)的所有變量; 確定哪些配棧對(duì)象在所述IR中的相同點(diǎn)處是活的;以及 確定哪些配棧對(duì)象能被分配到所述第一所分配存儲(chǔ)器空間。
18.根據(jù)權(quán)利要求16所述的系統(tǒng),其中所述源代碼包括著色器程序。
19.根據(jù)權(quán)利要求16所述的系統(tǒng),進(jìn)一步包括耦連到所述處理單元和所述存儲(chǔ)器的圖形處理單元。
20.根據(jù)權(quán)利要求19所述的系統(tǒng),進(jìn)一步包括存儲(chǔ)在所述存儲(chǔ)器中的驅(qū)動(dòng)程序,其中所述驅(qū)動(dòng)程序?qū)崿F(xiàn)編譯器,所述編譯器當(dāng)由所述處理單元執(zhí)行時(shí)將所述處理單元配置為接收所述源代碼、將所述源代碼轉(zhuǎn)譯成所述IR、分析所述IR以及修改所述IR。
【文檔編號(hào)】G06F9/30GK103870242SQ201310675015
【公開(kāi)日】2014年6月18日 申請(qǐng)日期:2013年12月11日 優(yōu)先權(quán)日:2012年12月12日
【發(fā)明者】阿德里安娜·瑪麗亞·蘇斯內(nèi)亞, 維諾德·格羅弗, 肖恩·揚(yáng)孫·李 申請(qǐng)人:輝達(dá)公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
安平县| 文化| 元江| 承德县| 嘉义市| 鄂尔多斯市| 遂平县| 太康县| 上思县| 东丰县| 蓬溪县| 台北市| 自贡市| 太原市| 平谷区| 民和| 荔波县| 墨江| 镶黄旗| 鄂伦春自治旗| 长泰县| 白银市| 隆林| 大方县| 深圳市| 枝江市| 广东省| 米泉市| 班戈县| 台湾省| 桐城市| 深圳市| 温泉县| 鄄城县| 甘孜| 湛江市| 隆子县| 辽宁省| 惠州市| 武夷山市| 潞西市|