【背景技术】
图1为现有的图形处理器的管线(Pipeline)架构方框图。图形处理器100主要包含三角设定单元102、像素处理单元104以及深度处理单元106,像素处理单元104包括像素着色器108以及连接于像素着色器108的材质单元(Texture Unit)110与色彩内插器(Color Interpolator)112。
将三维对象的表面分割成若干个三角形,该些三角形以几何关联性排列且具有任意的尺寸。每个三角形包含三个顶点,并且将这些顶点数据传送至三角设定单元102,三角设定单元102将像素的参数输出至像素处理单元104,其中参数像素在三角形的位置以及对应于三角形顶点的材质坐标。依据像素的位置以及顶点的材质坐标,利用材质单元110内插所有像素的材质坐标,然后将内插形成的材质坐标输入至像素着色器108,并且在像素着色器108中进行处理。接着像素着色器108执行加载指令,并且回传已处理完成的材质坐标给材质单元110。根据未处理的材质坐标以及已处理的材质坐标,材质单元110对像素在材质图中的材质颜色进行取样,并且将材质颜色输出至像素着色器108。同时依据像素的位置以及顶点的材质坐标,色彩内插器112对所有像素的顶点颜色作内插运算,并且将这些顶点颜色输出至像素着色器108。像素着色器108处理材质颜色以及像素的顶点颜色,并且将色彩值以及深度值输出至深度处理单元106,以形成所显示的像素颜色。然后画出最后的颜色,以形成整个画面(Frame)。
图2为习知的图形处理器以像素着色器执行一范例程序的方框图。像素着色器108使用五种缓存器,主要包含:用来储存暂时性数据的一般缓存器(rn)、材质坐标缓存器(tn)、材质编号缓存器(sn)、顶点混色缓存器(vn)以及输出缓存器(ocn),并且将最后转换完成的像素颜色传送至深度处理单元106。
像素着色器108的处理流程主要包括四个阶段:坐标计算阶段、材质加载阶段、混色阶段以及发出阶段。首先将来自材质单元110的像素内插材质坐标储存于材质坐标缓存器(tn)。在坐标计算阶段,将来自材质单元110的像素的内插材质坐标利用材质坐标缓存器(tn)以及一般缓存器(rn)进行算术运算,然后将运算的结果(亦即处理之后的材质坐标)储存于一般缓存器(rn)内。在材质处理阶段,根据材质坐标缓存器(tn)以及一般缓存器(rn)内的材质坐标,利用像素着色器108来执行材质加载指令,使材质单元110从材质编号缓存器(sn)指定的材质图中取样出材质颜色,再将取样完成的材质颜色传回一般缓存器(rn)。在混色阶段,利用像素着色器108将储存在缓存器(rn)的材质颜色以及来自色彩内插器112的顶点颜色作混色运算,并且将混色运算的结果储存于顶点混色缓存器(vn)中。最后在发出阶段,像素着色器108将色彩值以及深度值输出至深度处理单元106。应注意的是,坐标计算阶段、材质处理阶段以及混色阶段可重复进行。
每个缓存器系由四个具有浮点数据格式的字段(Components)所组成,例如(x,y,z,w)或是(r,g,b,a),此四种字段(x,y,z,w)称为四元向量(Four-wide Vectors)。在坐标计算以及材质处理阶段,此四种字段用来表示三维空间的坐标或者是表示不同的材质格式的坐标。在混色阶段以及发出阶段,四种字段(r,g,b,a)分别代表红(Red)、绿(Green)、蓝(Blue)三原色以及透明度(Transparency)。这些字段配置给指令来源缓存器以及目标缓存器,而且可读取各个字段内的值或是将值写入至字段中,举例来说,“r0.w”表示指令读取”r0”缓存器的”w”字段的数据,或是表示将数据写入至“w”字段内。
现有技术中,由于四种字段(r,g,b,a)的红(Red)、绿(Green)、蓝(Blue)三个字段与透明度字段的性质不同,故其处理步骤不相同,因此需要至少两种以上的独立管线架构来处理不同的字段。同样地,当以坐标字段表示时,坐标(x,y,z)字段也与透视度“w”字段不相同。例如在DirectX的规格中,串联两个独立的管线来处理一指令对(Pair)并且将该指令对同时发出,其利用此指令对(Pair)中后面的指令之前加注正号“+”而与前面的指令串联在一起来形成该指令对,此指令对称为指令配对(Instruction Pairing)或是指令同时发出(Instruction Co-issue)处理单元,其字段的比值为3比1,如图3A所示。然而必须大幅增加解析运算子的译码器、管线、缓存器写入端口以及缓存器读取端口的数量,至少需要两倍以上的数量才能处理这些指令配对。进一步地,现有技术的像素着色器108需要更多、更复杂的处理功能,例如字段的选择、数据格式的转换、指令修正,以便使指令能处理来源缓存器以及目标缓存器中的操作数(Operand),以致于像素处理系统在执行上述复杂的功能时需要大幅增加硬件成本。
参考图3B,其为现有的像素着色程序中指令的字段比例图式,其中一比例图式为三个色彩字段与一个透明度字段,另一比例图式为二个色彩字段与二个透明度字段。在两个互为独立的指令中,一个指令用来写入两个色彩字段“r”以及“g”,另一个指令用来写入一个色彩“b”字段以及透明度“a”字段。由于必须使用更为复杂的硬件架构来处理这些指令,因而提高像素着色器的硬件成本,例如nVidia公司的GeForce6系列的图形处理器就是使用此种复杂的指令同时发出处理单元。
图4为现有的像素着色器中使用指令同时发出处理单元的方框图。撷取装置400根据程序指位器(Program Counter)由指令队列402中读取两个指令,然后一对译码器(404a,404b)对撷取的指令进行译码,并且控制算术逻辑单元(406a,406b)的运算。由于算术逻辑单元(406a,406b)以平行处理方式执行四个向量字段,并且至少需要使用一对缓存器端口(408a,408b),而每个缓存器端口(408a,408b)包括三个缓存器读取端口以及一个缓存器写入端口。此外每个缓存器端口必需使用一个来源修正器(Source Modifier)以及一个指令修正器(Instruction Modifier),以便处理指令中来源操作数以及目标操作数的字段选择以及数据格式的转换。
因此,当色彩字段与透明度字段之间的比例不同时,指令同时发出处理单元必须使用额外的侦测处理单元来决定同时发出处理单元的时序,导致像素着色程序的指令执行更加地复杂.而且,有关于两个指令之间的来源缓存器以及目标缓存器的指令配对规则之处理时序并不相同,所以缓存器读取端口以及缓存器写入端口的使用数量至少是处理单一指令所需要的数量两倍以上.此外,来源修正器以及指令修正器的数量亦需要两倍以上的数量.
因此需要发展一种具有摺叠处理单元的像素处理系统,以降低硬件的成本以及提高图形处理器的效能。
【具体实施方式】
本发明提供一种指令摺叠处理单元及其方法,以及使用该摺叠处理单元与该方法之像素处理系统,通过摺叠具有数据独立性(Data Independent)的指令来产生简化的指令,进而形成一新的程序。此外,指令摺叠处理单元还可用来摺叠具有相同目标缓存器的指令,并且将该指令的数据输出至目标缓存器的不同字段,以节省像素处理系统的硬件成本。熟习此项技术的业内一般人士都应知道,本发明的摺叠处理单元更可适用于图形处理系统中的顶点着色装置(Vertex Shader)以及几何着色装置(Geometric Shader)。
图5为根据本发明的一实施例具有指令摺叠处理单元的像素处理系统的方框图。该像素处理系统主要包括指令摺叠处理单元500以及像素着色装置502,指令摺叠处理单元500用以摺叠第一程序504中若干个第一指令,以产生具有第二指令的第二程序506,其中第二指令是由第一指令所组成的族群,亦即第二指令是由第一指令组成的复合指令。像素着色装置502连接于指令摺叠处理单元500,用以撷取第二程序506,并且对第二程序506中的第二指令进行译码,以执行该第二程序506。
图6为根据本发明的一实施例利用图5的摺叠处理单元500执行一范例程序的方框图.在第一程序504中,指令“mul”的数据与指令“mov”的数据两者互相独立而不互相使用,而且指令“mul”与“mov”的输出数据被储存于相同的缓存器中,即缓存器”r1”,且储存于同一缓存器的不同字段.在本发明的一实施例中,资料的来源操作数的总数量为三个,主要包括“r0”、“t0”以及“r0.a”,并且利用指令摺叠处理单元500来摺叠来源操作数,以形成另一复合指令”mul_mov”,亦即该复合指令是由第一指令所组成,进而形成第二程序506,而且译码器可解析出摺叠第一指令之后产生的复合指令.由于本发明的像素着色装置502的指令可涵盖来源操作数的总数,而译码出任何的复合指令,故并不需要在指令中新增操作数,因此可以节省像素着色装置的成本.相对地,在现有的指令同时发出处理单元中,必须使用额外的译码器来解析运算子(Operator),以及使用更多的管线架构、缓存器写入端口以及缓存器读取端口.而且现有的指令必须具备更多的处理能力,例如缓存器的字段选择、数据格式的转换、程序来源码的修正以及来源操作数与目的操作数的指令修正,所以如何有效降低操作数的数量实为重要的课题.
图7为图5所示的摺叠处理单元的详细方框图。指令摺叠处理单元500主要包括指令排序器(Instruction Scheduler)700、摺叠规则检查器(Folding Rule Checker)702以及指令结合器(Instruction Combiner)704。指令排序器700连接于摺叠规则检查器702,其主要根据第一指令在第一程序中的静态位置来扫描第一指令,以对第一程序504中的第一指令进行排序。较佳实施例中,指令排序器700以连续方式扫描第一指令。摺叠规则检查器702利用一摺叠规则来检查第一指令之间的数据的独立性。指令结合器704连接于摺叠规则检查器702,用以结合具有数据独立性的第一指令,并且利用具有数据独立性的第一指令形成第二程序506中的第二指令。此处所称的“数据独立性”表示两个指令之间所处理的数据不具有依赖性,亦即后一个指令的数据不会使用到前一个指令的运算结果。特定而言,在本发明的较佳实施例中,摺叠规则以下列方程式表示:
(1)
OPC1 tgt.[r|g|b],src0,src1
OPC2 tgt.a,src2
OPC1_OPC2 tgt.[r|g|b]a,src0,src1,src2,此处
tgt.[r|g|b]∩src2=φ
OPC1以及OPC2为任意的运算子,且OPC1_OPC2为一复合运算子,用以表示OPC1存取色彩字段(r,g,b)以及OPC2存取透明度字段(a),OPC1的目标操作数为“tgt.[r|g|b]”且OPC1的目标操作数为“tgt.a”,所以OPC1以及OPC2两个运算子的目标操作数相同,均为缓存器“tgt”,然而其缓存器的字段不相同,例如透明度字段(a)设于OPC2但是不设在OPC1中。此外色彩字段(r,g,b)中例如可为至少一种或是一种以上的色彩向量字段。
src0,src1,src2为来源操作数(Source Operand)并且设有任意字段数量的缓存器,其中OPC1例如可为含有两个操作数的二元(Binary)运算子,亦即包括src0、src1,或者可为只有一个src0操作数的单元(Unitary)运算子。tgt.[r|g|b]∩src2=φ表示OPC1与OPC2之间的数据独立性,亦即OPC1的运算结果与OPC2的来源操作数无关联性。在一实施例中,OPC1并不需要与OPC2相邻,而只要OPC1的数据与OPC2的数据互相独立而不相关联即可将OPC1与OPC2结合成一复合指令。当考虑OPC1与OPC2之间的顺序时,上述方程式表示为:
(2)
OPC2 tgt.a,src2
OPC1 tgt.[r|g|b],src0,src1
OPC1_OPC2 tgt.[r|g|b]a,src0,src1,src2,此处
tgt.a∩(src0∪src1)=φ
当指令OPC1为单元操作数以及OPC2为二元操作数,摺叠规则的方程式也可表示为:
(3)
OPC1 tgt.[r|g|b],src0
OPC2 tgt.a,src1,src2
OPC1_OPC2 tgt.[r|g|b]a,src0,src1,src2,此处
tgt.[r|g|b]∩(src1∪src2)=φ
(4)
OPC2 tgt.a,src1,src2
OPC1 tgt.[r|g|b],src0
OPC1_OPC2 tgt.[r|g|b]a,src0,src1,src2,此处
tgt.a∩src0=φ
应注意的是,当OPC2为单元运算子,只需要使用src1操作数。
在本发明的较佳实施例中,于图形处理特效的应用领域,当字段“a”用来表示透明度或是对象的四元向量坐标之一,可单独存取字段“a”并且利用指令“mov”将其结果移出。于打光特效的应用领域中,当字段“a”为离光源的距离或是角度,可利用指令“rsq”存取字段“a”,以计算出(1/√x)的结果。当字段(r,g,b)表示为色彩或是坐标,存取这些字段的指令例如可为指令“mov”、“mul”、“add”、“mad”以及“dp3”。在一实施例中,当OPC1为指令“mov”、“mul”、“add”、“mad”或是“dp3”,且OPC2为“mov”或是“rsq”,则复合指令OPC1_OPC2可为指令“mov_mov”、“mul_mov”、“add_mov”、“dp3_mov”、“mov_rsq”、“mul_rsq”、“add_rsq”或是“dp3_rsq”。本发明中所使用的译码器,例如可以是硬件或是软件译码器,用以对上述复合指令进行译码,或是针对其它OPC1与OPC2组合而成的复合指令作译码,以有效提高像素着色系统的处理能力。
在本发明的另一较佳实施例中,依据摺叠规则产生的复合指令的操作数为四个,主要包括src0、src1、src2、src3,并且可配合使用指令“mad”。本发明使用缓存器读取端口以及来源修正器,其成本效益优于习知指令同时发出处理单元所使用的缓存器读取端口以及来源修正器。上述之摺叠规则的方程式表示为:
(5)
OPC1 tgt.[r|g|b],src0,src1,src2
OPC2 tgt.a,src3
OPC1_OPC2 tgt.[r|g|b]a,src0,src1,src2,src3,此处
tgt.[r|g|b]∩src3=φ
当考虑OPC1与OPC2之间的顺序时,上述之方程式可表示为:
(6)
OPC2 tgt.a,src3
OPC1 tgt.[r|g|b],src0,src1,src2
OPC1_OPC2 tgt.[r|g|b]a,src0,src1,src2,src3,此处
tgt.a∩(src0∪src1∪src2)=φ
应注意的是,当OPC1为单元运算子,只需要使用src0操作数,当OPC1为二元运算子,使用src0、src1两个操作数。在一实施例中,当OPC1为单元运算子且OPC2为三元运算子,摺叠规则的方程式表示如下:
(7)
OPC1 tgt.[r|g|b],src0
OPC2 tgt.a,src1,src2,src3
OPC1_OPC2 tgt.[r|g|b]a,src0,src1,src2,src3,此处
tgt.[r|g|b]∩(src1∪src2∪src3)=φ
(8)
OPC2 tgt.a,src1,src2,src3
OPC1 tgt.[r|g|b],src0
OPC1_OPC2 tgt.[r|g|b]a,src0,src1,src2,src3,此处
tgt.a∩src0=φ
应注意的是,当OPC2为单元运算子,只需要使用src1操作数,而当OPC2为二元运算子,使用src1、src2两个操作数。在一实施例中,当OPC1为二元运算子且OPC2也为二元运算子,摺叠规则的方程式表示如下:
(9)
OPC1 tgt.[r|g|b],src0,src1
OPC2 tgt.a,src2,src3
OPC1_OPC2 tgt.[r|g|b]a,src0,src1,src2,src3,此处
tgt.[r|g|b]∩(src2∪src3)=φ
(10)
OPC2 tgt.a,src2,src3
OPC1 tgt.[r|g|b],src0,src1
OPC1_OPC2 tgt.[r|g|b]a,src0,src1,src2,src3,此处
tgt.a∩(src0∪src1)=φ
应注意的是,当OPC1为单元运算子,只需要使用src0操作数,而当OPC2为二元运算子,使用src1、src2两个操作数。因此根据上述,当OPC1为指令“mad”且OPC2为指令“mov”或是“rsq”,则复合指令OPC1_OPC2可为“mad_mov”或是“mad_rsq”。
本发明的实施例中,相邻的第一指令之间的数据独立性是指后一个第一指令的来源缓存器与前一个指令的第一缓存器的目标缓存器两者不相同。换言之,后一个第一指令的来源缓存器与前一个第一指令的目标缓存器为空集合(null set),例如(1)式所述的tgt.[r|g|b]∩src2=φ,亦即相邻指令的执行结果是输出至一目标缓存器的不同字段。在一实施例中,第一指令以及第二指令的来源操作数的总数量为一预定临界值,例如3个、4个或是更多数量的操作数,而且使得译码器可以针对不同的复合指令进行译码。当第一指令中两个相邻指令之间具有数据独立性,将其中一个第一指令写入至该第二程序中,然后根据摺叠规则继续将另一个第一指令与下一个第一指令作检查,以检测其余第一指令之间的数据独立性。
继续参考图5,像素着色装置502包括指令存储器(InstructionMemory)508、撷取装置(Fetcher)510、译码器(Decoder)512、算术逻辑单元(Arithmetic Logic Unit,ALU)514、缓存器端口(Register Port)516以及缓存器单元(Register Unit)518.指令存储器508用于储存第二程序506的第二指令,撷取装置510连接于译码器512,并且根据一程序指位器(ProgramCounter)来撷取储存于指令存储器508中的第二指令.译码器512对第二指令进行译码,并且产生控制信号来控制算术逻辑单元514的运算.算术逻辑单元514连接于译码器512,并根据控制信号对第二指令的缓存器中的字段进行运算.缓存器端口516连接于算术逻辑单元514,用以选定缓存器中的字段,以转换第二指令的操作数的数据格式.缓存器单元518连接于缓存器端口516,用以储存第二指令在运算过程中每个字段产生的数据.
熟习此项技术的业内一般人士应了解的是,本发明的指令摺叠处理单元500例如可为硬件电路或是软件程序。当以软件程序执行时,指令摺叠处理单元500可为计算机操作系统中执行的软件开发工具、程序加载器(ProgramLoader)、或是一部分依附在编译器(Compiler)后段的装置驱动程序。此外,当以硬件电路执行时,指令摺叠处理单元500连接于指令撷取单元或是译码单元,亦即将指令摺叠处理单元500设置于像素着色装置502的指令存储器508以及译码器512之前,或者是将指令摺叠处理单元500嵌入于像素着色装置502的内部。
图8为依据本发明一实施例像素处理系统的处理流程图。在步骤S800中,利用一摺叠处理单元摺叠第一程序中若干个第一指令,以形成具有第二指令的第二程序,而且第二指令为两个或是两个以上的第一指令所组成的复合指令。在步骤S802中,根据一程序指位器撷取第二指令。然后在步骤S804中,利用一译码器对第二指令进行译码,并且形成一控制信号。接着在步骤S806中,算术逻辑单元根据控制信号对第二指令的若干个缓存器字段进行逻辑运算。最后在步骤S808中,控制缓存器端口来选定缓存器字段,以进行第二指令的操作数数据格式的转换处理。
图9为图8所示像素处理系统处理流程中的摺叠处理单元的处理流程图。在步骤S800中,进一步根据第一指令的静态位置扫描第一指令,以对第一程序中的第一指令进行排序,或者是将具有数据独立性的第一指令重新排列,如步骤S900所示。接着在步骤S902中,摺叠规则检查器根据一摺叠规则检查第一指令,其中该摺叠规则主要是用来判断第一指令之间的数据独立性。
然后在步骤S904a中,当摺叠规则检查器检查两个相邻第一指令之间的数据独立性且该相邻第一指令之间具有数据独立性,则将此相邻的第一指令结合成为一第二指令并且写入至第二程序中。另一方面在步骤S904b中,当该相邻第一指令之间为数据相依性(Data Dependent),将其中一个指令写入至第二程序中,并且依据摺叠规则使另一个第一指令与下一个第一指令继续检查比对。接着在步骤S906中,判断是否完成所有第一指令的检查步骤,若是(YES),则形成由第二指令组成的第二程序,如步骤S908所示。若尚有第一指令未(NO)以摺叠规则检查,则继续执行步骤S902。
根据本发明一较佳实施例中,在步骤S900之前还包括,利用指令排序器建立相依性关联图(Dependence Graph,DG),以决定后一个指令是否有使用到前一个指令的运算结果,以显示第一指令之间的相依关联性,如步骤S910所示,其中每个指令可以视为一个节点(Node),以形成该相依性关联图(DG)。特定而言,在相依性关联图(DG)中,当节点以边缘记号连接在一起时,表示该第一指令具有数据相依性的特性。
本发明的实施例中,相邻的第一指令之间的数据独立性是指后一个第一指令的来源缓存器与前一个第一指令的目标缓存器两者不相同.换言之,后一个第一指令的来源缓存器与前一个第一指令的目标缓存器为空集合(nullset),亦即相邻指令的执行结果是输出至一目标缓存器的不同字段.在一实施例中,第一指令以及第二指令的来源操作数的总数量为一预定临界值,而且使得译码器可以针对不同的复合指令进行译码.
本发明的优点主要包括:(a)依据数据的独立性摺叠指令,以形成简化的复合指令,进而产生新的程序;(b)摺叠程序中具有相同目标缓存器的指令,并且将数据输出至该目标缓存器的不同字段,以节省像素处理系统的硬件成本;以及(c)提供一种应用于像素处理系统的摺叠处理单元,以改善像素处理系统的效能。
综上所述,虽然本发明仅以一些特定实施例揭露如上,但本领域的普通技术人员可以对本发明进行各种改动而不脱离本发明的精神和范围。倘若对本发明的修改属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动在内。