在多处理单元中使用片上存储器的数据处理的制作方法

文档序号:6361221阅读:236来源:国知局
专利名称:在多处理单元中使用片上存储器的数据处理的制作方法
技术领域
本发明涉及提升处理器的数据处理性能。
背景技术
包括多处理单元的处理器通常应用在具有较大数量的数据元素的并行处理过程中。例如,包括多个单指令多数据(SIMD: single instruction multiple data)处理单兀的图形处理器(GPU:graphic processor)能够并行地处理大量的图形数据。在大多数情况下,数据元素由一系列单独的线程来处理直到获得了最终输出。例如,在一个图形处理器中,包括顶点着色器、几何着色器以及像素着色器的不同类型的线程序列可以按顺序在数据元素组上进行操作直到用于渲染显示的最终输出已经准备好。在不同阶段采用多个单独类型的线程进行数据元素的处理激活了流水线处理,并因此有利于提升数据的输出处理量。处理数据元素组的每一个单独的线程序列从共享的存储器中获得其输入并将其输出写入到共享存储器中,在该共享存储器中刚写入的数据可以由随后的线程进行读取。通常来说,在共享存储器中的存储器访问操作会消耗大量的时钟周期。当同步线程的数量增加时,基于存储器访问的延迟也相应地增加。在具有多个单独处理单元来并行地执行多个线程的传统处理器中,存储器访问延迟已经使得处理器的整个处理速度都显著地下降。因此,需要这样的系统和方法,其通过减少由处理数据元素组的程序序列所进行的存储器访问而消耗的时间以提升具有多个处理单元的处理器的数据处理性能。

发明内容
本发明公开了一些在多个数据处理单元中采用片上(on-chip)本地存储器以提升处理器的数据处理性能的装置和方法。根据一个实施例,利用多个处理单元对处理器中的数据元素进行处理的方法包括在每一个所述处理单元中运行(launching)具有第一类型线程的第一波阵面(wavefront),其后是具有第二类型线程的第二波阵面(wavefront),其中第一波阵面读取来自片外(off-chip)共享存储器的数据元素的部分以作为输入并生成第一输出;将第一输出写入到相应的处理单元的片上本地存储器中;并将由第二波阵面生成的第二输出写入到片上本地存储器中,其中到第二波阵面的输入包括来自第一输出的第一多个数据元素。在另一个实施例中提供一个系统,包括包括多个处理单元的处理器,每一个处理单元包括片上本地存储器;耦合到该处理单元并被配置为存储多个输入数据单元的片外共享存储器;波阵面调度模块;以及波阵面执行模块。该波阵面调度模块配置为在每一个所述处理单元中运行(launching)具有第一类型线程的第一波阵面(wavefront),其后是具有第二类型线程的第二波阵面(wavefront),其中第一波阵面被配置为读取来自片外(off-chip)共享存储器的数据元素的一部分。将所述波阵面执行模块配置为将第一输出写入到相应的处理单元的片上本地存储器中;并将由第二波阵面生成的第二输出写入到片上本地存储器中,其中到第二波阵面的输入包括来自第一输出的第一多个数据元素。然而另一个实施例是包括计算机可读媒介的有形计算机程序产品,该计算机可读媒介具有记录在其上的计算机程序逻辑,以便使得包括多个处理单元的处理器以在每一个所述处理单元中运行(launching)具有第一类型线程的第一波阵面(wavefront),其后是具有第二类型线程的第二波阵面(wavefront),其中第一波阵面读取来自片外(off-chip)共享存储器的数据元素的一部分以作为输入并生成第一输出;将第一输出写入到相应的处理单元的片上本地存储器中;并将由第二波阵面生成的第二输出写入到片上本地存储器中,其中到第二波阵面的输入包括来自第一输出的第一多个数据元素。下面参照附图详细说明本发明进一步的实施例、特征和优点,以及本发明各实施例的结构及操作。


包含于说明书中并构成其部分的附图与上面的概括说明以及下面给出的实施例的详细说明一起阐释本发明的实施例,用于解释本发明的原理。在附图中图1显示了根据本发明的一个实施例的数据处理设备;图2显示了根据本发明的一个实施例在具有多个处理单元的处理器中进行数据处理的示例性的方法;图3显示了根据本发明的一个实施例,在具有多个处理单元的处理器上执行第一波阵面的示例性方法;图4显示了根据本发明的一个实施例,在具有多个处理单元的处理器上执行第二波阵面的示例性方法;图5显示了根据本发明的一个实施例,用于确定线程波阵面分配的方法。
具体实施例方式尽管本文用特定应用的示例性实施例对本发明进行了描述,但应该了解到本发明并不这些实施例为限。得到本文所提供的教导的本领域技术人员会认识到本发明范围内的其他修改、应用和实施方式以及本发明有显著实用性的其他领域。本发明的实施例可用于任何计算机系统或者计算机设备中,其中的多个处理单元能同步地访问共享存储器。例如,但不限于此,本发明的实施例可包括计算机、游戏平台、娱乐平台、个人数字助理,移动计算机设备,电视以及视频平台。大多数的现代计算机系统能够进行多处理操作,例如,其具有多处理器,例如但不限于,多中央处理单兀(CPU:central processor units)、图形处理单兀(GPU:graphicprocessor units)、以及其他控制器,诸如存储器控制器和/或直接存储器访问(DMA:direct memory access)控制器,其能够从处理器上卸载一些处理。同时,在许多图形处理设备中,例如可通过并行地处理多个数据流来进行大量的并行处理。这样的多处理和并行处理,尽管显著地增加了系统的效率和速度,同时也产生了包括基于竞争的很多问题,即,多个设备和/或进程试图同时访问或者使用相同的系统资源。例如,多个设备和/或进程需要访问共享存储器以执行它们的操作。然而,由于共享存储器的接口数量可能并没有足够到能够支持所有的并行访问请求,这样冲突就会产生并且需要对共享存储器进行访问以继续其处理的一个或多个系统设备和/或进程则被延迟。在图形处理设备中,不同类型的进程,例如顶点着色器,几何着色器,以及像素着色器需要访问存储器以对存储在存储器中的图形对象(即,顶点数据,像素数据)进行读取、写入、操控和/或处理。例如,每一个着色器在其处理周期的读取输入和写入输出阶段都需要访问共享存储器。包含顶点着色器、几何着色器和像素着色器的图形流水线通过并行地使每一种着色器在任何给定时间内处理位于不同处理阶段的数据单元组,从而使得系统免于受到存储器访问延迟的影响。当图形流水线的一部分遇到访问存储器中数据的延迟加剧时,其将会导致系统操作的整体下降和/或控制流水线的复杂度的增加,这样的话则会有足够的并行处理能力来隐藏存储器访问的延迟。在具有多个处理单元的设备中,例如,多个单指令多数据(SMD:singleinstruction multiple data)处理单元或多个其他的算术逻辑单元(ALU),每一个单元能够同时执行多个线程,由于在每个处理设备中多个处理设备和多个线程访问同时访问共享存储器大大的增加,因此冲突延迟可能会加重。例如,在具有多个SMD处理单元的图形处理设备中,像素数据组由“线程群组”序列来处理。为每一个处理单元分配波阵面线程。该“波阵面”线程是来自线程群组中的一个或多个线程。由于在一个波阵面中同时的线程访问请求,以及由于在其他处理单元中执行的波阵面,因此存储器访问的冲突可能会增加。本发明的实施例利用各自处理单元相应的本地片上存储器来存储不同线程的输出,并且该输出作为随后线程的输入,这样则减少了到片外存储器的去/来的通信量。由于包括成本和芯片布局等原因,片上本地存储器相对于片外共享存储器来说尺寸相对小一些。因此,片上本地存储器的有效使用则是必须的。本发明的实施例基于多个因素对处理器进行配置,从而在多个处理单元中分配相应的线程波,上述多个因素例如包括,在各自的处理单元处理的数据元素以及在每一个处理单元中的片上本地存储器的可用性。本发明的实施例使得连续的线程能在处理单元中执行以从片上存储器而不是从片外存储器中读取输入以及向片上存储器而不是向片外存储器写入输出。通过减少到片外存储器的去/来的通信量,本发明的实施例提高了系统的效率和速度,并通过利用更短的流水线来降低系统的复杂度。图1显示了根据本发明的一个实施例的计算机系统100。计算机系统100包括控制处理器101、图形处理设备102、共享存储器103、以及通信架构104。其他不同的组件,诸如,显示器、存储器控制器、设备控制器以及类似的组件,也可以包含在计算机系统100中。控制处理器101可包括一个或多个处理器,诸如中央处理单元(CPU)、现场可编程门阵列((FPGA:field programmable gate arrays)、专用集成电路(ASIC:application specificintegrated circuit)、数字信号处理器(DSP:digital signal processor)或者类似单兀。控制处理器101控制计算机系统100的整体操作。共享存储器103包括一个或多个类似的存储单元,例如随机访问存储器(RAM:random access memory)或者动态随机访问存储器(DRAM:dynamic random accessmemory)0显示数据,尤其是像素数据但有时也包括控制数据,存储在共享存储器103中。共享存储器103,在例如这里的图形处理器的背景中,可包括帧缓冲区,与帧相关的数据保持在其中。可通过一个或多个存储器控制器(未显示)来调整到共享存储器103的访问。可以将或者是由计算机系统100内部生成的显示数据或者是利用类似视频回放设备这样的外部设备输入到计算机系统100中的显示数据存储到共享存储器103中。存储在共享存储器103中的显示数据由图像处理设备102中的组件来访问,该图像处理设备102操控和/或处理上述显示数据,然后将已经被操控和/或被处理的显示数据传送到例如显示器等其他设备(未显示)。显示器可包括液晶显示器(LCD: liquid crystal display),阴极射线管显示器(CRT:cathode ray tube)或者任何其他类型的显示设备。在本发明的一些实施例中,显示器以及显示器所要求的一些其他组件,例如,显示控制器,可位于计算机系统100的外部。基础通信设施104包括一个或多个诸如外围组件互联延伸(PC1-E:PeripheralComponent Interconnect Extended)、以太网(Ethernet)、火线(firewire)、通用串行接口(USB:Universal Serial Bus)等设备互联器。基础通信设施101也可包括一个或多个数据传输标准,例如但不限于,嵌入式DisplayPort (eDP: embedded DisplayPort),低电压显不标准(LVDS: low voltage display standard),数字视频接口(DV1:Digital VideoInterface),或者高清晰度多媒体接口(HDM1:High Definition Multimedia Interface),来连接图像处理设备102到显示器。根据本发明的一个实施例,图形处理设备102包括多个处理单元,其中每一个处理单元都有其自身的本地存储器存储(例如,片上本地存储器)。图形处理设备102也包括逻辑电路来部署并行地执行到多个处理单元的序列线程,使得往来于存储器103之间的通信量显著地减少。根据一个实施例,图形处理设备102,可以是图形处理单元(GPU:graphic processing unit),通用图形处理单兀(GPGPU:general purpose graphicsprocessing unit),或者其他处理设备。根据一个实施例,图形处理设备102包括命令处理器105、着色器内核(shader core) 106、顶点群组器和镶嵌器(VGT:vertex grouper andtesselator)、序列发生器(SQ: sequencer) 108、值染流水线内插器(SP1: shader pipelineinterpolator)、参数缓存110(也可以叫做着色器输出,SX)、图形处理设备内部互联器113、波阵面(wavefront)分配模块130、以及波阵面(wavefront)执行模块132。其他组件,例如,扫描变换器、存储器缓存、图元汇编器、通过在着色器内核106内执行的进程来调整到共享存储器103的访问的存储器控制器、用来调整由着色器内核106处理的数据的渲染和显示的显示器控制器,尽管没有显示在图1中,也可以包括在图形处理设备102中。命令处理器105可从控制处理器101接收在图形处理设备102上执行的命令。命令处理器105用来解释从控制处理器101接收的指令并且发出相应的指令到图形处理设备102的执行组件,例如,组件106,107,108,和109。例如,一旦接收至在显示器上渲染特定图像的指令,命令处理器103发出一个或多个指令以使得组件106,107,108,和109来对该图像进行渲染。在一个实施例中,命令处理器可发出指令来启动线程群组序列,例如包括顶点着色器、几何着色器、和像素着色器的线程群组序列,来对顶点组进行处理从而对图像进行渲染。例如,可以将来自系统存储器103的顶点数带入到可由处理单元访问的通用寄存器中,然后使用着色器内核106中的着色器序列来处理该顶点数据。着色器内核106包括被设置成执行,例如着色器程序(举例来说,顶点着色器,几何着色器,和像素着色器)以及其他计算密集型程序等指令的多个处理单元。在着色器内核106中的每一个处理单元112被设置成并行地执行多个线程,被叫做波阵面(wavefront)。波阵面(wavefront)的最大尺寸是可配置的。将每一个处理单元112耦合到片上本地存储器113。该片上本地存储器可以是任何类型动态存储器,例如静态随机访问存储器(SRAM: static random access memory)以及嵌入式动态随机访问存储器(EDRAM: embeddeddynamic random access memory),同时基于成本和性能的考量来确定该存储器的尺寸和性能。在一个实施例中,将每一个处理单元113配置为各自处理单元的私有存储器。由执行在处理单元中的线程到片上本地存储器的访问则会有明显减少的冲突,因为根据本发明的一个实施例,只有执行在各自处理单元中的线程才访问片上本地存储器。VGT107执行下列主要任务它从存储器中提取顶点索引,执行诸如确定哪一个顶点已经被处理则这样的该顶点不需要再次被处理之类的顶点索引再利用的判定,将四图元和多边形图元转换为三角形图元(primitives),并且计算图元曲面细分的细分因子。在本发明的一个实施例中,VGT也可以为每一个线程的各自波阵面(wavefront)提供到片上本地存储器中的偏移量,同时也可以对来自不同着色器的每一个顶点和/或图元输出定位到哪一个片上本地存储器上进行追踪。SQ108从VGT107接收顶点向量数据并且从扫描转换器接收像素向量数据。SQ108可以是SPI109、着色器内核106以及着色器输出(export) 110的主控制器。SQ108对顶点向量以及像素向量的操作、顶点和像素着色器输入数据的管理、输出资源的存储器分配、多SMD和资源类型的线程仲裁、着色处理器的控制流和ALU执行、着色器和常量寻址以及其他控制功能进行管理。SPI109包括输入分段存储以及再处理逻辑以确定并将输入数据装载到着色器内核106中的处理单元中。为了生成每个像素的数据,多个内插器,例如,对每一个基本图元的顶点数据用扫描转换器提供的重心坐标进行插值运算以通过本领域公知的形式生成像素着色器的每一像素的数据。在本发明的一个实施例中,SPI也可以确定波阵面(wavefront)的尺寸并且其中的每一个波阵面(wavefront)被分配用来执行。SXllO是用来保存包括顶点参数的数据的片上缓存器。根据一个实施例,在将顶点着色器和/或像素着色器的输出结果输出到帧缓冲器或其他片外存储器之前,可将上述输出结果存储在SX中。根据本发明的一个实施例,可将波阵面(wavefront)分配模块130配置为将波阵面(wavefront)线程序列分配到处理单元112中。例如,波阵面(wavefront)分配模块130可包括在每一个处理单元的本地存储器中确定存储器是否可用的逻辑电路,确定分配到每一个处理单元的线程波阵面(wavefront)序列的逻辑电路,以及确定分配到每一个处理单元的波阵面(wavefront)的尺寸的逻辑电路。根据本发明的一个实施例,波阵面(wavefront)执行模块132可配置为执行在多个处理单元112中的每一个波阵面(wavefront)的逻辑。例如,波阵面(wavefront)执行模块132包括在处理单元112中执行顶点着色器、几何着色器和像素着色器的不同波阵面(wavefront)的逻辑电路,以及将来自各自片上本地存储器113中每个着色器的中间结果进行存储以提高图形处理流水线的整体处理速度的逻辑电路。数据放大模块133包括放大或衰减(deamplify)输入数据元素的逻辑电路,其用于生成比输入数据更大的输出数据元素集。根据一个实施例,数据放大模块133包括几何放大逻辑电路。通常来说,数据放大指的是从相对简单的输入数据集生成复杂的数据集。通过数据放大可使得输出数据集相对于输入数据集具有更多数量、更少数量或者相同数量的数据元素。
根据本发明的一个实施例,着色程序134包括第一、第二和第三着色程序。处理单元112执行波阵面(wavefront)序列,其中每一个波阵面(wavefront)包括多个第一、第二和第三着色程序。根据本发明的一个实施例,第一着色程序包括顶点着色器,第二着色程序包括几何着色器(GS: geometry shader),同时第三着色程序包括像素着色器,计算着色器或其他类似着色器。顶点着色器(VS:vertex shaders)读取顶点数据,处理该数据并将结果输出到存储器中。上述处理并没有引入新的图元。当几何着色器运行时,顶点着色器也可作为一种输出着色器(ES:Export shader)。顶点着色器可激活获取子例程(FS:Fetch Subroutine),该子例程是一个特殊的全局程序,其基于执行的目的来获取处理的顶点数据来作为顶点程序的一部分。在传统的系统中,根据几何着色器是否激活,将VS输出或者与系统存储器中的缓存器相关,或者与参数缓存和位置缓冲器相关。在本发明的实施例中,VS的输出与处理单元的片上本地存储器相关,其中在该处理单元中执行GS。几何着色器(GS:Geometry Shaders)通常从VS输出中读取图元,并且对每一个输入图元写入一个或多个图元以作为输出图元。在传统的系统中,当GS运行时,它需要直接存储器访问(DMA:Direct Memory Access)复制程序处于激活状态从而来实现到片外系统存储器的读取/写入。在传统的系统中,GS可同时从VS生成的片外存储器缓冲器中读取多个顶点数据,并且GS可输出可变数量的图元到第二存储器缓冲器中。根据本发明的实施例,GS被配置为读取其输入并将其输入写入到处理单元的片上本地存储器中,其中在该处理单元中执行GS。在传统的系统中,像素着色器(PS:Pixel shader)或片段着色器从多个位置处读取输入,该多个位置例如包括,参数缓存、与参数缓存相关的位置缓冲器、系统存储器以及VGT0 PS处理单个像素的四边形(排列在2*2队列中的四个像素数据元素),并将输出写入到一个或多个可包括一个或多个帧缓冲器的存储器缓冲器中。在本发明的一个实施例中,PS被配置为读取由处理单元的片上本地存储器中的GS生成并存储的数据作为输入,其中在该处理单元中执行GS。处理逻辑指定模块130-134可米用编程语目,例如C、C++或者汇编语目来实现。在另一个实施例中,一个或多个130-134的逻辑指令可被指定在硬件描述语言如Verilog、RTL以及网表中,从而通过掩膜/光掩膜的生成来生成此处所描述本发明的硬件设备的实施方式,最终实现对制造进程的配置。这一处理逻辑和/或逻辑指令可被布置在任何已知的计算机可读介质上,包括磁盘、光盘(例如⑶-ROM,DVD-ROM)、闪存以及其他类似介质。图2显示了根据本发明的一个实施例,在包括多个处理单元的处理器中处理数据的流程200。根据本发明的一个实施例,线程波阵面(wavefront)序列对数据进行处理,其中到线程序列的输入从片外系统存储器中读取同时将线程序列的输出存储到片外存储器中,但是将中间结果存储到与各自处理单元相关的片上本地存储器中。在步骤202中,确定在每一个处理单元中能够处理的输入数据元素的数量。根据一个实施例,对输入数据以及着色程序进行分析以确定处理输入数据所需要的存储器尺寸。例如,可以确定每一个第一类型线程(例如,顶点着色器)的输出的尺寸以及每一个第二类型线程(例如,几何着色器)的输出的尺寸。例如,输入数据元素可以是用于渲染图像的顶点数据。根据一个实施例,顶点着色器的处理并不生成新的数据元素,因此顶点着色器的输出与输入具有相同的尺寸。根据一个实施例,几何着色器可执行几何放大,导致输入数据元素的复用从而生成的输出数据与输入数据相比尺寸具有显著的增加。几何放大也可导致输出数据与输入数据相比尺寸具有显著地减小或者具有相同的尺寸。根据一个实施例,VGT确定每一个输入顶点由GS生成多少个输出顶点。在多个处理单元中的每一个能够处理的输入顶点数据的最大数量可至少部分地基于片上本地存储器的尺寸以及用来存储多个第一和第二类型线程的输出的存储器的尺寸来确定。在步骤204中,进行波阵面(wavefront)配置。根据一个实施例,基于在每一个处理单元的片上本地存储器中存储第一和第二类型线程的输出所需要的存储器尺寸,可以确定每一个类型的线程的最大线程数量。例如,处理多个输入数据元素的顶点着色器线程最大数量、几何着色器线程的最大数量以及像素着色器的最大数量可基于步骤202中确定所需要的存储器尺寸来确定。根据一个实施例,SPI确定将哪一个顶点,进而哪一个线程分配给哪一个处理单元来处理。在步骤206中,将各自的第一波阵面(wavefront)分配给处理单元。第一波阵面(wavefront)包括第一类型的线程。根据一个实施例,第一波阵面(wavefront)包括多个顶点着色器。为每一第一波阵面(wavefront)提供一个基础地址来将其输出写入到片上本地存储器中。根据一个实施例,SPI为每一第一波阵面(wavefront)提供具有基础地址的SQ。在一个实施例中,VGT或者其他逻辑组件可为波阵面(wavefront)中的每一个线程提供偏移值,通过该偏移值在片上本地存储器中进行读取或写入。在步骤208中,每一个第一波阵面(wavefront)从片外存储器中读取其输入。根据一个实施例,每个第一波阵面(wavefront)通过存储器控制器来访问系统存储器以获取诸如顶点数据之类的数据来进行处理。由每个第一波阵面(wavefront)处理的顶点数据已经被预先标识,并且该数据在存储器中的地址也被提供给例如在VGT中的各自的第一波阵面(wavefront)。而基于上面描述的冲突问题,对系统存储器的访问以及从系统存储器中读取数据元素则可能会消耗相对大量的时钟周期。在各自的第一波阵面中的每个线程确定基础地址,其中每个线程从该基础地址开始来读取来自片上本地存储器的输入顶点数据。每个线程的各自的基础地址例如可基于标识各自波阵面中的线程的顺序线程标识符、表示由线程输入所占用的存储器空间的步骤尺寸、以及分配给该第一波阵面(wavefront)的输入顶点块的基础地址来计算。在步骤210中,在各自的处理单元中执行每一个第一波阵面(wavefront)。根据一个实施例,在步骤210中进行顶点着色器的处理。在步骤210中,第一波阵面(wavefront)中的每一线程分别计算其到片上本地存储器中的基础输出地址。每一个线程的基础输出地址例如可基于标识各自波阵面(wavefront)中的线程的顺序线程标识符、各自波阵面的基础输出地址、以及表示每一线程的存储器空间的步骤尺寸来计算。在另一个实施例中,第一波阵面(wavefront)中每一线程基于对应的第一波阵面(wavefront)的基础输出地址以及当线程被分配时提供给该线程的偏移量来计算其输出基础地址。在步骤212中,将每一第一波阵面(wavefront)的输出写入到各自的片上本地存储器中。根据一个实施例,将每一各自第一波阵面(wavefront)中的每一线程的输出写入到各自的片上本地存储器中。波阵面(wavefront)中的每一个线程可将其输出写入到步骤210中确定的各自输出地址中。
在步骤214中,确定各自第一波阵面(wavefront)的完成。根据一个实施例,第一波阵面(wavefront)的每一个线程在片上本地存储器、系统存储器、通用寄存器中设置标志,或者以任何其他方式插入信号从而来指示系统的其他一个或多个组件该线程的处理已经完成。指示已由第一波阵面(wavefront)完成的标志位和/或信号可由系统的组件进行监控从而向其他线程波阵面(wavefront)提供到第一波阵面(wavefront)输出的访问。在步骤216中,对第二波阵面(wavefront)进行分配。应该注意的是,尽管在图2中,步骤216是跟在214后面的,但在其他实施例中,步骤216也可以在步骤214之前执行。例如,在处理单元的流水线线程波阵面(wavefront)中,在一个或多个之前分配的波阵面(wavefront)完成之前,就可以分配线程波阵面(wavefront)。第二波阵面(wavefront)包括第二类型的线程。根据一个实施例,第二波阵面(wavefront)包括多个几何着色器线程。给每一个第二波阵面(wavefront)提供一个基础地址来从片上本地存储器中读取其输入数据,同时提供一个基础地址来将其输出写入到片上本地存储器中。根据一个实施例,对每一个第二波阵面(wavefront)来说,SPI提供在本地存储器中具有基础地址的SQ以分别从该基础地址读取输入以及将输出写入到其中。根据数据的请求以及已经被分配给处理单元的第一波阵面(wavefront), SPI也能追踪每一个线程波阵面(wavefront)的波标识符并保证各自的第二波阵面(wavefront)被分配给该处理单元。VGT追踪顶点数据以及被分配各自顶点的处理单元。同时VGT也追踪顶点中的连接关系,这样的话,几何着色器线程可提供对应它们各自图元的所有顶点。在步骤218中,每一第二波阵面(wavefront)从片上本地存储器中读取其输入。对各自处理单元的本地片上存储器的访问相对于对系统存储器的访问要快一些。在各自第二波阵面(wavefront)中的每一种类型确定基础地址,每一波阵面从该基础地址读取来自本地片上存储器的输入数据。每一个线程各自的基础地址例如可基于标识各自波阵面(wavefront)中的线程的顺序线程标识符、表示一个线程输入所占用的存储器空间的步骤尺寸以及分配给该第二波阵面(wavefront)的输入顶点块的基础地址来计算。在步骤220中,在各自的处理单元中执行每一第二波阵面(wavefront)。根据一个实施例,在步骤220中进行几何着色器的处理。在步骤220中,在第二波阵面(wavefront)中的每一个单独线程可以计算其到片上本地存储器中的基础输出地址。例如,每一线程的基础输出地址可基于标识各自波阵面(wavefront)中的线程的顺序线程标识符、各自波阵面(wavefront)的基础输出地址以及表示每一个线程的存储空间的步骤尺寸来计算。在另一个实施例中,基于相应的第二波阵面(wavefront)的基础输出地址以及当线程被分配时所提供的偏移值,第二波阵面(wavefront)中的每一个线程可计算其输出基础地址。在步骤222中,由第二波阵面(wavefront)的每一个线程所读取的输入数据元素被放大。根据一个实施例,几何着色器线程的每一个执行上述处理从而实现几何放大。在步骤224中,将每一第二波阵面(wavefront)的输出写入到各自的片上本地存储器中。根据一个实施例,将每一个各自第二波阵面(wavefront)中的每一个线程的输出写入到各自的片上本地存储器中。波阵面(wavefront)中的每一个线程可将它的输出写入至IJ步骤216中确定的各自的输出地址。在步骤226中,确定各自第二波阵面(wavefront)的完成。根据一个实施例,第二波阵面(wavefront)中的每一个线程可在片上本地存储器、系统存储器以及通用寄存器中设置标志或者以其他任何方式确定一个信号以指示系统中的其他一个或多个组件该线程已经完成了它的处理。指示第二波阵面(wavefront)的处理已经完成的标志和/或信号可以由系统的其他组件来监控从而提供到第二波阵面(wavefront)的输出的访问到其他线程波阵面(wavefront)。一旦第二波阵面(wavefront)的完成,在一个实施例中,由相应第一波阵面(wavefront)的输出所占用的片上本地存储器可释放并变为可用空间。在步骤228中,对第三波阵面(wavefront)进行分配。第三波阵面(wavefront)包括第三类型的线程。根据一个实施例,第三波阵面(wavefront)包括多个像素着色器线程。为每一第三波阵面(wavefront)提供一个基础地址以从片上本地存储器中读取其输入。根据一个实施例,对每一第三波阵面(wavefront)来说,SPI提供在本地存储器中具有基础地址的SQ以分别从该基础地址读取输入以及将输出写入其中。根据数据的请求以及已经被分配给处理单元的第三波阵面(wavefront), SPI也能追踪每一个线程波阵面(wavefront)的波标识符以保证各自的第三波阵面(wavefront)被分配给该处理单元。在步骤230中,每一第三波阵面(wavefront)从片上本地存储器中读取其输入。在各自第三波阵面(wavefront)中的每一个类型确定基础地址,每一个第三波阵面(wavefront)通过片上本地存储器从该基础地址中读取其输入。每一个线程各自的基础地址例如可基于标识各自波阵面(wavefront)中的线程的顺序线程标识符、表示一个线程输入所占用的存储器空间的步骤尺寸以及分配给该第三波阵面(wavefront)的输入顶点块的基础地址来确定在步骤232中,在各自的处理单元中执行每一个第三波阵面(wavefront)。根据一个实施例,像素着色器处理发生在步骤232中。在步骤234中,将每一第三波阵面(wavefront)的输出写入到各自的片上本地存储器、系统存储器以及其他位置。在一个实施例中,一旦第三波阵面(wavefront)完成,由相应的第二波阵面(wavefront)的输出所占用的存储器可被释放并变为可用状态。基于不同的应用,方法200中可包括一个或多个其他处理步骤。根据一个实施例,第一、第二以及第三波阵面(wavefront)包括顶点着色器以及几何着色器,其运行以创建图形处理流水线从而处理像素数据并渲染图像以显示。应该注意的是,在不同的应用中,不同类型波阵面(wavefront)的排序是独立的。同时,根据一个实施例,第三波阵面(wavefront)可包括像素着色器和/或其他类型的着色器,例如计算着色器和复制着色器。例如,复制着色器可对数据进行压缩和/或将数据写入到全局存储器中。通过将一个或多个线程波阵面(wavefront)的输出写入到与处理单元相关的片上本地存储器中,本发明的实施例显著地减少了由于存储器访问冲突所引起的延迟。图3显示了根据本发明的一个实施例实现步骤206的方法流程图(302 — 306)。在步骤302中,确定在每一第一波阵面(wavefront)中的线程的数量。基于多种因素来确定,例如但不限于,可用于处理的数据元素、处理单元的数量、可在每一个处理单元中同时执行的线程的最大数量、以及在与各自处理单元相关的各自片上本地存储器中的可用存储器的
最大数量。在步骤304中,确定由每一第一波阵面(wavefront)的线程所能存储的输出的尺寸。该确定可基于重配置参数,或者基于程序指令的动态确定参数和/或输入数据的尺寸。根据一个实施例,由第一波阵面(wavefront)的每一个线程所能存储的输出的尺寸,在此处可被称为第一波阵面(wavefront)的步骤尺寸,其可以或者静态或者动态地在运行第一个波阵面(wavefront)的时间内或者在第一波阵面(wavefront)执行的时间内确定。在步骤306中,为每一个线程提供到与相应处理单元相关的片上本地存储器中的偏移量从而写入各自的输入。该偏移量可基于标识各自波阵面的线程的顺序线程标识符、各自波阵面的基础输出地址、以及表示每一个线程的存储空间的步骤尺寸来确定。在处理过程中,基于在线程分配的时间、波阵面的基础输出地址以及线程的步骤尺寸提供的偏移量,每一各自的线程可确定本地存储器中的实际偏移量以将其输出写入到其中。图4是根据本发明的实施例,显示实现步骤216的方法(402-406)的流程图。在步骤402中,确定第二波阵面的线程的步骤尺寸。可基于第二波阵面的编程指令、指定最大步骤尺寸的预设参数、预设参数以及编程指令的结合,或者其他类似方式来确定步骤尺寸。根据一个实施例,可通过确定一个步骤尺寸来调整由第二波阵面的各自线程读取的输入数据的数据放大,例如通过几何着色器的几何放大。在步骤404中,可为各自第二波阵面中的每一线程提供一个读取偏移量以确定片上本地存储器中的位置,通过该位置读取每一线程的输入。例如,在执行期间内,每一个各自线程基于读取偏移量、各自波阵面的基础读取偏移量以及对应的第一波阵面的线程的步骤尺寸来确定其实际读取偏移量。在步骤406中,为各自第二波阵面的每一个线程能提供到片上本地存储器中的写入偏移量。例如,在执行期间,每个各自线程基于写入偏移量、各自波阵面的基础写入偏移量以及第二波阵面的线程的步骤尺寸来确定实际写入偏移量。图5显示了确定在每一个处理单元中处理的数据元素的方法流程图(502-506)。在步骤502中,对存储在每一个处理单元的片上本地存储器中的第一波阵面的输出尺寸进行估计。根据一个实施例,基于由多个顶点着色器线程处理的顶点数量来确定输出的尺寸。每一个处理单元中处理的顶点数量可基于例如但并不限于下列因素来确定待处理的顶点的整体数量、能够处理顶点的处理单元的数量、每一个处理单元的可用的片上本地存储器的数量以及应用在每一个输入顶点的处理进程。根据一个实施例,每一个顶点着色器输出与其作为输入读入的顶点的数量相同。在步骤504中,对存储在每一处理单元的片上本地存储器中的第二波阵面的输出尺寸进行估计。根据一个实施例,第二波阵面的输出尺寸的估计至少部分地基于由第二波阵面的各自线程执行的输入数据的放大来实现。例如,由几何着色器进行的处理可导致几何放大从而使得输入基础图元的数量不同于输出基础图元的数量。数据放大(或几何放大)的程度可基于各自线程中预设的参数和/或可编程指令的情况来确定。在步骤506中,与每一处理器相关的所需的可用片上本地存储器的尺寸可通过将第一和第二波阵面的输出的尺寸求和来确定。根据本发明的一个实施例,每一个处理单元的片上本地存储器需要具有至少与第一和第二波阵面的总和的输出尺寸相同的可用的存储器。每一个处理单元处理的顶点的数量可基于可用的片上本地存储器的数量以及第一和第二波阵面的输出的总和来确定。
结论应该了解的是,发明内容部分以及摘要可阐明由本发明人所构思的一个或多个但并非所有的本发明的范例实施例,因此,上述内容并未意图以任何方式限制本发明以及所附加的权利要求。上面借助说明特定的功能及其关系的实现的功能方块图阐述了本发明。阐述中出于方便目的而随意定义了该些功能方块图的范围。本发明还可定义其它范围,只要能够适当执行特定的功能及关系即可。上面对特定实施例的说明将充分揭示本发明的总体特征,以致其他人能够利用本技术领域的知识可在无需过度实验且不背离本发明的总体构思的情况下针对不同应用轻易地进行修改和/或变更。因此,基于这里提出的教导和指导,此类修改和变更落入这里所揭露之实施例的等同方案的含义及范围内。应当了解,这里的用语或术语是出于描述目的而非限制本发明,因此本说明书中的用语或术语应由本领域技术人员根据所述教导及指导解释。本发明的广度及范围不应当限于上述任何示例实施例,而应当仅依据后附的权利要求及其等同方式定义。
权利要求
1.一种利用多个处理单元在处理器中处理数据元素的方法,其包括 在每一个所述处理单元中运行具有第一类型线程的第一波阵面,其后是具有第二类型线程的第二波阵面,其中所述第一波阵面读取来自片外共享存储器的所述数据元素的一部分以作为输入并生成第一输出; 将所述第一输出写入到各自的所述处理单元的片上本地存储器;以及将所述第二波阵面生成的第二输出写入到所述片上本地存储器,其中到所述第二波阵面的输入包括来自所述第一输出的多个第一数据元素。
2.如权利要求1所述的方法,进一步包括 利用所述第二波阵面处理所述第一多个数据元素来生成所述第二输出,其中所述第二输出中的数据元素的数量明显不同于来自所述第一多个数据元素的数量。
3.如权利要求2所述的方法,进一步包括 根据权利要求2所述的方法,其中所述第二输出中的数据元素的数量是动态确定的。
4.如权利要求2所述的方法,其中所述第二波阵面包括一个或多个几何着色器线程。
5.如权利要求4所述的方法,其中所述第二输出通过第一输出的几何放大生成。
6.如权利要求1所述的方法,进一步包括 在第一处理单元中在所述第二波阵面之后执行第三波阵面,其中该第三波阵面读取来自所述片上本地存储器中的所述第二输出。
7.如权利要求1所述的方法,进一步包括 对各自的所述处理单元基于至少所述片上本地存储器中的可用存储器来确定要处理的所述数据元素的数量;以及 对各自的所述处理单元基于所确定的所述数量来调整所述第一和第二波阵面的尺寸。
8.如权利要求7所述的方法,其中所述确定包括 估计所述第一输出的存储器尺寸; 估计所述第二输出的存储器尺寸;以及 利用所估计的所述第一和第二输出的所述存储器尺寸来计算所需的片上存储器的尺寸。
9.如权利要求1所述的方法,其中所述运行包括 执行所述第一波阵面; 检测所述第一波阵面的完成;以及 继所述检测之后由所述第二波阵面读取所述第一输出。
10.如权利要求9所述的方法,其中所述执行所述第一波阵面包括 确定所述第一波阵面的各自线程的输出尺寸;以及 将到所述片上本地存储器中的输出偏移量提供给所述第一波阵面的所述各自线程中的每一个。
11.如权利要求9所述的方法,其中所述运行进一步包括 确定所述第二波阵面的各自线程的输出尺寸;以及 将从所述第一输出中读取的到所述片上本地存储器中的偏移量提供给所述第二波阵面的所述各自线程;以及 将到所述片上本地存储器中的偏移量提供给所述第二波阵面的每一线程以写入所述第二输出的各自部分。
12.如权利要求11所述的方法,其中所述第二波阵面的各自线程的所述输出的尺寸基于预设的几何放大参数。
13.如权利要求1所述的方法,其中所述多个处理单元中的每一个是单指令多数据(SIMD)处理器。
14.如权利要求1所述的方法,其中所述片上本地存储器仅对在相应的各自的所述处理单元执行的线程是能访问的。
15.如权利要求1所述的方法,其中所述第一波阵面和所述第二波阵面分别包括顶点着色器线程和几何着色器线程。
16.—种系统,其包括 包括多个处理单元的处理器,每一处理单元包括片上本地存储器; 耦合到所述处理单元并被配置为存储多个输入数据元素的片外共享存储器; 与所述处理器耦合的波阵面分配模块,并将其配置为 在每一个所述多个处理单元中运行具有第一类型线程的第一波阵面,其后是具有第二类型线程的第二波阵面,所述第一波阵面被配置为读取来自所述片外共享存储器的所述数据元素的一部分;以及 耦合到所述处理器的波阵面执行模块,并将其配置为 将所述第一输出写入到各自的所述处理单元的片上本地存储器;以及将由所述第二波阵面生成的第二输出写入到所述片上本地存储器中,其中到所述第二波阵面的输入包括来自所述第一输出的第一多个数据元素。
17.如权利要求16所述的系统,其中将所述波阵面执行模块进一步配置为 利用所述第二波阵面处理所述第一多个数据元素以生成所述第二输出,其中所述第二输出中的数据元素的数量明显不同于所述第一多个数据元素的数量。
18.如权利要求17所述的系统,其中所述第二输出通过所述第一输出的几何放大生成。
19.如权利要求18所述的系统,其中所述第一和第二波阵面各自包括顶点着色器线程和几何着色器线程。
20.一种包括计算机可读媒介的有形计算机程序产品,该计算机可读媒介具有记录在其上的计算机程序逻辑并导致包括多个处理单元的处理器以 在每一个所述处理单元中运行具有第一类型线程的第一波阵面,其后是具有第二类型线程的第二波阵面,其中所述第一波阵面读取来自片外共享存储器的所述数据元素以作为输入并生成第一输出; 将所述第一输出写入到各自的所述处理单元的片上本地存储器;以及将由所述第二波阵面生成的第二输出写入到所述片上本地存储器,其中到所述第二波阵面的输入包括来自所述第一输出的第一多个数据元素。
全文摘要
本发明公开了在处理器中利用多个处理单元中的片上本地存储器来提升数据处理性能的方法。根据一个实施例,在处理器中利用多个处理单元对数据元素进行处理的方法包括在每一个所述处理单元中运行(launching)具有第一类型线程的第一波阵面(wavefront),其后是具有第二类型线程的第二波阵面(wavefront),其中第一波阵面读取来自片外(off-chip)共享存储器的数据元素的部分以作为输入并生成第一输出;将该第一输出写入到相应的处理单元的片上本地存储器中;并将由第二波阵面生成的第二输出写入到该片上本地存储器中,其中到第二波阵面的输入包括来自第一输出的第一多个数据元素。同时也公开了相应的系统和计算机程序产品的具体实施方式

文档编号G06T1/20GK103003838SQ201180035394
公开日2013年3月27日 申请日期2011年7月19日 优先权日2010年7月19日
发明者维妮特·戈埃尔, 托德·马丁, 芒热斯·尼娅舒 申请人:超威半导体公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1