在cpu上执行像素着色器的程序转换方法及装置制造方法

文档序号:6544636阅读:243来源:国知局
在cpu上执行像素着色器的程序转换方法及装置制造方法
【专利摘要】本发明涉及一种在CPU上执行像素着色器的程序转换方法,在每条指令转换时执行如下步骤:判断着色器变换是可行的和有益的,如是,取得所述像素着色器的输入参数,将指定个数的不同坐标的像素点形成一个块,将所述块作为一个单元,形成一个依次对所述单元中每个点的数据进行图形处理的线程;输出所述线程并在CPU硬件内核上执行。本发明还涉及一种实现上述方法的装置。实施本发明的在CPU上执行像素着色器的程序转换方法及装置,具有以下有益效果:其系统开销较小、效率较高。
【专利说明】在CPU上执行像素着色器的程序转换方法及装置
【技术领域】
[0001]本发明涉及处理器领域,更具体地说,涉及一种在在CPU上执行像素着色器的程序转换方法及装置。
【背景技术】
[0002]多核多线程CPU已经成为主流,当GPU演化成为可编程处理器之后,CPU和GPU融合技术成为热点。为了追求更好画质,更丰富的用户交互,手持设备的显示端已经接近甚至超过百万像素级别(720p的画质要求90万个像素)。像素着色器是以一个像素为处理对象的程序。因为海量的像素需要处理,像素着色器成为GPU性能的关键。因为这种程序是DirectX和OpenGL标准为GPU的硬件着色器单元量身定制的专用语言,所以并不适合通用的多线程CPU上执行。一方面而言,CPU和GPU在体系结构上差异显著,例如,GPU比CPU有更多的硬件线程;GPU的处理单元结构简单,并且利用大量的线程隐藏延迟;CPU适合标量运算和复杂的控制流因为主要用于执行三维计算机图形学的着色器程序,因此GPU长于简单控制流和向量运算。从另一方面来讲,像素着色器一般实现数学或者物理公式,指令相对较少。因为相对于CPU的线程开销,一个像素的计算粒度太小;其次,GPU使用比CPU多的线程来隐藏纹理请求的延迟。而多核多线程CPU上的同时线程个数有限。此外,虽然着色器程序设计语言是为3D图形学而设计的,但是因为它可以灵活简洁地表达数据并行,所以在通用计算领域已经有相似编程语言,包括CUDA/OpenCL等,这些程序用于融合处理器时,同样存在上述问题。综上所述,在现代CPU上使用现有技术执行像素着色器程序时,处理器的效率低下。

【发明内容】

[0003]本发明要解决的技术问题在于,针对现有技术的上述系统开销代价较大、效率较低的缺陷,提供一种系统开销代价较小、效率较高的在CPU上执行像素着色器的程序转换方法及装置。
[0004]本发明解决其技术问题所采用的技术方案是:构造一种在CPU上执行像素着色器的程序转换方法,按照事先设定的规则,将适合传统图形处理器(GPU)上执行的程序转变成适合CPU执行的等效代码;其中,在每条指令转换时执行如下步骤:
A)判断本程序变换是否是可行的和有益的,如否,按照通常的着色器程序编译并输出;如是,执行下一步骤;其中,所述指定的像素着色器程序是使用专用于3D图形处理的编程语言写成的、对一个像素点进行图形处理的程序;所述程序在传统的编译情况下将转换一个独立线程在图形处理器上执行;多个像素点通过多个独立线程并发处理;
B)取得所述着色器程序中包含或隐含的、表示该程序处理的所有点的输入参数或/和使用指定的差值算法,通过对顶点的参数插值得到像素的输入参数;
C)将指定个数的不同坐标的像素点形成一个块,将所述块作为一个单元,形成一个依次对所述单元中每个点的数据进行图形处理的线程; D)输出所述线程并在CPU硬件内核上执行。
[0005]更进一步地,所述步骤C)进一步包括如下步骤:
Cl)按照设定的规定选择多个点或多个点的数据;
C2)按照设定规则排列上述被选择点或点数据,使其形成一个队列或表;
C3)形成一个新的块着色器线程或纹理请求线程,该线程依次对上述队列或表中的点进行图形处理。
[0006]更进一步地,在所述步骤C)中,如需要处理的点多于一次选择规定的点,则按照设定规定进行多次选择,形成多个队列或表,得到多个线程。
[0007]更进一步地,在所述步骤C)中,当形成多个线程时,其最后形成的线程处理的点数可以小于规定的点数。
[0008]更进一步地,在所述步骤Cl)中,按照点的位置的相邻程度选择一个线程所处理的点。
[0009]本发明还涉及一种实现上述方法的装置,按照事先设定的规则,将适合GPU上执行的程序转变成适合CPU执行的等效代码;其中,所述装置包括:
判断单元:用于判断当前的着色器是否能够应用本变换,变换后是否有益处。如否,按照通常的指令编译并输出;如是,调用像素点输入参数插值单元;所述指定的像素着色器程序是使用专用于3D图形处理的编程语言写成的、对一个像素点进行图形处理的程序;所述程序在传统的编译情况下将转换一个独立线程在图形处理器上执行;多个像素点通过多个独立线程并发处理。
[0010]像素点输入参数插值单元:用于取得所述着色器程序中包含或隐含的、表示该程序处理的所有点的输入参数或/和使用指定的差值算法,通过对顶点的参数插值得到像素的输入参数;
线程形成单元:用于将将指定个数的不同坐标的点形成一个块,将所述块作为一个单元,形成一个依次对所述单元中每个点的数据进行图形处理的线程;
线程输出单元:用于输出所述线程并在CPU硬件上执行。
[0011]更进一步地,所述判断单元判断着色器程序是像素着色器,并且包含至少一个纹理请求操作。
[0012]更进一步地,所述线程形成单元包括:
点选择模块:用于按照设定的规定选择多个点或多个点的数据;
点排列模块:用于按照设定规则排列上述被选择点或点数据,使其形成一个队列或
表;
线程形成模块:用于形成一个顶点着色器线程或像素着色器线程或纹理请求线程,该线程依次对上述队列或表中的点进行图形处理。
[0013]更进一步地,所述点选择模块依据点的位置的相邻程度选择一个线程所处理的点。
[0014]实施本发明的在CPU上执行像素着色器的程序转换方法及装置,具有以下有益效果:由于在编程时仍然使用现有的、高效的专用编程语言,同时,在执行时将这种编程语言写成的指令通过一个线程处理多个点的方式使得其适于通用CPU内核运行,从而减小每个线程的开销,使得一个程序或指令执行后具有较小的系统开销。从而提高了效率;同时,在涉及图形处理的几个关键步骤中,例如,顶点着色、像素着色或纹理请求,均采用上述的一个线程处理多个点的方法,进一步提高了整个图形处理过程中的效率。因此,其系统开销较小、效率较高。
【专利附图】

【附图说明】
[0015]图1是本发明在CPU上执行像素着色器的程序转换方法及装置实施例的中该方法的执行流程图;
图2是所述实施例中装置的结构示意图。
【具体实施方式】
[0016]下面将结合附图对本发明实施例作进一步说明。
[0017]如图1所示,在本发明在CPU上执行像素着色器的程序转换方法及装置实施例中,该程序转换的方法包括如下步骤:
步骤Sll判断变换的可行性和是否有益:在本实施例中,处理器是能够执行传统意义上(PU程序和GTO程序的融合处理器,其具有多个硬件内核,可以同时执行多个并行的线程。在这种情况下,该处理器上执行的程序具有使用通用的高级编程语言(例如,C语言)编写的程序,也有使用专用于图形处理的高级语言编写(着色器程序设计语言)的图形处理程序。在现有的技术中,上述硬件内核执行使用通用的高级编程语言编写的系统软件或传统意义上CPU执行的软件肯定是不存在问题的,但是,这些硬件内核在执行用专用的图形处理高级编程语言编写的图形处理程序时,由于这些语言是针对传统的GPU结构的,因此在融合处理器的硬件内核上运行是将出现效率低下的问题;例如,线程开销较大,而且存在大量的线程,从而使得处理器效率较低。当然,可能使用通用的编程语言可以避免这个问题。但是,通用的编程语言又会出现编程效率低下、编程难度较大的问题。为此,在本实施例中,提出了一个在现有的硬件内核和编程习惯的基础上,解决图形处理程序在融合处理器上运行效率低下的方法。在本步骤中,对在融合处理器上将要运行的着色器程序进行判断,判断其是否为像素着色器并且包含至少一个纹理请求操作,如是,执行步骤S13 ;否则,执行步骤S12。值得一提的是,由于在融合处理器上运行的软件时多样化的,所以并不是所有的程序均需要执行本实施例中的步骤S13-S15 ;如果程序已经适合在传统CPU上执行,则不需要任何变换,仅仅需要将其转换为机器码或可执行文件格式即可;如程序是满足S11,则需要执行步骤S13-S15,以提高融合处理器的硬件内核执行的效率。在本实施例中,上述设定包括
步骤S12按照传统的方式转换指令并形成相应线程:在本步骤中,对不需要进行步骤S13-15变换的指进行通常的转换,使其能够转换为机器码或其他可执行的文件格式。在本实施例中,这些转换(包括步骤S13-S15中的转换)可以是在编译器中进行的,也可以是在一个类似于编译器中的特殊的转换装置中进行的。
[0018]步骤S13取得像素着色器中包含或隐含的像素点的输入参数:在本步骤中,取得上述指定着色器中的像素点的输入参数。对于上述设定像素着色器而言,其采用专用的编程语言编写的目的是降低编程的难度,使得编程变得简单。同时,在这些使用专用编程语言编写的程序中,必然带有或隐含由该指令需要处理的点的参数。在现有技术中,如果按照现有的方式转换该着色器的话,就会生成多个线程,每个线程针对上述点中的一个进行相应的处理。这样,融合处理器的硬件内核就必须处理生成的多个线程。由于在CPU的结构中,每个线程的开销将大于传统的GPU线程的开销。所以,在本实施例中,不会按照传统的方法来转换该指令。在本步骤中,就是得到这些与被处理的点的位置相关的参数;并在后续的转换过程中减小生成的线程数,进而提高融合处理器的效率。
[0019]步骤S14按照设定方式将符合条件的点组成一个块:在本步骤中,将上述取得的参数中的点按照一定的规律,将其中设定数量个点形成或划为一个数据块,并将这个数据块作为一个线程要处理的数据单元。在一些情况下,可能存在多个点,并不能全部包括在一个单元之内,例如,可能有100个点,但是,设定的数量是32,这样,就需要多次划分这100点,得到多个单元。在这种情况下,对于最后划分的那个单元而言,其包括6个点。在本实施例中,每个单元的划分是按照其所在位置的相关程度和图元进行的,即选择一个基点,并选择与该基点相邻且在图元内的设定数量的点作为一个单元。
[0020]在取得的点的数量较大,形成多个数据块的情况下,也可以按照设定的规定首先选择多个点或多个点的数据;然后按照设定规则排列上述被选择点或点数据,使其形成一个队列或表;最后形成一个新的块着色器线程,该线程依次对上述队列或表中的点进行图形处理。
[0021]步骤S15对于每个块形成一个相应的线程并输出:在本步骤中,按照上述步骤中得到单元的顺序,形成一个线程,按照该顺序依次处理一个块内的各点。也就是说程序转换改变了像素着色器程序的语义,对多个像素点生成一个块着色器,一个线程处理块内的多个像素,从而降低了总线程的数量。
[0022]总之,在本实施例中,是将在传统GPU处理器中的多个像素着色器凑到一起(一次)执行。这样可以增加计算粒度,降低平均一个像素的开销。因为像素着色器相互之间完全独立,为此,将像素着色器自动变换成块着色器。一个块包含若干个像素。一个块着色器在一个CPU线程上执行。这个程序变换是在着色器编译器(或相同功能的硬件单元)中完成的。程序变换本身也可应用在顶点着色器上。像素着色器编译器在进行块着色器变换之后,可以将纹理请求函数前提,并且将一个块内的多个像素生成一个纹理请求。这样只用一次纹理请求就能取得一个块内多个纹理像素,有效地降低平均一个像素的纹理请求开销。
[0023]本发明还涉及一种实现上述方法的装置,如图2所示,在该装置中,按照事先设定的规则,将适合GPU上执行的程序转变成适合CPU执行的等效代码;该装置包括判断单元
11、像素点输入参数插值单元12、线程形成单元13和线程输出单元14。其中,指令判断单元11用于判断该指令是否指定的程序,如否,按照通常的程序编译并输出;如是,调用像素点输入参数插值单元;其中,所述指定的着色器程序是使用专用于图形处理的编程语言写成的、分别对多个点进行并行图形处理的程序;所述着色器在传统的编译情况下将转换为对其中一个点进行处理的单独线程;像素点输入参数插值单元12用于取得所述着色器中包含或隐含的、表示该指令处理的所有点的输入参数;在本实施例,是使用指定的插值算法,通过对顶点的参数插值得到像素的输入参数的。线程形成单元13用于将将指定个数的不同坐标的点形成一个块,将所述块作为一个单元,形成一个依次对所述单元中每个点的数据进行图形处理的线程;线程输出单元14用于输出所述线程并在CPU硬件内核上执行。
[0024]在本实施例中,判断单元判断的指定程序是包含至少一个纹理请求操作的像素着色程序。改程序使用指定的、适于传统意义上GPU运行的图像处理高级语言编写而成。这些语言是DirectX和OpenGL标准为GPU的硬件着色器单元量身定制的专用语言或其他类似的语目。
[0025]此外,在本实施例中,线程形成单元13进一步包括点选择模块131、点排列模块132以及线程形成模块133。点选择模块131用于按照设定的规定选择多个点或多个点的数据;在本实施例中,点选择模块依据点的位置的相邻程度选择一个线程所处理的点作为一个线程处理的数据单元,使用一个线程对其进行处理;点排列模块132用于按照设定规则排列上述被选择点或点数据,使其形成一个队列或表;线程形成模块133用于形成一个新的块色器线程,该线程依次对上述队列或表中的点进行图形处理。
[0026]以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
【权利要求】
1.一种在CPU上执行像素着色器的程序转换方法,其特征在于,按照事先设定的规则,将适合传统图形处理器上执行的程序转变成适合CPU执行的等效代码;其中,在程序转换时执行如下步骤: A)判断当前指令是否使用指定语言写的像素着色器程序,如否,按照通常的指令编译并输出;如是,执行下一步骤;其中,所述指定语言写的像素着色器程序是使用专用于3D图形处理的编程语言写成的、对一个像素点进行图形处理的程序;所述程序在传统的编译情况下将转换一个独立线程在图形处理器上执行;多个像素点通过多个独立线程并发处理; B)取得所述着色器程序中包含或隐含的、表示该程序处理的所有点的输入参数或/和使用指定的差值算法,通过对顶点的参数插值得到像素的输入参数; C)将指定个数的不同坐标的像素点形成一个块,将所述块作为一个单元,形成一个依次对所述单元中每个点的数据进行图形处理的线程; D)输出所述线程并在CPU硬件上执行。
2.根据权利要求1所述的在CPU上执行像素着色器变换方法,其特征在于,所述指定的程序是至少包含一个纹理请求的像素着色程序,该程序在图像处理器中对应多个处理单个点数据的线程。
3.根据权利要求2所述的在CPU上执行像素着色器的程序转换方法,其特征在于,所述步骤C)进一步包括如下步骤: Cl)按照设定的规定 选择多个点或多个像素点的数据; C2)按照设定规则排列上述被选择点或点数据,使其形成一个队列或表; C3)形成一个新的块着色器线程,该线程依次对上述队列或表中的点进行图形处理。
4.根据权利要求3所述的在CPU上执行像素着色器的程序转换方法,其特征在于,在所述步骤C)中,如需要处理的点多于一次选择规定的点,则按照设定规定进行多次选择,形成多个队列或表,得到多个线程。
5.根据权利要求4所述的在CPU上执行像素着色器的程序转换方法,其特征在于,在所述步骤C)中,当形成多个线程时,其最后形成的线程处理的点为剩余的、小于规定的点数的所有点。
6.根据权利要求5所述的在CPU上执行像素着色器的程序转换方法,其特征在于,在所述步骤Cl)中,按照点的位置的相邻程度选择一个线程所处理的点;被选中点的集合构成块。
7.—种在CPU上执行像素着色器的程序变换装置,其特征在于,所述装置按照事先设定的规则,将适合传统图形处理器上执行的程序转变成适合CPU执行的等效代码;其中,所述装置包括: 判断单元:用于当前指令是否使用指定语言写的像素着色器程序,如否,按照通常的指令编译并输出;如是,调用像素点输入参数插值单元;所述指定的像素着色器程序是使用专用于3D图形处理的编程语言写成的、对一个像素点进行图形处理的程序;所述程序在传统的编译情况下将转换一个独立线程在图形处理器上执行;多个像素点通过多个独立线程并发处理; 像素点输入参数插值单元:用于取得所述着色器程序中包含或隐含的、表示该程序处理的所有点的输入参数或/和使用指定的差值算法,通过对顶点的参数插值得到像素的输入参数; 线程形成单元:用于将将指定个数的不同坐标的点形成一个块,将所述块作为一个单元,形成一个依次对所述单元中每个点的数据进行图形处理的线程; 线程输出单元:用于输出所述线程并在CPU硬件上执行。
8.根据权利要求7所述的装置,其特征在于,所述判断单元判断的着色器是包含纹理请求的像素着色器。
9.根据权利要求8所述的装置,其特征在于,所述线程形成单元包括: 点选择模块:用于按照设定的规定选择多个点或多个点的数据; 点排列模块:用于按照设定规则排列上述被选择点或点数据,使其形成一个队列或表; 线程形成模块:用于形成新块着色器线程,该线程依次对上述队列或表中的像素点进行图形处理。
10.根据权利要求9所述的装置,其特征在于,所述点选择模块依据点的位置的相邻程度选择一个线程所处 理的点。
【文档编号】G06F9/45GK103995725SQ201410166052
【公开日】2014年8月20日 申请日期:2014年4月24日 优先权日:2014年4月24日
【发明者】刘鑫, 冀谦祥, 周志德 申请人:深圳中微电科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1