專利名稱:指令摺疊機(jī)制及其方法以及使用該摺疊機(jī)制及該方法之像素處理系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明關(guān)于一種摺疊機(jī)制及其方法,以及執(zhí)行該摺疊機(jī)制及該方法的像素處理系統(tǒng),特別是有關(guān)于一種用于圖形處理器(Graphic Processor Unit,GPU)的指令摺疊機(jī)制(Instruction Folding Mechanism)及指令摺疊方法,以及使用該摺疊機(jī)制及該摺疊方法的像素處理系統(tǒng)。
背景技術(shù):
圖1為現(xiàn)有的圖形處理器的管線(Pipeline)架構(gòu)方框圖。圖形處理器100主要包含三角設(shè)定單元102、像素處理單元104以及深度處理單元106,像素處理單元104包括像素著色器108以及連接于像素著色器108的材質(zhì)單元(Texture Unit)110與色彩內(nèi)插器(Color Interpolator)112。
將三維對(duì)象的表面分割成若干個(gè)三角形,該些三角形以幾何關(guān)聯(lián)性排列且具有任意的尺寸。每個(gè)三角形包含三個(gè)頂點(diǎn),并且將這些頂點(diǎn)數(shù)據(jù)傳送至三角設(shè)定單元102,三角設(shè)定單元102將像素的參數(shù)輸出至像素處理單元104,其中參數(shù)像素在三角形的位置以及對(duì)應(yīng)于三角形頂點(diǎn)的材質(zhì)坐標(biāo)。依據(jù)像素的位置以及頂點(diǎn)的材質(zhì)坐標(biāo),利用材質(zhì)單元110內(nèi)插所有像素的材質(zhì)坐標(biāo),然后將內(nèi)插形成的材質(zhì)坐標(biāo)輸入至像素著色器108,并且在像素著色器108中進(jìn)行處理。接著像素著色器108執(zhí)行加載指令,并且回傳已處理完成的材質(zhì)坐標(biāo)給材質(zhì)單元110。根據(jù)未處理的材質(zhì)坐標(biāo)以及已處理的材質(zhì)坐標(biāo),材質(zhì)單元110對(duì)像素在材質(zhì)圖中的材質(zhì)顏色進(jìn)行取樣,并且將材質(zhì)顏色輸出至像素著色器108。同時(shí)依據(jù)像素的位置以及頂點(diǎn)的材質(zhì)坐標(biāo),色彩內(nèi)插器112對(duì)所有像素的頂點(diǎn)顏色作內(nèi)插運(yùn)算,并且將這些頂點(diǎn)顏色輸出至像素著色器108。像素著色器108處理材質(zhì)顏色以及像素的頂點(diǎn)顏色,并且將色彩值以及深度值輸出至深度處理單元106,以形成所顯示的像素顏色。然后畫(huà)出最后的顏色,以形成整個(gè)畫(huà)面(Frame)。
圖2為習(xí)知的圖形處理器以像素著色器執(zhí)行一范例程序的方框圖。像素著色器108使用五種緩存器,主要包含用來(lái)儲(chǔ)存暫時(shí)性數(shù)據(jù)的一般緩存器(rn)、材質(zhì)坐標(biāo)緩存器(tn)、材質(zhì)編號(hào)緩存器(sn)、頂點(diǎn)混色緩存器(vn)以及輸出緩存器(ocn),并且將最后轉(zhuǎn)換完成的像素顏色傳送至深度處理單元106。
像素著色器108的處理流程主要包括四個(gè)階段坐標(biāo)計(jì)算階段、材質(zhì)加載階段、混色階段以及發(fā)出階段。首先將來(lái)自材質(zhì)單元110的像素內(nèi)插材質(zhì)坐標(biāo)儲(chǔ)存于材質(zhì)坐標(biāo)緩存器(tn)。在坐標(biāo)計(jì)算階段,將來(lái)自材質(zhì)單元110的像素的內(nèi)插材質(zhì)坐標(biāo)利用材質(zhì)坐標(biāo)緩存器(tn)以及一般緩存器(rn)進(jìn)行算術(shù)運(yùn)算,然后將運(yùn)算的結(jié)果(亦即處理之后的材質(zhì)坐標(biāo))儲(chǔ)存于一般緩存器(rn)內(nèi)。在材質(zhì)處理階段,根據(jù)材質(zhì)坐標(biāo)緩存器(tn)以及一般緩存器(rn)內(nèi)的材質(zhì)坐標(biāo),利用像素著色器108來(lái)執(zhí)行材質(zhì)加載指令,使材質(zhì)單元110從材質(zhì)編號(hào)緩存器(sn)指定的材質(zhì)圖中取樣出材質(zhì)顏色,再將取樣完成的材質(zhì)顏色傳回一般緩存器(rn)。在混色階段,利用像素著色器108將儲(chǔ)存在緩存器(rn)的材質(zhì)顏色以及來(lái)自色彩內(nèi)插器112的頂點(diǎn)顏色作混色運(yùn)算,并且將混色運(yùn)算的結(jié)果儲(chǔ)存于頂點(diǎn)混色緩存器(vn)中。最后在發(fā)出階段,像素著色器108將色彩值以及深度值輸出至深度處理單元106。應(yīng)注意的是,坐標(biāo)計(jì)算階段、材質(zhì)處理階段以及混色階段可重復(fù)進(jìn)行。
每個(gè)緩存器系由四個(gè)具有浮點(diǎn)數(shù)據(jù)格式的字段(Components)所組成,例如(x,y,z,w)或是(r,g,b,a),此四種字段(x,y,z,w)稱為四元向量(Four-wide Vectors)。在坐標(biāo)計(jì)算以及材質(zhì)處理階段,此四種字段用來(lái)表示三維空間的坐標(biāo)或者是表示不同的材質(zhì)格式的坐標(biāo)。在混色階段以及發(fā)出階段,四種字段(r,g,b,a)分別代表紅(Red)、綠(Green)、藍(lán)(Blue)三原色以及透明度(Transparency)。這些字段配置給指令來(lái)源緩存器以及目標(biāo)緩存器,而且可讀取各個(gè)字段內(nèi)的值或是將值寫(xiě)入至字段中,舉例來(lái)說(shuō),“r0.w”表示指令讀取”r0”緩存器的”w”字段的數(shù)據(jù),或是表示將數(shù)據(jù)寫(xiě)入至“w”字段內(nèi)。
現(xiàn)有技術(shù)中,由于四種字段(r,g,b,a)的紅(Red)、綠(Green)、藍(lán)(Blue)三個(gè)字段與透明度字段的性質(zhì)不同,故其處理步驟不相同,因此需要至少兩種以上的獨(dú)立管線架構(gòu)來(lái)處理不同的字段。同樣地,當(dāng)以坐標(biāo)字段表示時(shí),坐標(biāo)(x,y,z)字段也與透視度“w”字段不相同。例如在DirectX的規(guī)格中,串聯(lián)兩個(gè)獨(dú)立的管線來(lái)處理一指令對(duì)(Pair)并且將該指令對(duì)同時(shí)發(fā)出,其利用此指令對(duì)(Pair)中后面的指令之前加注正號(hào)“+”而與前面的指令串聯(lián)在一起來(lái)形成該指令對(duì),此指令對(duì)稱為指令配對(duì)(Instruction Pairing)或是指令同時(shí)發(fā)出(Instruction Co-issue)機(jī)制,其字段的比值為3比1,如圖3A所示。然而必須大幅增加解析運(yùn)算子的譯碼器、管線、緩存器寫(xiě)入端口以及緩存器讀取端口的數(shù)量,至少需要兩倍以上的數(shù)量才能處理這些指令配對(duì)。進(jìn)一步地,現(xiàn)有技術(shù)的像素著色器108需要更多、更復(fù)雜的處理功能,例如字段的選擇、數(shù)據(jù)格式的轉(zhuǎn)換、指令修正,以便使指令能處理來(lái)源緩存器以及目標(biāo)緩存器中的操作數(shù)(Operand),以致于像素處理系統(tǒng)在執(zhí)行上述復(fù)雜的功能時(shí)需要大幅增加硬件成本。
參考圖3B,其為現(xiàn)有的像素著色程序中指令的字段比例圖式,其中一比例圖式為三個(gè)色彩字段與一個(gè)透明度字段,另一比例圖式為二個(gè)色彩字段與二個(gè)透明度字段。在兩個(gè)互為獨(dú)立的指令中,一個(gè)指令用來(lái)寫(xiě)入兩個(gè)色彩字段“r”以及“g”,另一個(gè)指令用來(lái)寫(xiě)入一個(gè)色彩“b”字段以及透明度“a”字段。由于必須使用更為復(fù)雜的硬件架構(gòu)來(lái)處理這些指令,因而提高像素著色器的硬件成本,例如nVidia公司的GeForce6系列的圖形處理器就是使用此種復(fù)雜的指令同時(shí)發(fā)出機(jī)制。
圖4為現(xiàn)有的像素著色器中使用指令同時(shí)發(fā)出機(jī)制的方框圖。擷取裝置400根據(jù)程序指位器(Program Counter)由指令隊(duì)列402中讀取兩個(gè)指令,然后一對(duì)譯碼器(404a,404b)對(duì)擷取的指令進(jìn)行譯碼,并且控制算術(shù)邏輯單元(406a,406b)的運(yùn)算。由于算術(shù)邏輯單元(406a,406b)以平行處理方式執(zhí)行四個(gè)向量字段,并且至少需要使用一對(duì)緩存器端口(408a,408b),而每個(gè)緩存器端口(408a,408b)包括三個(gè)緩存器讀取端口以及一個(gè)緩存器寫(xiě)入端口。此外每個(gè)緩存器端口必需使用一個(gè)來(lái)源修正器(Source Modifier)以及一個(gè)指令修正器(Instruction Modifier),以便處理指令中來(lái)源操作數(shù)以及目標(biāo)操作數(shù)的字段選擇以及數(shù)據(jù)格式的轉(zhuǎn)換。
因此,當(dāng)色彩字段與透明度字段之間的比例不同時(shí),指令同時(shí)發(fā)出機(jī)制必須使用額外的偵測(cè)機(jī)制來(lái)決定同時(shí)發(fā)出機(jī)制的時(shí)序,導(dǎo)致像素著色程序的指令執(zhí)行更加地復(fù)雜。而且,有關(guān)于兩個(gè)指令之間的來(lái)源緩存器以及目標(biāo)緩存器的指令配對(duì)規(guī)則之處理時(shí)序并不相同,所以緩存器讀取端口以及緩存器寫(xiě)入端口的使用數(shù)量至少是處理單一指令所需要的數(shù)量?jī)杀兑陨?。此外,?lái)源修正器以及指令修正器的數(shù)量亦需要兩倍以上的數(shù)量。
因此需要發(fā)展一種具有摺疊機(jī)制的像素處理系統(tǒng),以降低硬件的成本以及提高圖形處理器的效能。
發(fā)明內(nèi)容本發(fā)明的主要目的在于提供一種用于像素處理系統(tǒng)的摺疊機(jī)制及其方法,以摺疊一程序中具有數(shù)據(jù)獨(dú)立性的指令,形成由該指令組成的復(fù)合指令,以產(chǎn)生一新程序。
本發(fā)明的另一目的在于提供一種用于像素處理系統(tǒng)的摺疊機(jī)制及其方法,以摺疊具有相同目標(biāo)緩存器的指令,并且將各個(gè)指令處理之后的數(shù)據(jù)輸出至該目標(biāo)緩存器的不同字段,以節(jié)省像素處理系統(tǒng)的硬件成本。
本發(fā)明的再一目的在于提供一種用于像素處理系統(tǒng)的摺疊機(jī)制及該像素處理系統(tǒng),以改善像素處理系統(tǒng)的執(zhí)行效能。
根據(jù)上述目的,本發(fā)明提出一種指令摺疊機(jī)制及其方法,以及使用該摺疊機(jī)制及該方法的像素處理系統(tǒng)。像素處理系統(tǒng)主要包括指令摺疊機(jī)制以及像素著色器,指令摺疊機(jī)制系用以摺疊第一程序中若干個(gè)第一指令,以產(chǎn)生具有第二指令的第二程序,其中第二指令是由第一指令所組成的復(fù)合指令。像素著色器連接于指令摺疊機(jī)制,用以擷取第二程序,并且對(duì)第二程序中的第二指令進(jìn)行譯碼,以執(zhí)行該第二程序。
指令摺疊機(jī)制主要包括指令排序器、指令規(guī)則檢查器以及指令結(jié)合器。指令排序器連接于摺疊規(guī)則檢查器,主要是根據(jù)指令的靜態(tài)位置來(lái)掃描第一指令,以對(duì)第一程序中的第一指令進(jìn)行排序。在較佳實(shí)施例中,指令排序器以連續(xù)方式掃描第一指令,摺疊規(guī)則檢查器利用一摺疊規(guī)則來(lái)檢查第一指令之間使用的數(shù)據(jù)的獨(dú)立性。指令結(jié)合器連接于摺疊規(guī)則檢查器,用以結(jié)合具有數(shù)據(jù)獨(dú)立性的第一指令,并且利用具有數(shù)據(jù)獨(dú)立性的第一指令形成第二程序中的第二指令。
在一實(shí)施例中,相鄰的第一指令之間的數(shù)據(jù)獨(dú)立性是指后一個(gè)第一指令的來(lái)源緩存器與前一個(gè)第一緩存器的目標(biāo)緩存器兩者不相同,即相鄰指令的數(shù)據(jù)輸出至一目標(biāo)緩存器的不同字段。在一實(shí)施例中,第一指令以及第二指令的來(lái)源操作數(shù)的總數(shù)量為一預(yù)定臨界值,且譯碼器可以針對(duì)不同的復(fù)合指令進(jìn)行譯碼。
當(dāng)執(zhí)行像素處理系統(tǒng)的方法時(shí),首先利用一摺疊機(jī)制摺疊第一程序中若干個(gè)第一指令,以形成具有第二指令的第二程序,第二指令為兩個(gè)或是兩個(gè)以上的第一指令所組成的復(fù)合指令。接著根據(jù)一程序指位器擷取第二指令。然后利用一譯碼器對(duì)第二指令進(jìn)行譯碼,并且形成一控制信號(hào)。隨后一算術(shù)邏輯單元根據(jù)控制信號(hào)對(duì)第二指令的若干個(gè)緩存器字段進(jìn)行邏輯運(yùn)算。最后利用控制緩存器端口來(lái)選定緩存器字段,以進(jìn)行第二指令的操作數(shù)數(shù)據(jù)格式的轉(zhuǎn)換處理。
本發(fā)明的優(yōu)點(diǎn)主要包括(a)依據(jù)數(shù)據(jù)的獨(dú)立性摺疊指令,可以形成簡(jiǎn)化的復(fù)合指令,以產(chǎn)生新的程序;(b)摺疊程序中具有相同目標(biāo)緩存器的指令,并且將數(shù)據(jù)輸出至該目標(biāo)緩存器的不同字段,可以節(jié)省像素處理系統(tǒng)的硬件成本;以及(c)提供了一種應(yīng)用于像素處理系統(tǒng)的摺疊機(jī)制,其可以改善像素處理系統(tǒng)的效能。
圖1為現(xiàn)有技術(shù)中圖形處理器的管線架構(gòu)的方框圖。
圖2為現(xiàn)有的圖形處理器中以像素著色器執(zhí)行一范例程序的方框圖。
圖3A為現(xiàn)有的像素著色程序中每個(gè)指令的字段的比例圖式,其中該比例圖式為三個(gè)色彩字段以及一個(gè)透明度字段。
圖3B為現(xiàn)有的像素著色程序中每個(gè)指令的字段的比例圖式,其中一比例圖式為三個(gè)色彩字段以及一個(gè)透明度字段,另一比例圖式為二個(gè)色彩字段以及二個(gè)透明度字段。
圖4為現(xiàn)有的像素著色器中使用指令同時(shí)發(fā)出機(jī)制的方框圖。
圖5為本發(fā)明一實(shí)施例中具有指令摺疊機(jī)制的像素處理系統(tǒng)的方框圖。
圖6為本發(fā)明一實(shí)施例中利用圖5所示的摺疊機(jī)制執(zhí)行一范例程序的方框圖。
圖7為圖5中的摺疊機(jī)制的詳細(xì)方框圖。
圖8為依據(jù)本發(fā)明的一實(shí)施例像素處理系統(tǒng)的執(zhí)行流程圖。
圖9為圖8中像素處理系統(tǒng)的執(zhí)行過(guò)程中的摺疊機(jī)制的流程圖。
具體實(shí)施方式
本發(fā)明提供一種指令摺疊機(jī)制及其方法,以及使用該摺疊機(jī)制與該方法之像素處理系統(tǒng),通過(guò)摺疊具有數(shù)據(jù)獨(dú)立性(Data Independent)的指令來(lái)產(chǎn)生簡(jiǎn)化的指令,進(jìn)而形成一新的程序。此外,指令摺疊機(jī)制還可用來(lái)摺疊具有相同目標(biāo)緩存器的指令,并且將該指令的數(shù)據(jù)輸出至目標(biāo)緩存器的不同字段,以節(jié)省像素處理系統(tǒng)的硬件成本。熟習(xí)此項(xiàng)技術(shù)的業(yè)內(nèi)一般人士都應(yīng)知道,本發(fā)明的摺疊機(jī)制更可適用于圖形處理系統(tǒng)中的頂點(diǎn)著色器(VertexShader)以及幾何著色器(Geometric Shader)。
圖5為根據(jù)本發(fā)明的一實(shí)施例具有指令摺疊機(jī)制的像素處理系統(tǒng)的方框圖。該像素處理系統(tǒng)主要包括指令摺疊機(jī)制500以及像素著色器502,指令摺疊機(jī)制500用以摺疊第一程序504中若干個(gè)第一指令,以產(chǎn)生具有第二指令的第二程序506,其中第二指令是由第一指令所組成的族群,亦即第二指令是由第一指令組成的復(fù)合指令。像素著色器502連接于指令摺疊機(jī)制500,用以擷取第二程序506,并且對(duì)第二程序506中的第二指令進(jìn)行譯碼,以執(zhí)行該第二程序506。
圖6為根據(jù)本發(fā)明的一實(shí)施例利用圖5的摺疊機(jī)制500執(zhí)行一范例程序的方框圖。在第一程序504中,指令“mul”的數(shù)據(jù)與指令“mov”的數(shù)據(jù)兩者互相獨(dú)立而不互相使用,而且指令“mul”與“mov”的輸出數(shù)據(jù)被儲(chǔ)存于相同的緩存器中,即緩存器”r1”,且儲(chǔ)存于同一緩存器的不同字段。在本發(fā)明的一實(shí)施例中,資料的來(lái)源操作數(shù)的總數(shù)量為三個(gè),主要包括“r0”、“t0”以及“r0.a”,并且利用指令摺疊機(jī)制500來(lái)摺疊來(lái)源操作數(shù),以形成另一復(fù)合指令”mul_mov”,亦即該復(fù)合指令是由第一指令所組成,進(jìn)而形成第二程序506,而且譯碼器可解析出摺疊第一指令之后產(chǎn)生的復(fù)合指令。由于本發(fā)明的像素著色器502的指令可涵蓋來(lái)源操作數(shù)的總數(shù),而譯碼出任何的復(fù)合指令,故并不需要在指令中新增操作數(shù),因此可以節(jié)省像素著色器的成本。相對(duì)地,在現(xiàn)有的指令同時(shí)發(fā)出機(jī)制中,必須使用額外的譯碼器來(lái)解析運(yùn)算子(Operator),以及使用更多的管線架構(gòu)、緩存器寫(xiě)入端口以及緩存器讀取端口。而且現(xiàn)有的指令必須具備更多的處理能力,例如緩存器的字段選擇、數(shù)據(jù)格式的轉(zhuǎn)換、程序來(lái)源碼的修正以及來(lái)源操作數(shù)與目的操作數(shù)的指令修正,所以如何有效降低操作數(shù)的數(shù)量實(shí)為重要的課題。
圖7為圖5所示的摺疊機(jī)制的詳細(xì)方框圖。指令摺疊機(jī)制500主要包括指令排序器(Instruction Scheduler)700、指令規(guī)則檢查器(Folding RuleChecker)702以及指令結(jié)合器(Instruction Combiner)704。指令排序器700連接于摺疊規(guī)則檢查器702,其主要根據(jù)第一指令在第一程序中的靜態(tài)位置來(lái)掃描第一指令,以對(duì)第一程序504中的第一指令進(jìn)行排序。較佳實(shí)施例中,指令排序器700以連續(xù)方式掃描第一指令。摺疊規(guī)則檢查器702利用一摺疊規(guī)則來(lái)檢查第一指令之間的數(shù)據(jù)的獨(dú)立性。指令結(jié)合器704連接于摺疊規(guī)則檢查器702,用以結(jié)合具有數(shù)據(jù)獨(dú)立性的第一指令,并且利用具有數(shù)據(jù)獨(dú)立性的第一指令形成第二程序506中的第二指令。此處所稱的“數(shù)據(jù)獨(dú)立性”表示兩個(gè)指令之間所處理的數(shù)據(jù)不具有依賴性,亦即后一個(gè)指令的數(shù)據(jù)不會(huì)使用到前一個(gè)指令的運(yùn)算結(jié)果。特定而言,在本發(fā)明的較佳實(shí)施例中,摺疊規(guī)則以下列方程式表示(1)OPC1tgt.[r|g|b],src0,src1OPC2tgt.a,src2OPC1_OPC2 tgt.[r|g|b]a,src0,src1,src2,此處tgt.[r|g|b]∩src2=φOPC1以及OPC2為任意的運(yùn)算子,且OPC1_OPC2為一復(fù)合運(yùn)算子,用以表示OPC1存取色彩字段(r,g,b)以及OPC2存取透明度字段(a),OPC1的目標(biāo)操作數(shù)為“tgt.[r|g|b]”且OPC1的目標(biāo)操作數(shù)為“tgt.a”,所以O(shè)PC1以及OPC2兩個(gè)運(yùn)算子的目標(biāo)操作數(shù)相同,均為緩存器“tgt”,然而其緩存器的字段不相同,例如透明度字段(a)設(shè)于OPC2但是不設(shè)在OPC1中。此外色彩字段(r,g,b)中例如可為至少一種或是一種以上的色彩向量字段。
src0,src1,src2為來(lái)源操作數(shù)(Source Operand)并且設(shè)有任意字段數(shù)量的緩存器,其中OPC1例如可為含有兩個(gè)操作數(shù)的二元(Binary)運(yùn)算子,亦即包括src0、src1,或者可為只有一個(gè)src0操作數(shù)的單元(Unitary)運(yùn)算子。tgt.[r|g|b]∩src2=φ表示OPC1與OPC2之間的數(shù)據(jù)獨(dú)立性,亦即OPC1的運(yùn)算結(jié)果與OPC2的來(lái)源操作數(shù)無(wú)關(guān)聯(lián)性。在一實(shí)施例中,OPC1并不需要與OPC2相鄰,而只要OPC1的數(shù)據(jù)與OPC2的數(shù)據(jù)互相獨(dú)立而不相關(guān)聯(lián)即可將OPC1與OPC2結(jié)合成一復(fù)合指令。當(dāng)考慮OPC1與OPC2之間的順序時(shí),上述方程式表示為(2)OPC2 tgt.a,src2OPC1 tgt.[r|g|b],src0,src1OPC1_OPC2tgt.[r|g|b]a,src0,src1,src2,此處tgt.a∩(src0∪src1)=φ當(dāng)指令OPC1為單元操作數(shù)以及OPC2為二元操作數(shù),摺疊規(guī)則的方程式也可表示為(3)OPC1 tgt.[r|g|b],src0OPC2 tgt.a,src1,src2OPC1_OPC2tgt.[r|g|b]a,src0,src1,src2,此處tgt.[r|g|b]∩(src1∪src2)=φ(4)OPC2 tgt.a,src1,src2OPC1 tgt.[r|g|b],src0OPC1_OPC2tgt.[r|g|b]a,src0,src1,src2,此處tgt.a∩src0=φ應(yīng)注意的是,當(dāng)OPC2為單元運(yùn)算子,只需要使用src1操作數(shù)。
在本發(fā)明的較佳實(shí)施例中,于圖形處理特效的應(yīng)用領(lǐng)域,當(dāng)字段“a”用來(lái)表示透明度或是對(duì)象的四元向量坐標(biāo)之一,可單獨(dú)存取字段“a”并且利用指令“mov”將其結(jié)果移出。于打光特效的應(yīng)用領(lǐng)域中,當(dāng)字段“a”為離光源的距離或是角度,可利用指令“rsq”存取字段“a”,以計(jì)算出(1/√x)的結(jié)果。當(dāng)字段(r,g,b)表示為色彩或是坐標(biāo),存取這些字段的指令例如可為指令“mov”、“mul”、“add”、“mad”以及“dp3”。在一實(shí)施例中,當(dāng)OPC1為指令“mov”、“mul”、“add”、“mad”或是“dp3”,且OPC2為“mov”或是“rsq”,則復(fù)合指令OPC1_OPC2可為指令“mov_mov”、“mul_mov”、“add_mov”、“dp3_mov”、“mov_rsq”、“mul_rsq”、“add_rsq”或是“dp3_rsq”。本發(fā)明中所使用的譯碼器,例如可以是硬件或是軟件譯碼器,用以對(duì)上述復(fù)合指令進(jìn)行譯碼,或是針對(duì)其它OPC1與OPC2組合而成的復(fù)合指令作譯碼,以有效提高像素著色系統(tǒng)的處理能力。
在本發(fā)明的另一較佳實(shí)施例中,依據(jù)摺疊規(guī)則產(chǎn)生的復(fù)合指令的操作數(shù)為四個(gè),主要包括src0、src1、src2、src3,并且可配合使用指令“mad”。本發(fā)明使用緩存器讀取端口以及來(lái)源修正器,其成本效益優(yōu)于習(xí)知指令同時(shí)發(fā)出機(jī)制所使用的緩存器讀取端口以及來(lái)源修正器。上述之摺疊規(guī)則的方程式表示為(5)OPC1tgt.[r|g|b],src0,src1,src2OPC2tgt.a,src3OPC1_OPC2 tgt.[r|g|b]a,src0,src1,src2,src3,此處tgt.[r|g|b]∩src3=φ當(dāng)考慮OPC1與OPC2之間的順序時(shí),上述之方程式可表示為(6)OPC2tgt.a,src3OPC1tgt.[r|g|b],src0,src1,src2OPC1_OPC2 tgt.[r|g|b]a,src0,src1,src2,src3,此處tgt.a∩(src0∪src1∪src2)=φ
應(yīng)注意的是,當(dāng)OPC1為單元運(yùn)算子,只需要使用src0操作數(shù),當(dāng)OPC1為二元運(yùn)算子,使用src0、src1兩個(gè)操作數(shù)。在一實(shí)施例中,當(dāng)OPC1為單元運(yùn)算子且OPC2為三元運(yùn)算子,摺疊規(guī)則的方程式表示如下(7)OPC1tgt.[r|g|b],src0OPC2tgt.a,src1,src2,src3OPC1_OPC2 tgt.[r|g|b]a,src0,src1,src2,src3,此處tgt.[r|g|b]∩(src1∪src2∪src3)=φ(8)OPC2tgt.a,src1,src2,src3OPC1tgt.[r|g|b],src0OPC1_OPC2 tgt.[r|g|b]a,src0,src1,src2,src3,此處tgt.a∩src0=φ應(yīng)注意的是,當(dāng)OPC2為單元運(yùn)算子,只需要使用src1操作數(shù),而當(dāng)OPC2為二元運(yùn)算子,使用src1、src2兩個(gè)操作數(shù)。在一實(shí)施例中,當(dāng)OPC1為二元運(yùn)算子且OPC2也為二元運(yùn)算子,摺疊規(guī)則的方程式表示如下(9)OPC1tgt.[r|g|b],src0,src1OPC2tgt.a,src2,src3OPC1_OPC2 tgt.[r|g|b]a,src0,src1,src2,src3,此處tgt.[r|g|b]∩(src2∪src3)=φ(10)OPC2tgt.a,src2,src3OPC1tgt.[r|g|b],src0,src1OPC1_OPC2 tgt.[r|g|b]a,src0,src1,src2,src3,此處tgt.a∩(src0∪src1)=φ應(yīng)注意的是,當(dāng)OPC1為單元運(yùn)算子,只需要使用src0操作數(shù),而當(dāng)OPC2為二元運(yùn)算子,使用src1、src2兩個(gè)操作數(shù)。因此根據(jù)上述,當(dāng)OPC1為指令“mad”且OPC2為指令“mov”或是“rsq”,則復(fù)合指令OPC1_OPC2可為“mad_mov”或是“mad_rsq”。
本發(fā)明的實(shí)施例中,相鄰的第一指令之間的數(shù)據(jù)獨(dú)立性是指后一個(gè)第一指令的來(lái)源緩存器與前一個(gè)指令的第一緩存器的目標(biāo)緩存器兩者不相同。換言之,后一個(gè)第一指令的來(lái)源緩存器與前一個(gè)第一指令的目標(biāo)緩存器為空集合(null set),例如(1)式所述的tgt.[r|g|b]∩src2=φ,亦即相鄰指令的數(shù)據(jù)是輸出至一目標(biāo)緩存器的不同字段。在一實(shí)施例中,第一指令以及第二指令的來(lái)源操作數(shù)的總數(shù)量為一預(yù)定臨界值,例如3個(gè)、4個(gè)或是更多數(shù)量的操作數(shù),而且使得譯碼器可以針對(duì)不同的復(fù)合指令進(jìn)行譯碼。當(dāng)?shù)谝恢噶钪袃蓚€(gè)相鄰指令之間具有數(shù)據(jù)獨(dú)立性,將其中一個(gè)第一指令寫(xiě)入至該第二程序中,然后根據(jù)摺疊規(guī)則繼續(xù)將另一個(gè)第一指令與下一個(gè)第一指令作檢查,以檢測(cè)其余第一指令之間的數(shù)據(jù)獨(dú)立性。
繼續(xù)參考圖5,像素著色器502包括指令存儲(chǔ)器(InstructionMemory)508、擷取裝置(Fetcher)510、譯碼器(Decoder)512、算術(shù)邏輯單元(Arithmetic Logic Unit,ALU)514、緩存器端口(Register Port)516以及緩存器單元(Register Unit)518。指令存儲(chǔ)器508用于儲(chǔ)存第二程序506的第二指令,擷取裝置510連接于譯碼器512,并且根據(jù)一程序指位器(ProgramCounter)來(lái)擷取儲(chǔ)存于指令存儲(chǔ)器508中的第二指令。譯碼器512對(duì)第二指令進(jìn)行譯碼,并且產(chǎn)生控制信號(hào)來(lái)控制算術(shù)邏輯單元514的運(yùn)算。算術(shù)邏輯單元514連接于譯碼器512,并根據(jù)控制信號(hào)對(duì)第二指令的緩存器中的字段進(jìn)行運(yùn)算。緩存器端口516連接于算術(shù)邏輯單元514,用以選定緩存器中的字段,以轉(zhuǎn)換第二指令的操作數(shù)的數(shù)據(jù)格式。緩存器單元518連接于緩存器端口516,用以儲(chǔ)存第二指令在運(yùn)算過(guò)程中每個(gè)字段產(chǎn)生的數(shù)據(jù)。
熟習(xí)此項(xiàng)技術(shù)的業(yè)內(nèi)一般人士應(yīng)了解的是,本發(fā)明的指令摺疊機(jī)制500例如可為硬件電路或是軟件程序。當(dāng)以軟件程序執(zhí)行時(shí),指令摺疊機(jī)制500可為計(jì)算機(jī)操作系統(tǒng)中執(zhí)行的軟件開(kāi)發(fā)工具、程序加載器(Program Loader)、或是一部分依附在編譯器(Compiler)后段的裝置驅(qū)動(dòng)程序。此外,當(dāng)以硬件電路執(zhí)行時(shí),指令摺疊機(jī)制500連接于指令擷取單元或是譯碼單元,亦即將指令摺疊機(jī)制500設(shè)置于像素著色器502的指令存儲(chǔ)器508以及譯碼器512之前,或者是將指令摺疊機(jī)制500嵌入于像素著色器502的內(nèi)部。
圖8為依據(jù)本發(fā)明一實(shí)施例像素處理系統(tǒng)的處理流程圖。在步驟S800中,利用一摺疊機(jī)制摺疊第一程序中若干個(gè)第一指令,以形成具有第二指令的第二程序,而且第二指令為兩個(gè)或是兩個(gè)以上的第一指令所組成的復(fù)合指令。在步驟S802中,根據(jù)一程序指位器擷取第二指令。然后在步驟S804中,利用一譯碼器對(duì)第二指令進(jìn)行譯碼,并且形成一控制信號(hào)。接著在步驟S806中,算術(shù)邏輯單元根據(jù)控制信號(hào)對(duì)第二指令的若干個(gè)緩存器字段進(jìn)行邏輯運(yùn)算。最后在步驟S808中,控制緩存器端口來(lái)選定緩存器字段,以進(jìn)行第二指令的操作數(shù)數(shù)據(jù)格式的轉(zhuǎn)換處理。
圖9為圖8所示像素處理系統(tǒng)處理流程中的摺疊機(jī)制的處理流程圖。在步驟S800中,進(jìn)一步根據(jù)第一指令的靜態(tài)位置掃描第一指令,以對(duì)第一程序中的第一指令進(jìn)行排序,或者是將具有數(shù)據(jù)獨(dú)立性的第一指令重新排列,如步驟S900所示。接著在步驟S902中,摺疊規(guī)則檢查器根據(jù)一摺疊規(guī)則檢查第一指令,其中該摺疊規(guī)則主要是用來(lái)判斷第一指令之間的數(shù)據(jù)獨(dú)立性。
然后在步驟S904a中,當(dāng)摺疊規(guī)則檢查器檢查兩個(gè)相鄰第一指令之間的數(shù)據(jù)獨(dú)立性且該相鄰第一指令之間具有數(shù)據(jù)獨(dú)立性,則將此相鄰的第一指令結(jié)合成為一第二指令并且寫(xiě)入至第二程序中。另一方面在步驟S904b中,當(dāng)該相鄰第一指令之間為數(shù)據(jù)相依性(Data Dependent),將其中一個(gè)指令寫(xiě)入至第二程序中,并且依據(jù)摺疊規(guī)則使另一個(gè)第一指令與下一個(gè)第一指令繼續(xù)檢查比對(duì)。接著在步驟S906中,判斷是否完成所有第一指令的檢查步驟,若是(YES),則形成由第二指令組成的第二程序,如步驟S908所示。若尚有第一指令未(NO)以摺疊規(guī)則檢查,則繼續(xù)執(zhí)行步驟S902。
根據(jù)本發(fā)明一較佳實(shí)施例中,在步驟S900之前還包括,利用指令排序器建立相依性關(guān)聯(lián)圖(Dependence Graph,DG),以決定后一個(gè)指令是否有使用到前一個(gè)指令的運(yùn)算結(jié)果,以顯示第一指令之間的相依關(guān)聯(lián)性,如步驟S910所示,其中每個(gè)指令可以視為一個(gè)節(jié)點(diǎn)(Node),以形成該相依性關(guān)聯(lián)圖(DG)。特定而言,在相依性關(guān)聯(lián)圖(DG)中,當(dāng)節(jié)點(diǎn)以邊緣記號(hào)連接在一起時(shí),表示該第一指令具有數(shù)據(jù)相依性的特性。
本發(fā)明的實(shí)施例中,相鄰的第一指令之間的數(shù)據(jù)獨(dú)立性是指后一個(gè)第一指令的來(lái)源緩存器與前一個(gè)第一指令的目標(biāo)緩存器兩者不相同。換言之,后一個(gè)第一指令的來(lái)源緩存器與前一個(gè)第一緩存器的目標(biāo)緩存器為空集合(null set),亦即相鄰指令的數(shù)據(jù)系輸出至一目標(biāo)緩存器的不同字段。在一實(shí)施例中,第一指令以及第二指令的來(lái)源操作數(shù)的總數(shù)量為一預(yù)定臨界值,而且使得譯碼器可以針對(duì)不同的復(fù)合指令進(jìn)行譯碼。
本發(fā)明的優(yōu)點(diǎn)主要包括(a)依據(jù)數(shù)據(jù)的獨(dú)立性摺疊指令,以形成簡(jiǎn)化的復(fù)合指令,進(jìn)而產(chǎn)生新的程序;(b)摺疊程序中具有相同目標(biāo)緩存器的指令,并且將數(shù)據(jù)輸出至該目標(biāo)緩存器的不同字段,以節(jié)省像素處理系統(tǒng)的硬件成本;以及(c)提供一種應(yīng)用于像素處理系統(tǒng)的摺疊機(jī)制,以改善像素處理系統(tǒng)的效能。
綜上所述,雖然本發(fā)明僅以一些特定實(shí)施例揭露如上,但本領(lǐng)域的普通技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)而不脫離本發(fā)明的精神和范圍。倘若對(duì)本發(fā)明的修改屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)在內(nèi)。
權(quán)利要求
1.一種像素處理系統(tǒng),其特征在于,該系統(tǒng)至少包括一指令摺疊機(jī)制,用以摺疊來(lái)自一第一程序中的若干個(gè)第一指令,進(jìn)而產(chǎn)生至少一第二指令,其中該第二指令為該些第一指令所組成的復(fù)合指令;以及一連接于該指令摺疊機(jī)制的像素著色裝置,用以擷取所述第二程序,并對(duì)該第二程序中的第二指令進(jìn)行譯碼,以執(zhí)行該第二程序。
2.如權(quán)利要求1所述的像素處理系統(tǒng),其特征在于所述指令摺疊機(jī)制更包含一摺疊規(guī)則檢查器,其利用一摺疊規(guī)則來(lái)檢查該些第一指令之間的數(shù)據(jù)獨(dú)立性。
3.如權(quán)利要求2所述的像素處理系統(tǒng),其特征在于所述指令摺疊機(jī)制更包含一連接于該摺疊規(guī)則檢查器的指令結(jié)合器,其通過(guò)結(jié)合具有數(shù)據(jù)獨(dú)立性的該些第一指令來(lái)形成該第二指令。
4.如權(quán)利要求2所述的像素處理系統(tǒng),其特征在于所述指令摺疊機(jī)制更包含一連接于該摺疊規(guī)則檢查器的指令排序器,其根據(jù)所述第一指令的靜態(tài)位置將該些第一指令作掃描,從而對(duì)該第一程序中的該些第一指令進(jìn)行排序。
5.如權(quán)利要求4所述的像素處理系統(tǒng),其特征在于所述指令排序器連續(xù)地掃描該些第一指令。
6.如權(quán)利要求2所述的像素處理系統(tǒng),其特征在于所述像素著色裝置包括一緩存器單元,其用以儲(chǔ)存第二指令在運(yùn)算過(guò)程中每個(gè)字段產(chǎn)生的數(shù)據(jù),所述第一指令之間的數(shù)據(jù)獨(dú)立性對(duì)于相鄰的兩條第一指令來(lái)說(shuō)是指存在于緩存器單元中用以暫存后一個(gè)第一指令的一來(lái)源緩存器與存在于緩存器單元中用以暫存前一個(gè)第一指令的一第一緩存器的目標(biāo)緩存器兩者不同。
7.如權(quán)利要求6所述的像素處理系統(tǒng),其特征在于所述相鄰的第一指令的數(shù)據(jù)被保存在所述目標(biāo)緩存器的不同字段。
8.如權(quán)利要求6所述的像素處理系統(tǒng),其特征在于所述第一指令與第二指令的來(lái)源操作數(shù)的總數(shù)量小于一預(yù)定臨界值,且該預(yù)定臨界值表示像素著色裝置中一譯碼器可用來(lái)解析指令的總數(shù)量。
9.如權(quán)利要求2所述的像素處理系統(tǒng),其特征在于當(dāng)該些第一指令中兩個(gè)相鄰指令之間具有數(shù)據(jù)獨(dú)立性時(shí),該指令摺疊機(jī)制用以將其中一個(gè)第一指令寫(xiě)入至該第二程序中,且該指令摺疊機(jī)制根據(jù)該摺疊規(guī)則用以檢查另一個(gè)第一指令與下一個(gè)第一指令之間的數(shù)據(jù)獨(dú)立性。
10.如權(quán)利要求1所述的像素處理系統(tǒng),其特征在于所述像素著色器至少包含一譯碼裝置,用以解析來(lái)自該第二指令的控制信號(hào),且該第二指令是由該第一指令所組成的復(fù)合指令;一連接于該譯碼裝置的算術(shù)邏輯單元,用以根據(jù)該控制信號(hào)來(lái)執(zhí)行該第二指令的若干個(gè)緩存器字段的處理;以及一連接于該算術(shù)邏輯單元的緩存器端口,用以選定緩存器字段,以轉(zhuǎn)換該第二指令的操作數(shù)的數(shù)據(jù)格式。
11.如權(quán)利要求10所述的像素處理系統(tǒng),其特征在于所述像素著色器進(jìn)一步包括一指令存儲(chǔ)裝置,以儲(chǔ)存該第二程序的該第二指令;以及一連接于該譯碼裝置的擷取裝置,其根據(jù)一程序指位器來(lái)擷取儲(chǔ)存于該指令存儲(chǔ)器裝置的第二指令。
12.如權(quán)利要求10所述的像素處理系統(tǒng),其特征在于所述像素著色器更包含一連接于該緩存器端口的緩存器單元,用以儲(chǔ)存該第二指令的該緩存器字段的數(shù)據(jù)。
13.一種像素處理系統(tǒng)的執(zhí)行方法,其特征在于該方法至少包括下列步驟以一摺疊機(jī)制摺疊第一程序中若干個(gè)第一指令,以形成具有第二指令的第二程序,且該第二指令是由該第一指令所組成的復(fù)合指令;根據(jù)一程序指位器擷取該第二指令;以一譯碼器對(duì)該第二指令進(jìn)行譯碼,以形成一控制信號(hào);以一算術(shù)邏輯單元根據(jù)該控制信號(hào)對(duì)該第二指令的若干個(gè)緩存器字段進(jìn)行邏輯運(yùn)算;以及通過(guò)一緩存器端口選定該緩存器字段,以對(duì)該第二指令的操作數(shù)數(shù)據(jù)格式進(jìn)行轉(zhuǎn)換。
14.如權(quán)利要求13所述的像素處理系統(tǒng)的執(zhí)行方法,其特征在于所述摺疊該第一程序的該些第一指令的步驟中,更包含根據(jù)一摺疊規(guī)則檢查該些第一指令的數(shù)據(jù)獨(dú)立性。
15.如權(quán)利要求14所述的像素處理系統(tǒng)的執(zhí)行方法,其特征在于所述根據(jù)該摺疊規(guī)則檢查該些第一指令的數(shù)據(jù)獨(dú)立性的步驟之前,更包含根據(jù)該第一指令的靜態(tài)位置掃描該些第一指令,以對(duì)該第一程序中的該些第一指令進(jìn)行排序。
16.如權(quán)利要求15所述的像素處理系統(tǒng)的執(zhí)行方法,其特征在于所述掃描該些第一指令的步驟中是以連續(xù)的方式掃描該第一指令。
17.如權(quán)利要求15所述的像素處理系統(tǒng)的執(zhí)行方法,其特征在于所述掃描該些第一指令的步驟中,更包含重新排列該些具有數(shù)據(jù)獨(dú)立性的第一指令。
18.如權(quán)利要求14所述的像素處理系統(tǒng)的執(zhí)行方法,其特征在于所述根據(jù)該摺疊規(guī)則檢查該些第一指令的數(shù)據(jù)獨(dú)立性的步驟中,當(dāng)相鄰第一指令之間具有數(shù)據(jù)獨(dú)立性,則將該相鄰的第一指令結(jié)合成為一第二指令并且寫(xiě)入至該第二程序中。
19.如權(quán)利要求18所述的像素處理系統(tǒng)的執(zhí)行方法,其特征在于所述相鄰第一指令之間具有數(shù)據(jù)獨(dú)立性是指后一個(gè)第一指令的至少一個(gè)來(lái)源緩存器端口不同于前一個(gè)第一指令的目標(biāo)緩存器。
20.如權(quán)利要求19所述的像素處理系統(tǒng)的執(zhí)行方法,其特征在于所述相鄰第一指令的數(shù)據(jù)被輸出至該目標(biāo)緩存器的不相同字段。
21.如權(quán)利要求19所述的像素處理系統(tǒng)的執(zhí)行方法,其特征在于所述第一指令與該第二指令使用的若干操作數(shù)的數(shù)量小于一預(yù)定臨界值,且該預(yù)定臨界值為一譯碼器可用來(lái)解析指令的總數(shù)量。
22.如權(quán)利要求14所述的像素處理系統(tǒng)的執(zhí)行方法,其特征在于所述根據(jù)一摺疊規(guī)則檢查該些第一指令的數(shù)據(jù)獨(dú)立性的步驟中,當(dāng)該相鄰第一指令之間具有數(shù)據(jù)獨(dú)立性時(shí),將其中一個(gè)該相鄰的第一指令寫(xiě)入至該第二程序中,并且根據(jù)該摺疊規(guī)則將另一個(gè)該相鄰的第一指令與下一個(gè)第一指令進(jìn)行檢查。
23.如權(quán)利要求14所述的像素處理系統(tǒng)的執(zhí)行方法,進(jìn)一步包括建立相依性關(guān)聯(lián)圖的步驟,該關(guān)聯(lián)圖用以表示該些第一指令之間的數(shù)據(jù)相依性的關(guān)聯(lián)性。
全文摘要
本發(fā)明提供一種指令摺疊機(jī)制及其方法以及使用該摺疊機(jī)制及該方法之像素處理系統(tǒng)。像素處理系統(tǒng)包括指令摺疊機(jī)制及像素著色器,指令摺疊機(jī)制摺疊第一程序中若干個(gè)第一指令,以產(chǎn)生具有第二指令的第二程序。像素著色擷取第二指令并且作譯碼。指令摺疊機(jī)制包括指令排序器、指令規(guī)則檢查器及指令結(jié)合器。指令排序器根據(jù)指令的靜態(tài)位置來(lái)掃描,以對(duì)第一指令進(jìn)行排序。摺疊規(guī)則檢查器利用摺疊規(guī)則來(lái)檢查第一指令之間的數(shù)據(jù)獨(dú)立性。指令結(jié)合器用以結(jié)合具有數(shù)據(jù)獨(dú)立性的第一指令,并且利用具有數(shù)據(jù)獨(dú)立性的第一指令形成第二程序中的第二指令。本發(fā)明摺疊機(jī)制及方法可以形成簡(jiǎn)化的復(fù)合指令,并節(jié)省像素處理系統(tǒng)的成本,更可以改善像素處理系統(tǒng)的效能。
文檔編號(hào)G06T1/20GK101059865SQ200610074828
公開(kāi)日2007年10月24日 申請(qǐng)日期2006年4月18日 優(yōu)先權(quán)日2006年4月18日
發(fā)明者徐日明 申請(qǐng)人:矽統(tǒng)科技股份有限公司