图形处理系统的制作方法

文档序号:11135234阅读:233来源:国知局
图形处理系统的制造方法与工艺

本发明涉及图形处理系统,更具体地涉及当执行图形着色器时将线程映射到寄存器。



背景技术:

图形处理通常是以流水线的方式来执行的,具有对数据进行操作以生成最终渲染输出(例如显示的帧)的一个或更多个流水线阶段。现在,很多图形处理流水线包括一个或更多个可编程处理阶段,通常被称为“着色器(shader)”。例如,图形处理流水线可以包括几何着色器、顶点着色器和片段(fragment)(像素)着色器中的一个或更多个,并且通常为全部的上述着色器。这些着色器是这样的可编程处理阶段:其对输入数据值执行着色器程序以生成期望的一组输出数据(例如,在片段着色的情况下适当地进行着色(shade)和渲染的片段数据),用于通过图形流水线的其余部分进行的处理和/或用于输出。图形处理流水线的着色器可以共享可编程处理电路,或者它们各自可以是不同的可编程处理单元。

因此,图形处理单元(GPU)着色器核心是这样的处理单元:其通过运行针对要生成的图形输出中的每个图形项目的小程序来执行图形处理,上述图形输出诸如是渲染目标,例如,帧(“项目”在这方面通常是顶点或采样位置(例如,在片段着色器的情况下))。这通常使得具有高并行度,这是由于典型的渲染输出(例如,帧)特征在于具有相当大数量的顶点和片段,这些顶点和片段中的每一个可以独立地进行处理。

在图形着色操作中,每个“项目”将借助于执行线程来进行处理,该执行线程将执行针对讨论中的图形“项目”的讨论中的着色器。

通过图形处理流水线的着色阶段执行的图形着色器程序通常将执行从相应寄存器读取数据以及向相应寄存器写入数据的一系列指令。执行着色器程序的每个执行线程通常将具有其将从中读取并向其写入其相应数据的被分配的寄存器或一组寄存器。用于此目的的寄存器通常将被组织成一个或更多个组的寄存器,并且相应线程将是来自寄存器组中的相应一个或多个组中的被分配的寄存器,供其使用。

通常将存在将一个或多个寄存器组中的寄存器映射到相应执行线程的预定义的寄存器文件映射,并且然后当执行线程执行所讨论的着色器程序时,这些执行线程将使用已经根据寄存器文件映射被分配的寄存器。

申请人相信,仍有改进当在图形处理系统中执行着色器程序时将执行线程映射到寄存器的空间。



技术实现要素:

根据本发明的第一方面,提供了一种操作图形处理单元的方法,该图形处理单元包括执行程序指令以进行图形着色操作的可编程执行单元,以及遍及至少两个寄存器组分布的多个寄存器,所述多个寄存器用于由所述可编程执行单元执行的执行线程使用;并且其中:

所述图形处理单元能够将至少两个不同的寄存器文件映射配置用于将所述寄存器映射到执行线程;

所述方法包括以下步骤:

针对对于所述图形处理单元的所述可编程执行单元中的一组线程要执行的一组指令,确定要将所述至少两个不同的寄存器文件映射配置中的哪一个用于对于所述一组线程的所述一组指令;以及

当执行对于所述一组线程的所述一组指令时,根据所确定的寄存器文件映射配置来使用所述寄存器。

根据本发明的第二方面,提供了一种图形处理系统,该图形处理系统包括:

图形处理单元,该图形处理单元包括:

可编程执行单元,所述可编程执行单元执行程序指令以进行图形着色操作;以及

多个寄存器,所述多个寄存器遍及至少两个寄存器组进行分布,用于由所述可编程执行单元执行的执行线程使用;

其中:

所述图形处理单元能够将至少两个不同的寄存器文件映射配置用于将所述寄存器映射到执行线程;并且

所述图形处理系统被配置为:

针对对于所述图形处理单元的所述可编程执行单元中的一组线程要执行的一组指令,确定要将所述至少两个不同的寄存器文件映射配置中的哪一个用于对于所述一组线程的所述一组指令;以及

当执行对于所述一组线程的所述一组指令时,使得所述图形处理单元根据所确定的寄存器文件映射配置来使用所述寄存器。

本发明涉及当在图形处理单元中执行着色器程序时将寄存器分配到执行线程。在本发明中,能够使用两个或更多个不同的寄存器文件映射配置,并且然后选择这些可用寄存器文件映射中的一个,以供针对要执行的一个或多个给定线程的一个或多个给定指令使用。

如下文中将要进一步论述的,申请人已经意识到,特定寄存器文件映射对于特定形式的数据接入来说可以是有利的。本发明通过在使用中使得寄存器文件映射能够在逐个指令、逐个线程和/或逐个着色器程序等的基础上有效地进行配置来利用该优势。然后这将意味着更优化的寄存器文件映射配置能够被用于要执行的指令和/或着色器程序。然后这导致在由图形处理单元执行着色器程序期间更高效地(例如,在电力使用方面)访问寄存器。

可编程执行单元能够是图形处理单元可以包含的任何合适的且需要的可编程执行单元。应当可以进行操作来执行图形着色程序,以进行图形处理操作。因此,可编程执行单元将接收要执行的图形线程,并且执行针对这些线程的合适的图形着色程序以生成需要的图形输出。

可编程执行单元能够执行任何合适的且需要的着色器程序。在一个优选实施方式中,可编程执行单元执行片段着色器程序(用于执行片段着色操作的程序)。

可以存在单个或多个可编程执行单元。在存在多个可编程执行单元的情况下,每个执行单元能够优选地按照本发明的方式进行操作。

在优选实施方式中,在本发明中执行的线程被组织成线程组,其中,分组的线程以一致步调、一次一个指令地来执行。(用于这种线程组的其它术语包括“warp”和“wavefront”。为了方便起见,将在本文中使用术语“线程组”,但是除非另有说明,该术语旨在包含全部的等同术语和结构。)

本发明所使用的线程组可以是任何合适且需要的尺寸。在优选实施方式中,每个线程组包含四个线程(即,存在为四的组宽度)。在这种情况下,每个线程组(warp)优选地对应于2x2采样位置“四元组”。然而,如果需要的话,诸如使用更宽的线程组(warp)的其它安排将是可能的。

寄存器可以按照任何合适的且需要的方式来提供,并且可以存在任何合适且需要数量的寄存器。寄存器被组织成至少两个寄存器组。在一个优选实施方式中,仅存在两个寄存器组,但是在其它实施方式中,可以存在超过两个的寄存器组。每个寄存器组可以包括与需要一样多的寄存器。优选地每个寄存器组实际上被组织为寄存器的阵列,优选地能够指派(映射)阵列中的多组寄存器,以供相应的执行线程使用。

在优选实施方式中,在执行线程能够被组织成一组线程以一致步调、一次一个指令地运行的线程组的情况下,每个寄存器组优选地包含针对线程组能够包含的每个线程的一组寄存器。因此,例如,在可编程执行单元能够处理包括四个执行线程的线程组的情况下,则优选地每个寄存器组包含四组寄存器,使得一组能够被分配到线程组中的每个线程(如有需要)。

能够根据需要选择能够在本发明之间进行选择的不同的寄存器文件映射配置。在一个优选实施方式中,存在能够在其之间进行选择的两个不同的寄存器文件映射配置。在其它配置中,存在超过两个的不同的寄存器文件映射配置(例如,三个寄存器文件映射配置)。

优选地预先限定不同的寄存器文件映射配置,即,使得系统在使用中选择多个预定的寄存器文件映射配置中的一个来使用。

每个寄存器文件映射配置优选地进行配置,以便针对特定类型的数据访问来说更加优化,并且最优选地以供利用具有特定的、优选已选大小(精确度)的数据值来使用。因此,优选地存在用于第一大小的数据值使用的一个寄存器文件映射配置,以及用于与第二不同大小的数据值一起使用的另一个寄存器文件映射配置。

数据值大小在这方面可以根据需要进行选择,但是优选地对应于有可能用在图形处理系统中的数据值大小(例如,数据值精确度)。因此,在优选实施方式中,数据值大小是以下各项中的至少两个:16位数据值、32位数据值和64位数据值。在特定优选实施方式中,存在用于与32位数据值一起使用的一个寄存器文件映射配置,以及用于与64位数据值一起使用的第二寄存器文件映射配置。

寄存器文件映射配置能够被制作得更加优化,用于以任何合适的且需要的方式与例如和这些寄存器文件映射配置相关的特定数据值大小一起使用。在优选实施方式中,寄存器文件映射进行配置以便减少将需要被针对所述大小的数据值的线程或线程组访问的寄存器组的数量,并且优选地使得针对所述大小的数据值的寄存器访问将访问最小数量的寄存器组(鉴于寄存器组的寄存器的大小)。最优选地,寄存器文件映射进行配置使得针对所述大小的数据值的寄存器访问将仅需要访问一个寄存器组(而其它大小的数据值可能需要访问两个或更多个寄存器组,以读取或写入这些数据值)。

寄存器文件映射配置能够在这方面按照任何合适的且需要的方式来组织。这例如可能取决于寄存器组中的每个单独的寄存器能够支持的数据值的大小。

在特别优选实施方式中,在寄存器存储特定大小的数据值,例如并且优选地32位数据值的情况下,则存在用于该大小的数据值(例如并且优选地32位数据值)使用的一个寄存器文件映射配置,在该配置中,寄存器文件映射将来自同一组的相应寄存器映射到可以在可编程执行单元中作为线程组进行处理的一组线程中的每个线程,以及用于与两倍大小的数据值(例如并且优选地,64位数据值)一起使用的第二寄存器文件映射配置,在该配置中,来自同一寄存器组的各个成对的寄存器被分配以供给定执行线程使用(即,从而实际上针对执行线程提供同一寄存器组中的一对寄存器,使得执行线程当读取或写入更大的(例如64位)数据值时不必访问两个或更多个寄存器组)。这使得线程组中的全部线程通过当使用较小数据值时仅访问一个组的寄存器来并行地进行寄存器访问,并且具有如下效果:能够减少针对使用“更大”数据值的线程需要进行访问的寄存器组的数量。

所选择的寄存器文件映射配置能够以任何合适且需要等级的粒度(分辨率)应用于全部寄存器组。因此,例如,能够是这样的情况:全部的寄存器和寄存器组都针对所选择的寄存器文件映射配置来进行设置(并且在一个优选实施方式中这就是在做的)。在这种情况下,全部的寄存器组因此将根据所选择的寄存器文件映射配置来进行映射。

另选地,如有需要,将寄存器组中的一个子集的寄存器映射到其中一个寄存器文件映射配置将是有可能的,寄存器组中的其它寄存器被映射到不同的一个(例如另一个)寄存器文件映射配置(并且在优选实施方式中,这是在做的)。换句话说,不同的寄存器文件映射配置能够被用于寄存器文件的不同部分。

例如,第一子集的寄存器能够被配置为使用其中一个寄存器文件映射配置(例如,针对64位数据值被优化),其余寄存器根据(或者其它)寄存器文件映射配置(例如并且优选地,用于与32位数据值一起使用的配置)进行配置。这可以在着色器程序包含32位操作和64位操作的混合的情况下更加合适。

在这种情况下,如下面将进一步讨论的,有可能在一个或多个指令的基础上来选择要使用哪一个文件映射配置,而在全部寄存器都被配置为其中一个寄存器文件映射配置的情况下,可以优选地在逐个线程或者线程组和/或逐个着色器程序的基础上选择要使用的寄存器文件映射配置。

在寄存器组中的特定寄存器根据其中一个寄存器文件映射来进行配置、其它寄存器根据其它寄存器文件映射进行配置的情况下,能够根据需要(例如基于不同寄存器文件映射的期望使用等级)来选择根据不同的寄存器文件映射来进行配置的大量寄存器。相应地,取决于使用不同的文件映射配置的期望的或者实际的使用或需要,将寄存器划分成其相应的寄存器文件映射配置子集在使用中能够是固定的或者能够例如发生改变。

能够依照指令、线程等以任何合适且需要等级的粒度(分辨率)来做出要使用哪一个文件映射配置的确定和选择。因此,针对其选择要使用的寄存器文件映射配置的一组指令能够包含单个指令或者多个指令。相应地,针对其选择要使用的寄存器文件映射配置的一组线程能够包含单个线程或者多个线程。这可以例如取决于所选择的寄存器文件映射配置是否要被应用于要使用的全部寄存器,或者如上述所讨论的,不同子集的寄存器是否可以使用不同的寄存器文件映射配置。

在一个优选实施方式中,在逐个指令或者逐组多个指令的基础上做出要使用的寄存器文件映射配置的确定和选择。因此,要执行的着色器程序中的相应各个指令或者多组多个指令将确定并选择针对这些指令要使用的寄存器文件映射配置(然后指令根据所选择的寄存器文件映射配置来使用寄存器)。这适合以下的情况下,并且优选地是在以下的情况下所做的,即不同的寄存器文件映射配置被用于不同子集的可用寄存器(然后其将有利于使用寄存器的不同指令被配置到不同的寄存器文件映射)。

因此在这种情况下,所执行的着色器程序中的指令或者多组多个指令优选地被指示为使用具有针对所讨论的指令的形式的合适的寄存器文件映射配置的寄存器。因此,例如并且优选地,使用32位数据值的指令被设置为使用根据“32位数据值”文件映射配置来进行配置的寄存器,而使用64位数据值的指令被设置为使用具有被预期用于64位数据值的寄存器文件映射配置的寄存器。

在另一优选实施方式中,针对要执行所述的着色器程序的相应各个线程或者多组多个线程(例如,线程组)来进行寄存器文件映射配置的确定和选择。(在这种情况下,使用寄存器文件映射配置的一组指令可以是并且优选地是所讨论的着色器程序中的全部指令)。这可以在全局应用(即,应用于全部的可用寄存器)寄存器文件映射配置的情况下是合适的。

在这种情况下,优选地至少针对要执行的给定线程组(warp)来确定并选择(然后进行固定)寄存器文件映射配置。寄存器文件映射配置还可以或者替代地针对比单独的线程组更高等级的分辨率,诸如整体上针对着色器程序,针对要执行着色器程序的相应的绘制调用,针对所生成的各个渲染输出等来确定和选择(然后固定)(并且在其它优选实施方式中这是在做的)。

因此,在优选实施方式中,针对要执行着色器程序的线程或者针对要执行着色器程序的仅一个子集的线程来选择寄存器文件映射配置(下降到将以一致步调执行的单独的线程组的等级)。

能够以任何合适且需要的方式,例如取决于正在选择并设置寄存器文件映射配置的等级,来指示要用于给定着色器程序、执行线程或一组多个执行线程或者指令或一组多个指令的所确定(选择)的寄存器文件映射配置。

因此,例如,针对各个指令或者多组多个指令而选择的寄存器文件映射配置,要被用于给定指令或者一组多个指令的配置能够并且优选地通过将指令配置(设置)为使用具有合适配置的寄存器(例如,具有需要的寄存器文件映射配置的寄存器子集中的寄存器)来进行指示和设置。

在针对执行线程或者多组多个执行线程或者以更高的等级(例如整体上针对着色器程序)进行寄存器文件映射配置的确定和选择的情况下,要使用的配置优选地使用合适的状态信息来进行指示和设置。因此,寄存器文件映射配置可以并且优选地被指示并设置为针对执行线程或者一组执行线程的一部分状态(例如,作为一部分线程组执行状态),或者被指示并设置为用于绘制调用、着色器程序和/或要生成的渲染输出的一部分渲染状态,或者被指示并设置为整个图形处理单元(流水线)状态(配置)的一部分。

通常来说,寄存器文件映射配置应当被指示并设置为以正在确定并选择寄存器文件映射配置的合适等级的状态配置。

能够在并且通过图形处理单元是其一部分的整个数据处理系统的任何合适且需要的组件或元件来进行针对给定的指令或者一组多个指令、线程或者一组线程、着色器程序等要使用哪个寄存器文件映射配置的确定。

在一个特定优选实施方式中,该确定和选择是基于所讨论的一个或多个指令、一个或多个线程和/或着色器程序对寄存器的期望的和/或预期的使用来进行的,例如并且优选地是基于期望和/或能够预测相关的一个或多个指令、一个或多个线程、着色器程序等将使用何种形式(大小)的数据值来进行的。

在这种布置中,例如在预期着色器程序将具有将使用特定形式(精确度)的数据值的更多指令的情况下,因此优选地选择要使用的寄存器文件映射配置。相应地,如果指令或者一组多个指令将使用特定形式(例如,精确度等级)的数据值,则再次指令或者一组多个指令优选且优先地被设置为使用具有针对所讨论的数据值的相应的或合适的寄存器文件映射配置的寄存器。

在本发明的这些布置的特定优选实施方式中,用于可编程着色阶段的编译器进行操作以确定并选择要使用的寄存器映射配置。编译器是整个数据处理系统的要进行该寄存器映射配置的合适元件,由于其例如能够对着色器程序和/或着色器程序指令进行分析以确定例如正在使用(或者将更主要地使用)哪种形式(例如精确度)的数据值,并且因此选择并设置寄存器文件映射配置。

因此,在特定优选实施方式中,编译器对例如通过需要图形处理的主处理器上的应用来提供的着色器程序代码进行分析,并且从中确定使要使用哪个寄存器文件映射配置。

编译器能够进行寄存器文件映射配置的确定和选择,以整体上用于着色器程序(并且在一个优选实施方式中这是在做的)。在这种布置中,编译器将并且优选地对着色器程序将使用的指令的数据值精确度进行评估,并且因此选择并设置寄存器文件映射配置。因此,在优选实施方式中,编译器将考虑要执行的着色器程序是具有大多数的32位指令还是64位指令,然后因此设置要用于着色器程序的寄存器文件映射配置。

在另一优选实施方式中,编译器还能够或者代替地考虑各个指令或者多组多个指令,然后因此设置针对所讨论的指令或者一组多个指令的寄存器文件映射配置。在这种情况下,编译器优选地考虑指令或者一组多个指令将使用的数据值的精确度,并且因此选择并设置针对指令或者一组多个指令的寄存器配置。因此,在特定优选实施方式中,编译器将确定要执行的着色器程序中的指令是32位指令还是64位指令(使用32位数据值还是64位数据值),并且然后例如并且优选地通过设置指令使用具有合适寄存器文件映射配置的寄存器来相应地设置寄存器文件映射配置用于这些指令。

编译器可以例如,并且在优选实施方式中确实可以在包括图形处理流水线的整体数据处理系统的主处理器上运行(图形处理流水线然后在诸如图形处理器的与主处理器相关联的另一处理器上(使得编译器和编译代码在整体数据图形处理系统内部的单独的处理器上运行))。然而,其它安排将是可能的,诸如编译器在与编译代码相同的处理器上运行,或者编译器(完全)在单独的处理器上运行,诸如程序在单独的系统上进行预编译并且以编译的形式分布。

本发明还延伸至编译器本身。

因此,根据本发明的另一方面,提供有一种编译器,该编译器对程序进行编译以生成用于图形处理流水线的可编程执行单元的指令,所述可编程执行单元执行指令以进行图形着色操作;

其中,所述编译器被配置为针对要由图形处理单元的执行单元执行的着色器程序中的一组至少一个指令,执行以下步骤:

确定要将所述图形处理单元能够使用的至少两个不同的寄存器文件映射配置中的哪一个寄存器文件映射配置用于所述一组指令;以及

当执行所述一组指令时,使得所述执行单元根据所确定的寄存器文件映射配置来使用所述寄存器。

根据本发明的另一方面,提供有一种编译方法,该编译方法对程序进行编译以生成用于图形处理流水线的可编程执行单元的指令,所述可编程执行单元执行指令以进行图形着色操作;

所述方法包括以下步骤:

针对要由图形处理单元的可编程执行单元执行的着色器程序中的一组至少一个指令,确定要将所述图形处理单元能够使用的至少两个不同的寄存器文件映射配置中的哪一个寄存器文件映射配置用于所述一组指令;以及

当执行所述一组指令时,使得所述执行单元根据所确定的寄存器文件映射配置来使用所述寄存器。

如本领域技术人员所理解的,本发明的这些方面能够并且优选地确实包括本文酌情所公开的本发明的优选和可选特征的任何一个或多个或者全部。因此,例如,要使用哪个寄存器文件映射配置的确定和使得所述执行单元使用该配置优选是按照上述的其中一种方式来进行的。

在另一优选实施方式中,要使用的寄存器文件映射是基于对当执行着色器程序时正在由执行线程进行的实际寄存器使用的分析来确定并选择的。除了或者代替确定并选择要使用的寄存器文件映射配置以外,可以是基于着色器程序将如何使用寄存器的“预测”。例如,在执行着色器程序之前,能够基于例如通过编译器对着色器程序的评估来选择寄存器文件映射配置,由此基于当正在执行着色器程序的同时对实际的寄存器使用的分析,寄存器文件映射配置然后能够(并且优选地)进行变化和/或调整(如果需要)。

因此,在优选实施方式中,正在执行着色器程序的线程对寄存器的使用被监测和/或跟踪,然后被用来确定(并且如有需要的话,设置(改变))用于执行着色器程序的后期线程或多组线程的寄存器文件映射配置。然后,这将使得寄存器文件映射配置在使用中当正在执行着色器程序时基于动态行为和寄存器使用的测量来动态地进行调整。

在这种情况下,能够使用任何适当的、合适且需要的运行时间统计和性能计数器措施来控制当正在执行着色器程序时使用的寄存器文件映射配置。(寄存器文件映射配置优选地针对正在进行处理的给定线程组保持静态(即,仅能够在各个线程组之间进行调整,而不是在针对给定线程组正在执行着色器程序时进行调整)。)

按照本发明的方式确定要使用的寄存器文件映射配置的操作能够针对部分但不是全部的例如所选择的着色器程序来进行,但是优选地针对要由图形处理单元执行的每一个着色器程序来进行。

如本领域技术人员将要理解的,本发明的图形处理单元将是整个图形处理系统的一部分,该图形处理系统将包括(例如,并且优选地)主处理器,该主处理器例如执行需要由图形处理单元进行图形处理的应用。主处理器将向图形处理单元发送合适的命令和数据,以控制该图形处理单元执行图形处理操作并且产生在主处理器上执行的应用所需要的图形处理(渲染)输出。为了促进上述过程,主处理器应当(并且优选地确实)还执行用于图形处理单元的驱动器和用于对要由图形处理单元的可编程执行单元执行的着色器程序进行编译的一个或多个编译器。

图形处理单元还可以包括存储本文中所描述的数据和/或由图形处理单元生成的输出数据,和/或存储用于执行本文中所描述的处理的软件的一个或更多个存储器和/或存储设备,和/或与这些存储器和/或存储设备进行通信。图形处理单元还可以与主微处理器进行通信,和/或与用于基于由图形处理单元生成的数据来显示图像的显示器进行通信。

图形处理单元的(多个)可编程执行单元可以,并且优选地确实,作为(图形处理流水线可以包括)任何合适且需要的图形处理着色器阶段(着色器)起作用(操作),诸如顶点着色器、几何着色器、片段着色器等。在优选实施方式中,其能够作为这些着色器中的每一个进行操作。

图形处理单元的该或者每个可编程执行单元可以包括任何合适的可编程硬件元件,诸如可编程处理电路。每个可编程处理阶段可以作为单独的电路元件被提供到处理流水线的其它可编程阶段,或者可编程处理阶段可以共享其部分或全部的可编程处理电路(然后不同地进行编程以用作所需的可编程处理阶段)。

和任何可编程处理(着色器)阶段一样,图形处理流水线还可以包含任何其它的合适且需要的处理阶段,在这些处理阶段中,图形处理流水线可以包含诸如栅格化器、早期深度(或者早期深度和模板)测试仪、后期深度(或深度和模板)测试仪、混合器、块元缓存、写出单元等。

本发明能够被用于图形处理流水线可以被用来生成的全部形式的输出,例如用于显示的帧、渲染到纹理输出等。来自图形处理的输出(例如,片段着色的数据值)优选被导出到外部(例如,主)存储器用于存储和使用,诸如被导出到显示器的帧缓存。

本发明适用于任何合适的形式或配置的图形处理器。其特别适用于基于块元的图形处理器和图形处理系统。因此在优选实施方式中,图形处理系统和图形处理流水线分别是基于块元的系统和流水线。

在特别优选的实施方式中,本发明的各种功能在生成并输出例如被写出到用于显示设备的帧缓存的经渲染的片段数据的单个图形处理平台上执行。

本发明能够在任何合适的系统,例如合适配置的基于微处理器的系统中实现。在优选实施方式中,本发明在计算机和/或基于微处理器的系统中实现。

本发明的各种功能能够以任何合适且期望的方式来执行。例如,如所期望的,本发明的功能能够在硬件或软件中实现。因此,例如,除非另有说明,本发明的各种功能元件、阶段和“手段”可以包括能够被操作为执行各种功能等的合适的处理器或多个处理器、控制器或多个控制器、功能单元、电路、处理逻辑器、微处理器装置等,例如能够被编程为以期望的方式运行的适当专用的硬件元件和/或可编程硬件元件。

这里应当注意的是,如本领域技术人员将要理解的,本发明的各种功能等可以在给定的处理器上重复和/或执行。同样地,如果需要的话,各种处理阶段可以共享处理电路等。

关于执行上述的特定功能所需的任何硬件,数据处理系统和流水线另外能够包括数据处理流水线所包括的通常的功能单元中的任何一个或更多个或者全部等。

本领域技术人员还将理解,视情况而定,本发明的全部所述的方面和实施方式都能够并且优选地确实包括本文所述的优选的和可选的特征中的任何一个或多个或者全部。

根据本发明的方法可以至少部分地利用软件,例如计算机程序,来实现。因此可见,当从其他方面来看时,本发明提供:计算机软件,当安装在数据处理装置上时,该计算机软件具体适用于执行本文所述的方法的;计算机程序元件,其包括当该程序元件在数据处理装置上运行时用于执行本文所述的方法的计算机软件代码部分;以及计算机程序,当该程序在数据处理系统上运行时,该计算机程序包括适用于执行本文所述的方法或多种方法的全部步骤的代码装置。数据处理器可以是微处理器系统、可编程FPGA(现场可编程门阵列)等。

本发明还延伸至包括如下软件的计算机软件载体,即,当该软件被用来操作图形处理器时,包括数据处理装置的渲染器或微处理器系统促进与所述数据处理装置和所述处理器、渲染器或系统的连接,以执行本发明的方法的步骤。这种计算机软件载体可以是诸如ROM芯片、CD ROM、RAM、闪速存储器或磁盘的物理存储介质,或者可以是诸如通过电线的电子信号、光学信号或例如对卫星等的无线电信号这样的信号。

将要进一步理解的是,并非本发明的方法的全部步骤都需要由计算机软件来执行,因此从更宽泛的方面来看,本发明提供用于执行本文所列出的方法的步骤中的至少一个的计算机软件和安装在计算机软件载体上的这种软件。

因此本发明可以被合适地体现为计算机程序产品,与计算机系统一起使用。这种实施可以包括要么是固定在有形非瞬时性介质上的一系列计算机可读指令,该有形非瞬时性介质例如有计算机可读介质,例如磁盘、CD-ROM、ROM、RAM、闪速存储器或硬盘。这种实施还可以包括通过有形介质或者无形地利用无线技术经由调制解调器或其它接口装置可以向计算机系统传输的一系统计算机可读指令,该有形介质包括但不限制于光学或模拟通信线路,该无线技术包括但不限制于微波、红外或其它传输技术。一系列的计算机可读指令体现本文之前所述的全部或部分的功能。

本领域技术人员将理解,这种计算机可读指令能够以许多编程语言的形式来编写,与很多计算机架构或操作系统一起使用。进一步地,这种指令可以利用当前或未来的包括但不限制于半导体、磁性的或光学的任何存储技术来存储,或者可以利用当前或未来包括但不限制于光学、红外或微波的任何通信技术来进行发送。可以想到,这种计算机程序产品可以利用另外的印刷或电子文档,例如利用计算机系统在例如系统ROM或固定磁盘上预加载的压缩打包软件,作为可去除介质进行分发,或者通过网络例如因特网或万维网从服务器或电子公告板进行分发。

附图说明

将通过仅示例的方式并参照附图描述本发明的多个优选实施方式,在附图中:

图1示出示例性计算机图形处理系统;

图2示意性地示出能够按照本发明的方式进行操作的图形处理流水线;

图3示意性地示出图形处理单元;

图4示意性地示出本发明的实施方式的第一寄存器文件映射配置;

图5示意性地示出本发明的实施方式的第二寄存器文件映射配置;

图6示意性地示出在本发明的一个实施方式中编译器的操作;

图7示意性地示出本发明的实施方式的第三寄存器文件映射配置;以及

图8示意性地示出在本发明的另一实施方式中编译器的操作。

具体实施方式

相同的参考标记在附图中合适的地方被用于相同的部件。

下面将在用于显示的计算机图形的处理的上下文中来描述本发明的多个优选实施方式。

图1示出典型的计算机图形处理系统。

应用2(诸如在主处理器1上执行的游戏)将要求图形处理操作由关联图形处理单元(图形处理流水线)3来执行。为此,该应用将生成被用于图形处理流水线3的正在主处理器1上运行的驱动器4解读的API(应用编程接口)调用,以对图形处理器3生成合适的命令以生成应用2所需的图形输出。为了促进这一过程,将响应于来自在主系统1上运行的应用2的命令向图形处理器3提供一组“命令”,用于图形输出(例如,以生成要进行显示的帧)。

图2更加详细地示出该实施方式的图形处理流水线3。

图2中所示的图形处理流水线3是基于块元的渲染器,并且将因此产生渲染输出数据阵列的块元,诸如要生成的输出帧。

(在基于块元的渲染中,渲染输出(例如要显示的帧)被划分成多个更小的子区域,通常被称为“块元”,而不是整个渲染输出(例如,如在即时模式渲染中一气呵成地有效地进行处理的帧)。每个块元(子区域)被分别(通常一个接着一个地)渲染,然后经渲染的块元(子区域)被重新组合以提供完整的渲染输出,例如用于显示的帧。在这种设置中,渲染输出通常被划分成规则大小和形状的子区域(块元)(其例如通常是正方形或长方形),但是这不是最重要的。)

如本领域中已知的,渲染输出数据阵列通常可以是用于在诸如屏幕或打印机的显示设备上显示的输出帧,但是例如还可以包括用于在后面的渲染中使用的中间数据(还被已知为“渲染到纹理(render to texture)”输出)等。

(当要显示计算机图形图像时,其通常首先被限定为一系列基元(多边形),然后所述基元被划分(被栅格化)成图形片段,接下来用于图形渲染。在正常的图形渲染操作中,渲染器将修改与每个片段相关联的(例如)颜色(红色、绿色和蓝色,RGB)和透明度(阿尔法,α)数据,使得能够正确地显示片段。一旦片段已经完全遍历了渲染器,则其关联数据值就被存储在存储器中,准备用于输出例如用于显示。)

图2示出与本实施方式的操作相关的图形处理流水线3的主要元件和流水线阶段。如本领域技术人员将要理解的,可以存在未在图2中例示的图形处理流水线的其它元件。这里还应当注意,图2仅仅是示意性的,并且例如实际上所述的功能单元和流水线阶段可以共享重要的硬件电路,即使在图2中它们被示意性地示出为单独的阶段。还将理解,如图2中所示的图形处理流水线的阶段、元件和单元等中的每个阶段、元件和单元可以根据需要来实现,并且因此将包括例如合适的电路和/或处理逻辑等,用于执行必要的操作和功能。

如图2中所示,图形处理流水线3包括多个阶段,该多个阶段包括顶点着色器20、外壳着色器21、曲面细分器22、域着色器23、几何着色器24、栅格化阶段25、早期Z(深度)和模板测试阶段26、以片段着色阶段的形式的渲染器27、后期Z(深度)和模板测试阶段28、混合阶段29、块元缓存30以及降采样和写出(多重采样分辨)阶段31。

顶点着色器20采用针对要生成的输出而限定的与顶点相关联的输入数据值等,并且对这些数据值进行处理以生成一组相应的“顶点着色的”输出数据值,以供图形处理流水线3的后续阶段使用。顶点着色例如对输入数据进行修改,以将要进行渲染的图像的照明效果考虑在内。

外壳着色器21执行对多组补丁控制点的操作并且生成已知为补丁常数的附加数据,曲面细分阶段22将几何图形细分以创建外壳的更高阶的表示,域着色器23执行对通过曲面细分阶段输出的顶点的操作(与顶点着色器相似),并且几何着色器24处理诸如三角形、点或线的全部基元。响应于向图形处理流水线3提供的命令和顶点数据,这些阶段和顶点着色器21一起有效地执行全部的必要片段前端操作,诸如转换操作和照明操作,并且执行基元设置来设置要进行渲染的基元。

图形处理流水线3的栅格化阶段25进行操作以将组成渲染输出(例如要进行显示的图像)的基元栅格化成各个图形片段以用于处理。为此,栅格化器25接收图形基元以用于渲染,将基元栅格化成采样点并且生成具有合适位置(代表合适的采样位置)的图形片段,用于对基元进行渲染。

由栅格化器生成的片段然后进一步被发送到流水线的其余部分用于处理。

早期Z/模板测试阶段26对其从栅格化器25接收的片段执行Z(深度)测试,以看看在这个阶段是否能够丢弃(剔除)任何片段。为此,早期Z/模板测试阶段26将从栅格化器25发出的片段的(与片段相关联的)深度值与已经进行渲染的片段的深度值进行比较(这些深度值被存储在作为块元缓存30的一部分的深度(Z)缓存中),以确定新片段是否将被已经进行渲染的片段排除在外。同时,执行早期模板测试。

经过片段早期Z和模板测试阶段26的片段然后被发送到片段着色阶段27。片段着色阶段27对经过早期Z和模板测试的片段执行合适的片段处理操作,以便处理片段以生成合适的经渲染的片段数据。

该片段处理可以包括任何合适的且需要的片段着色处理,诸如对片段执行片段着色器程序、向片段施加纹理、向片段施加雾化操作或其它操作等,以生成合适的片段数据。在该实施方式中,片段着色阶段27是着色器流水线的形式(可编程片段着色器)。

然后还存在“后期”片段Z和模板测试阶段28,其尤其是对经着色的片段执行流水线末端深度测试,以确定在最终的图像中实际上是否能看到经渲染的片段。该深度测试使用针对存储在块元缓存30中的Z缓存中的片段的位置的Z缓存值,以如本领域中已知的,通过将从片段着色阶段27发出的片段的(与片段相关联的)深度值与已经进行渲染的片段的深度值(如存储在深度缓存中的)进行比较,确定针对新片段的片段数据是否应当替换已经进行渲染的片段的片段数据。该后期片段深度和模板测试阶段28还对片段执行任何必要的“后期”阿尔法和/或模板测试。

如有需要,经过后期片段测试阶段28的片段然后利用已经被存储在混合器29中的块元缓存30中的片段来进行任何必要的混合操作。对片段来说必要的任何其它剩余操作,诸如抖动等(未示出),也在这个阶段执行。

最后,(经混合的)输出片段数据(值)被写入到块元缓存30,这些输出片段数据(值)能够从该块元缓存30例如被输出到帧缓存用于显示。针对输出片段的深度值也被恰当地写入块元缓存30内部的Z缓存。(块元缓存存储颜色缓存和深度缓存,所述颜色缓存和深度缓存针对这些缓存所代表的每个采样点(实质上针对正在进行处理的块元的每个采样点)分别存储合适的颜色等或者Z值。这些缓存存储代表整体渲染输出(例如,要显示的图像)的一部分(块元)的片段数据的阵列,缓存中的相应组的样本值对应于整体渲染输出的相应的像素(例如,每个2x2组的样本值可以对应于输出像素,其中4x多重采样正在被使用)。

提供块元缓存作为被定位在图形处理流水线(芯片)上(对图形处理流水线来说是本地的)的RAM的一部分。

来自块元缓存30的数据被输入到降采样(多重采样分辨)写出单元31,并且从其输出(写回)到外部存储器输出缓存,诸如显示设备的帧缓存(未示出)。(显示设备能够包括例如包括像素的阵列的显示器,诸如计算机监控器或打印机。)

降采样和写出单元31将存储在块元缓存30中的片段数据降采样成针对输出缓存(设备)的合适的分辨率(即,使得生成与输出设备的像素相对应的像素数据的阵列),以生成输出值(像素)用于输出到输出缓存。

一旦渲染输出的块元已经进行处理并且其数据被导出到主存储器(例如,被导出到主存储器中的帧缓存(未示出))用于存储,则下一个块元接着进行处理,诸如此类,直至足够的块元已经进行处理以生成全部渲染输出(例如,要显示的帧(图像))。然后重复该处理用于下一渲染输出(例如帧)等。

每个着色阶段20、21、23、24、27具有与其相关联的能够从中读取针对相应着色阶段20、21、23、24、27的数据的一组寄存器32。

针对图形处理流水线3的其它布置也将当然是可能的。

上文描述了图1中所示的图形处理系统的操作的某些特征。下面将描述根据本发明的实施方式的图1中所示的图形处理系统的操作的其它特征。

如从图2中可以看出的,图形处理流水线3包括多个可编程处理或“着色器”阶段,即顶点着色器20、外壳着色器21、域着色器23、几何着色器24和片段着色器27。这些可编程着色器阶段执行相应的着色器程序,所述着色器程序具有一个或更多个输入变量、生成多组输出变量并且通过应用来提供。

为此,应用2提供使用诸如GLSL、HLSL、OpenCL等的高级着色器可编程语言来实现的着色器程序。然后,这些着色器程序通过着色器语言编译器被转化成二进制代码,用于目标图形处理流水线3。如本领域中已知的,这可以包括创建编译器内部的程序的一个或更多个中间表示。(编译器例如可以是驱动器4的一部分,存在特殊API调用以使得该编译器运行。因此,编译器执行能够被看作是响应于由应用生成的API调用通过驱动器来完成的绘制调用准备的一部分。)

图2示意性地示出了图形处理单元3的操作阶段。

图3示出了图形处理单元3的被用来执行(并因此用作)图2中所示的图形处理流水线的各种处理操作和阶段的相应的功能单元。(在图形处理单元3中存在其它功能单元。仅为了简单起见,图3示出与按照本发明的方式的操作相关的这些功能单元。)

如图3中所示,图形处理单元3包括栅格化器40、线程产生器41、可编程执行单元42、变化内插器43、纹理映射器44、混合器45以及一组寄存器46。

线程产生器41可以进行操作以产生用于由可编程执行单元42执行的执行线程,例如用于其从栅格化器40接收的片段。

可编程执行单元42进行操作以执行着色器程序以进行图形处理流水线的着色器操作,诸如外壳着色器、顶点着色器和片段着色器。为此,可编程执行单元42从线程产生器41接收执行线程并且执行针对这些执行线程的相关着色器程序。

作为该处理的一部分,并且如图3中所示,可编程执行单元42能够调用变化内插器43、纹理映射器44和混合器45来进行特定图形处理操作。为了,可编程执行单元将例如响应于着色器程序中的其正在执行的特定指令,将合适的消息发送到相关加速器(并且从其接收合适的响应)。

变化内插器43进行操作以在图形基元上内插值,并且作为该操作的一部分,经常产生纹理坐标以用于对图形纹理进行采样。

纹理映射器44进行操作以利用例如由变化内插器43生成的纹理坐标来对图形纹理进行采样,并且从其产生经过滤的纹理样本结果(然后纹理映射器44能够将该纹理样本结果返回至可编程执行单元42,以供例如当对采样点进行着色时使用)。

混合器45进行操作以将例如由可编程执行单元42生成的片段着色器结果与之前生成的片段着色器结果(诸如已经被存储在块元缓存和/或帧缓存中的结果)进行混合。

如上所述,可编程执行单元42将处理并执行要针对其从线程产生器41接收的执行线程来执行的给定着色器程序,以进行图形处理操作。作为该操作的一部分,并且如图3中所示,执行线程将从相应寄存器46读取数据并且向相应寄存器46写入数据。

下面将参照图4至图7描述用于将执行线程映射到寄存器46的优选实施方式。图4和图5示出在本发明的实施方式中使用的两个寄存器文件映射配置。图6和图7示出设置当正在执行着色器程序时将要使用的寄存器文件映射配置的编译器的操作的实施方式。

在这些实施方式中,假设可编程执行单元42执行四个线程一组的多组线程中的执行线程。其他结构当然将是可能的。

如图4的(a)中所示,在该实施方式中,寄存器46被划分成两个子组(sub-bank),一个组用于偶数寄存器50,另一个组用于奇数寄存器51。在当前实施方式中,每个寄存器都能够存储32位数据值。

图4示出用于并且被制作得更加优化用于与32位数据值一起使用的第一预定义的寄存器文件映射配置。

在该配置中,如图4中所示,每个寄存器组50、51的寄存器被划分成四个子集,每一个子集用于将作为可编程执行单元42将进行处理的四线程线程组的一部分的每一个线程。(在图4和图5中,注释tjri表示线程j的寄存器i(例如,t0r1表示线程0的寄存器1)。

从图4的(a)中可以看出,利用这个寄存器文件映射配置,线程组的四个线程能够通过访问寄存器组中的仅一个寄存器组来并行地进行到寄存器的32位访问。

图4的(b)和(c)示出了该访问,并且例示了用于访问线程t0、t1、t2和t3的32位寄存器r1、r0所需要的数据。

图4的(d)为了比较目的示出了使用该寄存器文件映射配置将如何访问64位数据值。在这种情况下,使用奇数和偶数寄存器(例如,r0和r1)来存储64位数据值以形成64位寄存器。然后这具有如下影响:为了使用图4的寄存器文件映射配置来访问针对线程的64位数据值,将需要并行地访问寄存器组50、51两者(如图4的(d)中所示)。

图5示出该实施方式中使用的第二寄存器文件映射配置,与图4的寄存器文件映射配置相反,该第二寄存器文件映射配置用于(并且被制作得更加优化用于)访问64位数据值。

图5的(a)为了比较目的再次示出64位数据值将被存储在全部两个寄存器组中的图4中所示的布置。图5的(b)则示出被优化用于与64位数据值一起使用(用于64位模式(cfg64=1))的第二寄存器文件映射配置。

在该配置中,如图5的(b)中所示,一个寄存器组50的字[127:64]实际上与另一寄存器组51的字[63:0]相交叉。这意味着需要针对正在执行的给定的64位线程来访问寄存器组中的仅一个寄存器组,而不是需要访问两个组(如将是利用图4中所示的寄存器文件映射配置的情况)。这使得对寄存器组的访问更加节能高效。

在图5的(c)和(d)中对此进行了例示。图5的(c)示出针对线程t0、t1的对64位寄存器(r1、r0)的访问,图5的(d)示出针对线程t2、t3的相应访问。如可以看出的,在每种情况下,针对正在执行的两个64位线程来访问仅一个组。

图5的(e)为了比较目的示出了32位线程将如何使用图5的寄存器文件映射配置来访问寄存器。在这种情况下,如图5的(e)中所示,对于当使用32位指令进行操作时要访问全部数据值的给定线程组,将需要访问两个寄存器组。

因此,图4示出更加适合用于32位数据访问的第一寄存器文件映射配置,而图5示出更加适合用于64位数据值访问的寄存器文件映射配置。本发明的实施方式进行操作以在任何给定时间选择要使用这两个寄存器文件映射配置中的哪一种,以便提高当正在执行着色器程序时寄存器使用的能效。

图6示出用于选择要使用哪个寄存器文件映射配置的第一实施方式。在该实施方式中,作为整体,针对着色器程序来选择要使用的寄存器文件映射。

如图6中所示,编译器将对着色器程序进行编译(步骤60),并且作为该处理的一部分将考虑着色器程序将如何使用寄存器(步骤61)。在该实施方式中,为实现上述步骤,编译器简单地确定在着色器程序中是否存在更多的32位还是64位指令。其他结构当然将是可能的。

然后,编译器基于其对于着色器程序对寄存器的使用的评估来选择寄存器文件映射配置,以用于着色器程序(步骤62)。在该实施方式中,如果编译器确定着色器程序具有更多的32位指令,则其选择32位寄存器文件映射配置(即,图4中所示的配置)以用于着色器程序,反之亦然。

然后,编译器设置合适的状态信息,诸如针对着色器程序的GPU状态和/或渲染状态,以指示当执行着色器程序时应当使用哪个寄存器文件映射配置。最后,经编译的程序和状态信息被输出到图形处理单元(步骤64)。

响应于此,当执行着色器程序时,状态信息将使得由可编程执行单元执行的线程根据所选择的寄存器文件映射配置来使用寄存器。

图4和图5整体上示出其中针对寄存器46来设置寄存器文件映射配置的布置。然而,将有可能使用图4和图5中所示的配置中的不同配置用于寄存器文件的不同部分。例如,第一子集的寄存器(例如寄存器r0-r3将使用32位模式配置,其余寄存器使用64位模式配置(反之亦然)。在着色器程序包含32位操作和64位操作的混合的情况下这将是有益的,因为这然后可以允许使用“64位”寄存器子集以保持fp64临时变量,其余寄存器则优先被用来保持fp16/32临时变量、存储器地址和其它非fp64数据。

图7示出这种“划分的”寄存器组布置80的示例。在该布置中,第一子集的寄存器81使用32位模式配置,第二子集的寄存器82使用64位模式配置)。第一组寄存器81包含寄存器r0至r3,第二组寄存器82包含寄存器r4至r7。对于64位模式配置,布置与32位配置不同的子寄存器83、84被着色成灰色。

图8示出其中寄存器组中的不同子集的寄存器使用图4和图5中的不同配置的编译器操作的实施方式。

如图8中所示,再一次编译器将对着色器程序进行编译(步骤70),但是作为该处理的一部分将考虑将通过着色器程序中的每个指令进行的寄存器使用(步骤71)。为此,编译器将考虑讨论中的指令是否执行64位操作(使用64位数据值)或者不执行64位操作(例如,执行16位或32位操作)。

然后,编译器将设置指令以使用具有如下配置的寄存器,即,该配置适于该指令(对该指令使用的数据值)执行的操作(步骤72)。因此,例如,在确定指令要执行64位操作的情况下,编译器设置该指令要使用的针对该指令的寄存器将(优先地)是根据64位寄存器文件映射配置进行配置的寄存器。

然后,针对每个指令重复该过程(步骤73),然后输出最终经编译的程序(步骤74)。

然后,当可编程执行单元42执行着色器程序时,随着每个指令被执行,该指令将使用已经被设置为由编译器使用的寄存器。

申请人已经意识到,可以是如下的情况:在这些布置中,取决于着色器程序,可能存在不足够的寄存器以将优选寄存器分配给着色器程序中的全部指令。在这种情况下,一旦已经使用优选配置的全部寄存器,将优先使用这些寄存器的任何进一步指令都代替地被配置使用其它寄存器。这应当还具有如下优点:对于至少部分的指令来说,将执行更加高效的寄存器访问。

如有需要,将可能对上述实施方式进行各种替代修改和/或添加。例如,要使用的寄存器配置能够针对各个组的指令和/或要执行的各个组的线程组进行设置,而不是整体上针对着色器程序进行设置。

另外,连同或者代替编译器确定要使用哪个寄存器文件映射配置,还将可能跟踪当正在执行着色器程序时寄存器的使用,然后使用该信息来设置寄存器文件映射配置以用于正在执行着色器程序的后期的线程或线程组。在这方面能够使用任何合适的运行时间统计。

从上文中可以看出,本发明在其优选实施方式中至少有利于当执行着色器程序时对寄存器的更加节能高效的访问。在本发明的优选实施方式中,至少通过基于着色器程序、线程组和/或指令将进行的对寄存器使用的评估而选择合适的寄存器文件映射配置以用于着色器程序、线程组和/或指令来实现上述目的。

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