基于细分状态的图形处理器和图形处理方法与流程

文档序号:20707322发布日期:2020-05-12 16:38阅读:142来源:国知局
基于细分状态的图形处理器和图形处理方法与流程

相关申请的交叉引用

2018年11月6日在韩国知识产权局提交的题为:“graphicsprocessorandgraphicsprocessingmethodbasedonsubdividedstates”的韩国专利申请no.10-2018-0135326通过引用整体并入本文。

实施例涉及图形处理,更具体地,涉及图形处理器和图形处理方法,所述图形处理器和图形处理方法均基于细分状态。



背景技术:

渲染是在预定视点中根据三维(3d)模型或二维(2d)模型生成图像的过程。随着对计算机图形的需求增加,图形处理系统可以用作用于加速渲染的专用硬件。在包括图形处理系统的计算系统中,渲染过程可以被称为图形管线。

图形处理系统可以包括多个计算单元,并且可以包括存储器,该存储器存储提供给每个计算单元或由每个计算单元生成的数据。基于从图形处理系统的外部(例如,主机)提供的命令,计算单元可以在被设置为特定状态之后开始执行操作。因此,为了增强图形管线的性能,需要高效地设置多个计算单元的状态。



技术实现要素:

一个或多个实施例提供了一种包括多个计算单元的图形处理器,该图形处理器包括:第一计算单元,具有多个子单元和状态表,所述状态表存储所述多个子单元的状态;以及状态管理器,响应于第一命令更新状态表,并响应于第二命令指派在状态表中存储的状态的状态组合。状态表包括多个子表,所述多个子表中的每个子表与所述多个子单元中的一个或多个子单元相对应并且包括针对对应子单元指派状态的状态组合的行。状态管理器将包括在多个子表中的每个子表内的行之一指派为状态的状态组合。

一个或多个实施例提供了一种包括多个计算单元的图形处理器,该图形处理器包括:第一计算单元,包括存储多个子单元和所述多个子单元的状态的状态表;以及状态管理器,响应于第一命令更新状态表,并响应于第二命令指派在状态表中存储的状态的状态组合。第一计算单元还可以包括映射表,该映射表将多个子单元映射到状态表的字段。

一个或多个实施例提供了一种基于多个计算单元的图形处理方法,该图形处理方法包括:响应于第一命令,更新状态表,所述状态表存储在计算单元中包括的多个子单元的状态;以及响应于第二命令,指派在状态表中存储的状态的状态组合。指派状态组合包括:指派在状态表中包括的第一子表中的一行并指派在状态表中包括的第二子表中的一行,其中第一子表和第二子表中的行针对其中的每个子单元指派状态的状态组合。

附图说明

通过参考附图详细描述示例性实施例,特征对于本领域技术人员将变得显而易见,在附图中:

图1示出了根据示例性实施例的计算系统;

图2示出了根据示例性实施例的图形处理器;

图3a和3b示出了根据比较示例的状态表的示例;

图4示出了根据示例性实施例的子表的示例;

图5示出了根据示例性实施例的子表的示例;

图6示出了根据示例性实施例的图形处理器;

图7示出了根据示例性实施例的映射表的示例;

图8示出了根据示例性实施例的图形处理系统;

图9示出了根据示例性实施例的相对于时间的图形处理方法;

图10示出了根据示例性实施例的图9的操作s20的示例的流程图;

图11示出了根据示例性实施例的图9的操作s40的示例的流程图;

图12示出了根据示例性实施例的图9的操作s50的示例的流程图;

图13示出了根据示例性实施例的图9的操作s80的示例的流程图;以及

图14示出了根据示例性实施例的图形处理器。

具体实施方式

图1示出了根据示例性实施例的计算系统100。计算系统100可以是包括图形处理系统110的任意计算系统。例如,计算系统100可以是固定计算系统,例如台式计算机、服务器、电视机顶盒、视频游戏控制台等,或者可以是便携式计算系统,例如膝上型计算机、移动电话、可穿戴设备、便携式媒体播放器、平板个人计算机(pc)、电子书阅读器等。

如图1中所示,计算系统100可以包括图形处理系统110、中央处理单元(cpu)120、系统存储器130和系统总线150。在一些实施例中,计算系统100中包括的两个或更多个元件可以集成到单个处理系统中。如图1所示,系统总线150可以连接图形处理系统110、cpu120和系统存储器130。图形处理系统110、cpu120和系统存储器130可以通过系统总线150彼此通信。在一些实施方式中,系统存储器130可以直接连接到cpu120。

cpu120可以执行在系统存储器130中存储的一系列指令(或程序),并且可以处理在系统存储器130中存储的数据。此外,cpu120可以允许图形处理系统110在图形管线中执行特定操作,并且可以被称为图形处理系统110的主机。在一些实施方式中,cpu120可以包括两个或更多个核。

系统存储器130可以存储要由cpu120和图形处理系统110处理的指令和数据。系统存储器130可以包括存储信息的任意类型的存储器。在一些实现方式中,系统存储器130可以包括易失性存储器,例如,动态随机存取存储器(dram)、静态随机存取存储器(sram)、移动dram、双倍数据速率同步动态随机存取存储器(ddrsdram)、低功率ddr(lpddr)sdram、图形ddr(gddr)sdram、rambus动态随机存取存储器(rdram)等。在一些实现方式中,系统存储器130可以包括非易失性存储器,例如,电可擦除可编程只读存储器(eeprom)、闪存、相变随机存取存储器(pram)、电阻随机存取存储器(rram)、纳米浮栅存储器(nfgm)、聚合物随机存取存储器(poram)、磁随机存取存储器(mram)、铁电随机存取存储器(fram)等。

如图1所示,系统存储器130可以包括应用程序131、应用程序接口(api)132和图形处理单元(gpu)驱动器133。应用程序131可以生成对api132的调用,以便例如以图形图像序列的形式生成期望的结果。应用程序131可以向api132提供将由gpu驱动器133处理的高级着色程序。高级着色程序可以包括被设计为操作图形处理系统110中的一个或多个可编程处理器(例如,着色引擎)的高级编程指令的源代码。在一些实施例中,可以在gpu驱动器133中提供api132。gpu驱动器133可以将高级着色程序转换为针对着色引擎的类型(例如,顶点、几何或片段)优化的机器代码着色程序。本文中,通过执行应用程序131、api132和gpu驱动器133中的每一个进行的cpu120的操作可以被称为由应用程序131、api132和gpu驱动器133中的每一个执行的操作。因此,应用程序131、api132和gpu驱动器133中的每一个可以被称为图形处理系统110(或图形处理器112)的主机。

图形处理系统110可以接收由cpu120提供的指令,并且可以处理所接收的指令以便允许显示装置渲染和显示图像。如图1中所示,图形处理系统110可以包括图形处理器112和存储器114,并且可以称为图形处理子系统。图形处理器112可以通过总线(例如,gpu总线)连接到存储器114。图形处理器112可以将在处理接收自cpu120的指令期间生成的数据存储在存储器114中,并且可以允许显示装置显示在存储器114中存储的最终图像。

图形处理器112可以包括状态管理器112_2和多个计算单元。包括在图形处理器112中的计算单元可以被称为硬件块,以根据设置状态执行预定义功能。状态管理器112_2可以基于从主机接收的命令来管理多个计算单元的状态。例如,如图1所示,图形处理器112可以包括计算单元112_4,并且计算单元112_4可以包括多个子单元su1、su2、......。

状态管理器112_2可以基于从主机(即,cpu120)接收的命令来设置计算单元112_4的状态(即,包括在计算单元112_4中的多个子单元su1、su2、......的状态)。主机可以向已被设置为期望状态的计算单元提供用于触发操作的命令,并且计算单元可以基于它们的状态执行预定义的功能。

如下面参考图2所述,计算单元112_4可以包括状态表(例如,图2的222),其存储多个子单元su1、su2、......的状态的组合。在发送用于触发操作的命令时,主机可以发送与要在计算单元112_4的多个子单元su1、su2、......中设置的状态的组合(即,状态组合)相对应的标识符(id)。因此,可以防止将计算单元112_4的状态频繁地从主机发送给图形处理器112。状态表的一行可以对应于多个子单元su1、su2、......的状态的组合(即,一个状态组合),并且单个状态组合可以被称为状态版本。因此,包括多个行的状态表可以包括多个状态版本。然而,如下面参考图3a和图3b所述,由于状态表的大小有限,所以当计算单元所需的状态组合(即,状态版本)的数量增加或者状态组合之间的相似性高时,在设置计算单元的状态中可能出现低效率。

在一些实施例中,可以细分计算单元112_4的多个子单元su1、su2、......的状态。例如,如下面参考附图所述,计算单元112_4的状态表可以包括两个或更多个子表,并且多个子单元su1、su2、......的状态可以表示为在两个或多个子表中包括的行的组合。因此,可以高效地设置计算单元112_4的状态(即,多个子单元su1、su2、......的状态),并且可以减小在主机和图形处理器112之间的用于设置计算单元112_4的状态的流量,从而显着改善图形管线的性能。而且,可以减小用于存储计算单元112_4的状态的存储空间(即,状态表的大小)。因此,可以降低处理中的难度级别和图形处理器112的面积,和/或可以在安全区域中提供附加的计算单元,从而进一步增强图形处理器112的性能。

除了根据设置状态执行预定功能的多个功能单元之外,图形处理器112还可以包括用于同时执行多个线程的多个可编程处理器。每个可编程处理器可以被编程为执行各种操作,并且一部分可编程处理器均可以用作包括一个或多个可编程着色器的着色引擎。

图2示出了根据示例性实施例的图形处理器200。详细地,图2示出了图形处理器200,其包括多个计算单元中的一个计算单元220和状态管理器240。如上面参考图1所述,状态管理器240可以基于主机的命令来设置计算单元220的状态。

参考图2,计算单元220可以包括状态表222和多个子单元su1至sun(其中n是大于1的整数)。如上面参考图1所述,多个子单元su1至sun中的每一个可以被设置为特定状态,并且可以基于设置状态来执行预定义功能。例如,当计算单元220要执行输入组件(ia)时,多个子单元su1至sun可以分别执行用于基于设置状态执行ia的顺序操作。多个子单元su1至sun中的每一个的状态可以包括例如对存储要处理的数据的区域加以指示的地址指针和所得基元属性(resultantprimitiveattribute)。在下文中,作为示例将主要描述被设计为执行ia的计算单元220。

状态表222可以存储多个子单元su1至sun的状态。状态表222可以包括用于存储信息的任意结构,并且可以包括易失性存储器设备,例如,sram单元、dram单元、寄存器、锁存器、触发器等。多个子单元su1至sun中的每一个可以被设置为存储在状态表222中的多个状态组合中的一个。如下面参考图4所述,状态表222可以包括两个或更多个子表。子表可以分别对应于不同的子单元,并且每个子表可以包括相应子单元的状态。

状态管理器240可以管理状态表222。在一些实施例中,状态管理器240可以响应于从主机(例如,图1的120)接收的第一命令来更新状态表222。例如,第一命令可以伴随着要被存储在状态表222中的状态,并且状态管理器240可以在状态表222中存储第一命令所伴随的状态。此外,在一些实施例中,状态管理器240可以响应于从主机接收的第二命令,将多个子单元su1至sun中的每一个设置为存储在状态表222中的状态的组合之一。为此,状态管理器240可以指派在状态表222中包括的状态组合之一。如上所述,状态表222可以包括两个或更多个子表。因此,状态管理器240可以指派两个或更多个子表中的每一个的行,以指定状态组合。因此,可以解决下面参考图3a和图3b描述的问题,并且可以高效地设置多个子单元su1至sun的状态。

图3a和图3b是根据比较示例的状态表的示例。详细地,图3a和图3b示出了在一个计算单元中包括的状态表。在图3a中,可以假设计算单元具有四个子单元su1至su4。在图3b中,可以假设计算单元具有八个子单元su1至su8。

参考图3a,状态表可以包括用于存储三个状态版本的三行和分别对应于四个子单元su1至su4的四个字段,并且状态版本可以由主机按照1-2-3-4-1-2-3-4的顺序改变。因此,如在状态表t31中,可以添加与四个子单元su1至su4的状态{a1,b1,c1,d1}对应的第一状态版本v1。类似地,如在状态表t32和状态表t33中,可以顺序地添加对应于状态{a2,b2,c2,d2}的第二状态版本v2和对应于状态{a3,b3,c3,d3}的第三状态版本v3。

状态表t33可以包括三行。因此,为了在其后添加第四状态版本v4,状态表t34可以用第四状态版本v4替换在状态表t33中包括的第一状态版本v1。类似地,状态表t35可以用第一状态版本v1替换在状态表t34中包括的第二状态版本v2,并且状态表t36可以用第二状态版本v2替换在状态表t35中包括的第三状态版本v3。此外,状态表t37可以用第三状态版本v3替换在状态表t36中包括的第四状态版本v4,并且状态表t38可以用第四状态版本v4替换在状态表t37中包括的第一状态版本v1。

在图3a中,每当状态版本从状态表t34改变时,状态版本可以被替换。因此,可能降低图形管线的性能。如图3a所示的问题可能不出现在具有四行的状态表中,但是状态表的大小可能受到计算单元的大小的限制并且可以是在设计图形处理器(例如,图1的131)的过程中确定的,因此,基于主机(例如,应用程序(例如,图1的131))中使用的状态版本的数量,仍然可能出现相同的问题。因此,可能需要减小状态表的大小或者可能需要高效地使用具有预定大小的状态表。

参考图3b,状态表t39可以包括六行,并且六行可以分别存储六个状态版本(例如,第一至第六状态版本)v1至v6。如图3b所示,具有与一个子单元对应的不同状态的状态版本可以作为不同的行被包括在状态表t39中。在状态表t39中仅突出显示版本之间的不同状态。例如,在第一状态版本v1和第二状态版本v2中,仅第二子单元su2的状态b和b′不同,并且其他子单元的状态可以是相同的。

如图3b所示,计算单元中包括的多个子单元的状态可以以不同的频率改变。例如,在用于执行ia的计算单元中,当对象改变时,对存储要处理的数据的区域加以指示的地址指针可以相对频繁地改变,但是可以不如此相对频繁地改变基元属性。类似地,如图3b所示,在六个状态版本v1至v6中,第一至第三子单元su1至su3可以被设置为相对频繁地改变的状态,并且第四至第八子单元su4至su8可以被设置为不相对频繁地改变的状态。具体地,第四至第八子单元su4、su5、su6、su7和su8中的每一个可以被设置为六个状态版本v1至v6中的特定状态。

因此,如下面详细讨论的,一个或多个实施例涉及将相对大的存储空间分配给被设置为频繁改变的状态的子单元(例如,su1至su3)并将相对小的存储空间分配给被设置为不频繁改变的状态的子单元(例如,su4到su8)。因此,可以高效地使用状态表。

图4示出了根据示例性实施例的子表的示例。详细地,图4示出了在一个状态表中包括的子表(例如,第一至第三子表)st41至st43。在一些实现方式中,与图4的图示不同,包括在计算单元中的状态表可以包括两个子表或四个或更多个子表。在图4的描述中,子表st41至st43可以处于图2的状态表222中,并且图2的计算单元220可以被假设为包括十三个子单元(例如,第一至第十三)su1至su13。下文中,将参考图2来描述图4。

在一些实施例中,状态表可以包括分别对应于不同子单元的多个子表。例如,在图2的状态表222中包括的第一至第三子表st41至st43中,第一子表st41可以存储第一至第三子单元su1至su3的状态,第二子表st42可以存储第四至第九子单元su4至su9的状态,且第三子表st43可以存储第十至第十三子单元su10至su13的状态。因此,如图4所示,第一至第三子表st41至st43可以具有不同的宽度w1至w3。子表的宽度可以取决于与该子表相对应的子单元的数量(即,字段或列的数量)和每个子单元的状态的大小(即,字段的大小)。

在一些实施例中,状态表中包括的子表可以包括不同数量的行,例如,其中每行指示不同的状态版本。例如,第一至第三子表st41至st43可以具有不同的高度h1至h3,并且子表的高度可以取决于在子表中包括的行的数量(h1>h2>h3)。因此,在一些实施例中,设置为频繁改变的状态的子单元可以对应于包括最大行数的第一子单元st41,并且设置为不频繁改变的状态的子单元可以对应于包括最小行数的第三子状态st43。

当状态表包括多个子表时,多个子表中的每一个的一行可以指派多个子单元的状态的状态组合。因此,如上面参考图2所述,第二命令可以包括用于指派计算单元的计算单元id和与每个子表的行对应的状态版本id。下面将参考图5描述使用多个子表的示例。

在一些实施例中,子表可以是可重新配置的。例如,状态管理器240可以响应于命令确定子表的数量和每个子表的大小,并且可以在分配给状态表222的存储空间中重新配置该子表。因此,状态表222连同下面参考图6描述的映射表(例如,图6的624)可以适用于主机(例如,应用程序)。因此,可以提高计算单元220的状态设置的效率,从而改善图形管线的性能。

图5示出了根据示例性实施例的子表的示例。详细地,图5示出了第一子表st51和第二子表st52,每个子表执行与图3b的状态表t39相同的功能。如上面参考图3b所述,图5的第一子表st51和第二子表st52可以被包括在包括第一至第八子单元su1至su8的计算单元中,并且可以统称为一个状态表。下文中,将参考图3b来描述图5。

参考图5,第一子表st51和第二子表st52可以具有不同的大小。也就是说,第一子表st51可以包括与第一至第三子单元su1至su3对应的三个字段或三列且包括六行,并且第二子表st52可以包括与第四至第八子单元su4到su8对应的五个字段或五列和两行。也就是说,如上面参考图3b所述,相对频繁地改变的第一至第三子单元su1至su3的状态可以存储在第一子表st51中,并且相对不频繁地改变的第四至第八子单元su4至su8的状态可以存储在第二子表st52中。

如图3b中所示,指派包括作为单个表的状态表的计算单元的状态的第二命令可以被表示为draw(x,y)。在这种情况下,x可以表示计算单元id,且y可以表示状态版本id。例如,当包括图3b的状态表t39的计算单元的计算单元id为1并且计算单元的状态按照第一至第六状态版本v1至v6的顺序设置时,可以接收命令序列“draw(1,v1)->draw(1,v2)->draw(1,v3)->draw(1,v4)->draw(1,v5)->draw(1,v6)”。

如在图5中,指派包括包含有两个子表st51和st52的状态表的计算单元的状态的第二命令可以被表示为draw(x,y,z)。在这种情况下,x可以表示计算单元id,y可以表示存储在第一子表st51中的状态版本的状态版本id,且z可以表示存储在第二子表st52中的状态版本的状态版本id。当包括图5的第一子表st51和第二子表st52的计算单元的计算单元id为1时,可以接收命令序列“draw(1,v1,v1)->draw(1,v2,v1)->draw(1,v3,v1)->draw(1,v3,v2)->draw(1,v5,v1)->draw(1,v6,v1)”,以用于与以上参考图3b所述的命令序列相同地设置计算单元的状态。图3b的状态表t39可以包括48个状态,但是图5的第一子表st51和第二子表st52可以包括总共28个状态。因此,如图5所示,包括多个子表的状态表可以小于配置为单个表的状态表。

图6示出了根据示例性实施例的图形处理器600。详细地,图6示出了状态管理器640和一个计算单元620,其均包括在图形处理器600中的。与图2的图形处理器200相比,图6的图形处理器600的计算单元620还可以包括映射表624。下文中,在描述图6中,将省略上面参考图2给出的描述。

参考图6,计算单元620可以包括状态表622、映射表624和多个子单元(例如,第一至第n个子单元)su1至sun(其中n是大于1的整数)。如上面参考图3a所述,多个子单元su1至sun的状态可以取决于主机,例如,应用程序(例如,图1的131),并且因此,基于应用程序频繁地改变状态的子单元可以是不同的。例如,在图3b和图5的实施例中,可以频繁地改变在第一至第三子单元su1至su3中设置的状态,并且可以不频繁地改变在第四至第八子单元su4至su8中设置的状态。然而,在基于另一应用程序的实施例中,可以频繁地改变在第一子单元su1、第六子单元su6和第七子单元su7中设置的状态,并且可以不频繁地改变在第二至第五子单元su2至su5和第八子单元su8中设置的状态。因此,计算单元620可以包括映射表624,用于子表和子单元之间的可变对应关系。

状态管理器640可以响应于命令来控制映射表624和状态表622。例如,状态管理器640可以响应于第三命令更新映射表624。状态管理器640可以在映射表624中存储第三命令所伴随的映射信息。下面将参考图7描述使用映射表624的示例。

图7示出了根据示例性实施例的映射表的示例。详细地,图7示出了图6的状态表622的示例状态表622’和图6的映射表624的示例映射表624′,并且在图7中,计算单元620可以被假设为包括八个子单元su1至su8。

如图7中所示,状态表622′可以包括第一子表st71和第二子表st72。为了便于说明,在图7的第一子表st71和第二子表st72中,仅示出了在一行中包括的状态。如在图5的实施例中,第一子表st71可以包括相对大量的行,用于具有更频繁改变的状态的字段或子单元,但是第二子表st72可以包括相对少量的行,用于具有较不频繁改变的状态的字段或子单元。

与图3a和图5的实施例不同,由于应用程序,在第一子单元su1、第六子单元su6和第七子单元su7中设置的状态可以是具有更频繁改变的状态的字段或子单元,并且在第二至第五单元su2至su5和第八子单元su8中设置的状态可以不是具有更频繁改变的状态的字段或子单元。因此,第一子单元su1、第六子单元su6和第七子单元su7的状态可以存储在第一子表st71中,并且第二至第五子单元su2至su5和第八子单元su8的状态可以存储在第二子表st72中。为此,在映射表624′中,第一子单元su1、第六子单元su6和第七子单元su7可以映射到第一子表st71,并且第二至第五子单元su2至su5和第八子单元su8可以映射到第二子表st72。例如,如图7中的箭头所示,映射表624′的条目可以顺序地对应于第一子表st71的字段和第二子表st72的字段,并且映射表624′的每个条目可以包括和与其对应的子表的字段相对应的子单元的id。

如图7中所示,映射表624′的分别与第一子表st71的三个字段相对应的前三个条目可以分别包括值1、6和7。因此,第一子表st71的字段可以分别对应于第一子单元su1、第六子单元su6和第七子单元su7,并且存储在第一子表st71中的状态可以设置在第一子单元su1、第六子单元su1和第七子单元su7中。类似地,分别对应于第二子表st72的五个字段的映射表624′的五个其他条目可以分别包括值2、3、4、5和7。因此,第二子表st72的字段可以分别对应于第二至第五子单元su2至su5和第八子单元su8,并且存储在第二子表st72中的状态可以设置在第二至第五子单元su2至su5和第八子单元su8中。

图8示出了根据示例性实施例的图形处理系统800。如图8中所示,计算系统800可以包括图形处理器820、外部存储器840和主机860。图形处理器820可以包括状态管理器822和多个计算单元(例如,第一至第m个计算单元)cu1至cum(其中m是大于1的整数)。在一些实施例中,图8的图形处理器820、外部存储器840和主机860可以分别对应于图1的图形处理器112、系统存储器130和cpu120。

主机860(例如,gpu驱动器)可以基于对应用程序的api的调用来生成要由图形处理器820使用的状态信息,并且可以将状态信息存储在外部存储器840中。例如,如图8中所示,外部存储器840可以存储关于第一计算单元cu1的状态信息。外部存储器840可以存储在计算单元中包括的子单元的状态,并且可以附加地存储关于存储状态的级别信息和版本信息。版本信息可以表示状态版本,并且级别信息可以是基于在对应子单元中设置的状态改变的频率来确定的。例如,在图8中,第一计算单元cu1的第一子单元su1的状态可以相对频繁地改变并且可以被分类为第一级l1,并且第一计算单元cu1的第三子单元su3的状态可以不相对频繁地改变并且可以被分类为第二级l2。在一些实施例中,级别信息可以对应于子表。因此,第一子单元su1的状态可以存储在包括相对大量行的子表中,并且第三子单元su3的状态可以存储在包括相对少量行的子表中。

状态管理器822可以从外部存储器840获得状态,并且可以将获得的状态提供给对应计算单元。状态管理器822可以存储关于提供给对应计算单元的每个状态的级别信息和版本信息。仅当对应计算单元不包括在该状态版本中包括的状态时,状态管理器822才可以将该状态提供给对应计算单元。例如,如图8中所示,状态管理器822可以将第一至第三状态版本v1至v3存储为第一计算单元cu1的第一级l1中的版本信息。因此,状态管理器822可以识别出在第一计算单元cu1中包括的第一子表包括第一至第三状态版本v1至v3,并且基于此,状态管理器822可以更新第一计算单元cu1的状态表,并且可以响应于从主机860接收的命令而指派第一子表的行。

图9示出了根据示例性实施例的相对于时间的图形处理方法。图9的图形处理器920可以包括图6的图形处理器600的元件。下文中,将参考图6来描述图9。

在操作s10中,主机940可以将第一命令发送给图形处理器920。例如,第一命令可以伴随要存储在状态表622中的状态,并且可以指示状态表622的更新。在一些实施例中,主机940可以连续地向图形处理器920发送多个第一命令,以便更新分别包括在图形处理器920所包括的多个计算单元中的多个状态表。

在操作s20中,图形处理器920可以更新状态表。例如,响应于第一命令,状态管理器640可以改变在计算单元620的状态表622中存储的状态的至少一部分,以更新状态表622。如上所述,状态表622可以包括多个子表,并且状态管理器640可以响应于第一命令仅更新多个子表中的至少一个。以下将参考图10描述操作s20的示例。

在操作s30中,主机940可以将第二命令发送给图形处理器920。例如,第二命令可以伴随计算单元id和状态版本id。如上面参考图5所述,状态表可以包括多个子表,因此,第二命令可以伴随多个状态版本id。如上所述,计算单元可以被细分为子单元。

在操作s40中,图形处理器920可以指派状态组合。例如,状态管理器640可以基于由第二命令伴随的状态版本id来针对包括在计算单元620中的多个子单元su1至sun指派状态组合。状态组合可以被定义为多个子表的状态版本的组合,并且状态管理器640可以根据第二命令所伴随的状态版本id来指派多个子表的状态版本,以指派状态组合。以下将参考图11描述操作s40的示例。响应于第二命令,状态管理器640可以指派状态组合,然后可以触发计算单元620的操作,并且计算单元620可以基于设置状态执行功能。

在操作s50中,主机940可以生成映射表624。例如,gpu驱动器(例如,图1的133)可以基于子单元的状态的改变频率来生成映射表。gpu驱动器可以生成自适应于应用程序的映射表,从而通过应用程序增强图形管线的性能。以下将参考图12描述操作s50的示例。

在操作s70中,主机940可以将第三命令发送给图形处理器920。例如,第三命令可以伴随映射信息,并且映射信息可以定义状态表622的字段(或子表的字段)和在计算单元620中包括的多个子单元su1至sun的对应关系。

在操作s80中,图形处理器920可以更新映射表624。例如,响应于第三命令,状态管理器640可以改变在映射表624中存储的映射信息的至少一部分,以更新映射表624。以下将参考图12描述操作s80的示例。

图10是示出了根据示例性实施例的图9的操作s20的示例的流程图。如上面参考图9所述,在图10的操作s20′中,可以执行响应于第一命令更新状态表的操作。如图10中所示,操作s20′可以包括操作s21、s23、s25、s27和s29。图10的操作s20′可以由图6的状态管理器640来执行。

在操作s21中,第i计算单元cui可以被设置为第一计算单元cu1。为了确定是否在接收第一命令时更新与图形处理器所包括的全部m(其中m是大于1的整数)个计算单元相关联的状态表,第i计算单元cui可以被初始设置为第一计算单元cu1(i=1)。

在操作s23中,检查是否接收到第i计算单元cui的状态。当接收到第i计算单元cui的状态时,可以随后执行操作s25。另一方面,当未接收到第i计算单元cui的状态时,可以在操作s29中执行将第i计算单元cui设置为下一计算单元cu(i+1)的操作,并且可以随后执行操作s23。

在操作s25中,可以更新第i计算单元cui的状态表。可以根据第一命令仅更新在状态表中包括的一部分子表,并且状态表可以是完全更新的。例如,可以确定是否根据第一命令改变在一个子表中包括的每个状态。通过这种方式,可以对状态表中包括的所有子表顺序地执行确定是否执行基于第一命令进行改变的操作。

在操作s27中,检查第i计算单元cui是否是第m计算单元cum。当第i计算单元cui是第m计算单元cum时,操作s20′可以结束。当第i计算单元cui与第m计算单元cum不同时,可以随后执行操作s29。

图11是示出了根据示例性实施例的图9的操作s40的示例的流程图。如上面参考图9所述,在图11的操作s40′中,可以执行指派状态组合。详细地,如在图5的实施例中,图11的操作s40′可以表示在包括两个子表的状态表中指派状态组合的示例。如图11中所示,操作s40′可以包括操作s42和操作s44。图11的操作s40′可以由图6的状态管理器640来执行。下文中,将参考图5和图6来描述图11。

在操作s42中,可以执行指派第一子表的一行的操作。例如,状态管理器640可以指派第一子表st51的六行之一。第一子表st51可以存储第一至第三子单元su1至su3的状态,以指派第一子表st51的一行,因此,可以确定第一至第三子单元su1至su3的状态。

在操作s44中,可以指派第二子表的一行。例如,状态管理器640可以指派第二子表st52的两行之一。第二子表st52可以存储第四至第八子单元su4至su8的状态,以指派第二子表st52的一行。因此,可以确定第四至第八子单元su4至su8的状态。

当状态表包括三个或更多个子表时,可以重复与操作s42和s44类似的操作。通过这种方式,在包括多个子表的状态表中,可以通过指派多个子表中的每一个的行来指派计算单元的状态。多个子单元su1至sun可以分别设置为由状态管理器640指派的状态。

图12是示出了根据示例性实施例的图9的操作s50的示例的流程图。如上面参考图9所述,在图12的操作s50′中,可以生成映射表。在一些实施例中,图12的操作s50′可以由主机的gpu驱动器(例如,图1的133)执行。如图12所示,操作s50’可以包括操作s51和s52。下文中,将参考图1来描述图12。

在操作s51中,可以监视在子单元中指派的状态。例如,如上面参考图8所述,gpu驱动器133可以基于与应用程序131的api132相对应的调用来生成要由图形处理器112使用的多条状态信息,并且可以监视由应用程序131使用的状态的改变频率。在一些实施例中,操作s51可以是由主机在后台执行的,例如,可以与图9的操作s30并行地执行。

在操作s53中,可以生成基于状态的改变频率的映射表。例如,gpu驱动器133可以基于在操作s51中执行的监视的结果来识别具有频繁改变的状态的计算单元(computationalunit)和具有频繁改变的状态的子单元。因此,gpu驱动器133可以生成映射表,使得子单元的相对频繁地改变的状态对应于包括较多数量的行的子表,并且子单元的不相对频繁地改变的状态对应于包括较少数量的行的子表。

图13是示出了根据示例性实施例的图9的操作s80的示例的流程图。如上面参考图9所述,在图13的操作s80′中,可以更新映射信息。如图13中所示,操作s80′可以包括操作s81至s83。在一些实施例中,图13的操作s80′可以由图6的状态管理器640来执行。下文中,将参考图6来描述图13。

在操作s81中,可以确定映射信息是否改变。例如,状态管理器640可以基于第三命令来确定先前的映射信息是否被改变。如图13中所示,当映射信息未改变时,操作s80′可以结束,并且当映射信息被改变时,可以随后执行操作s83。

在操作s83中,可以确定当前操作是否结束。例如,状态管理器640可以基于在映射表624中存储的先前映射信息来确定在多个子单元su1至sun的每一个中执行的操作是否结束。也就是说,当映射信息被改变时,状态管理器640可以待机直到基于先前映射信息的操作结束为止,以用于改变映射信息。如图13中所示,在当前操作结束时,可以随后执行操作s85。

在操作s85中,可以存储映射信息。例如,状态管理器640可以将基于第三命令的映射信息存储在映射表624中。因此,与先前情况不同,状态表622的字段(或子表的字段)可以对应于多个子单元su1至sun。

图14示出了根据示例性实施例的图形处理器400。如图14中所示,图形处理器400可以包括命令处理器410、管线控制器430、前端管线450、后端管线470和可编程处理器490。

命令处理器410可以从主机接收命令并且可以解译所接收的命令以将所接收的命令转换为管线可执行命令。命令处理器410可以将转换后的命令提供给管线控制器430。

管线控制器430可以从接收自命令处理器410的命令中提取针对前端管线450和后端管线470中的每一个的信息,并且可以基于提取的信息配置管线。此外,管线控制器430可以将从命令处理器410接收的命令转换为可由前端管线450和后端管线470执行的命令,并且可以将转换后的命令提供给前端管线450和后端管线470。

前端管线450和后端管线470均可以包括多个计算单元,并且可以与可编程处理器490通信。如上所述,计算单元可以包括包含有多个子表的状态表,因此,可以高效地设置状态。例如,可编程处理器490可以通过使用由应用程序提供的着色程序来执行着色。

实施例提供了一种图形处理器和图形处理方法,其高效地设置在图形处理系统中包括的计算单元的状态,以提供具有增强性能的图形管线。

以功能块、单元、模块和/或方法来描述并在附图中示出实施例。本领域技术人员将理解,这些块、单元、模块和/或方法通过诸如逻辑电路、分立组件、微处理器、硬连线电路、存储器元件、布线连接等的电子(或光学)电路物理地实现,其中所述电子(或光学)电路可以使用基于半导体的制造技术或其它制造技术来形成。在块、单元、模块和/或方法由微处理器等实现的情况下,它们可以使用软件(例如,微代码)来编程以执行本文讨论的各种功能,并且可以可选地由固件和/或软件驱动。备选地,每个块、单元、模块和/或方法可以通过专用硬件实现或实现为执行一些功能的专用硬件和执行其他功能的处理器(例如,一个或多个编程的微处理器和相关联的电路)的组合。此外,在不脱离本公开的范围的情况下,实施例的每个块、单元和/或模块可以物理地分成两个或更多个交互和分立的块、单元和/或模块。此外,在不脱离本公开的范围的情况下,实施例的块、单元和/或模块可以物理地组合成更复杂的块、单元和/或模块。

本文已经公开了示例实施例,并且尽管采用了特定术语,但是它们仅用于且将被解释为一般且描述性意义,而不是为了限制的目的。在一些情况下,截至本申请递交之时,本领域技术人员清楚,除非另有明确说明,否则结合特定实施例描述的特征、特性和/或元素可以单独使用或与结合其他实施例描述的特征、特性和/或元素相结合使用。因此,本领域技术人员将理解,在不脱离如所附权利要求中阐述的本发明的精神和范围的前提下,可以进行形式和细节上的各种改变。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1