使用具有较低端口数的存储器的模拟多端口存储器的制作方法

文档序号:6656739阅读:282来源:国知局
专利名称:使用具有较低端口数的存储器的模拟多端口存储器的制作方法
技术领域
本发明的一个或多个方面大体而言涉及数据处理,且更具体而言涉及在一可编程图形处理器或通用处理器中使用单端口存储器来模拟一多端口存储器。
背景技术
当前的数据处理包括开发用于执行程序指令(包括具有两个或更多个操作数的指令)的系统及方法。所述操作数存储于处理器内的寄存器中,以供在执行一程序期间有效地存取。某些程序指令(例如乘法及乘法-累加)规定两个或更多个操作数。在传统上,一寄存器文件包括一多端口存储器,以便可在单个时钟循环中读取两个或更多个位置,其中每一位置存储一个操作数。因此,可在单个时钟循环中采集至少一个程序指令所需的所有操作数并将其输出至一执行单元。
与单端口存储器相比,一多端口存储器需要更大的电路小片面积并使用更大的功率。然而,不同于多端口存储器,在每一时钟循环中仅可读取单个位置。因此,与多端口存储器相比,为采集执行一个程序指令所需的操作数,需要两个或更多个时钟循环,从而使性能降低。
因此,将希望在一使用较小电路小片面积及功率的处理器内提供一多端口寄存器文件的性能优点。

发明内容
本发明涉及用于使用较低端口数存储器作为库来模拟一多端口存储器的新型系统及方法。分配存储器的一部分来存储与一线程相关联的数据。分配给一线程的所述存储器部分可存储于单个库中或多个库中。在源操作数自一个或多个库输出时,一耦接至每一库的收集器单元搜集为处理一指令所需的源操作数。当已搜集到为处理指令所需的所有源操作数时,所述收集器单元将所述源操作数输出至一执行单元。使用较低端口数存储器模拟一多端口存储器所需要的电路小片面积小于一具有相当容量的多端口存储器。与具有相当容量的多端口存储器相比,经配置以模拟一多端口存储器的较低端口数存储器还具有变低的功率需求。
本发明的各实施例包括一寄存器文件单元,其用于存储用于处理器程序指令的操作数。所述寄存器文件单元包括一经配置以为一第一线程存储操作数的第一存储库,一经配置以为一第二线程存储操作数的第二存储库,一第一收集器单元,及一第二收集器单元。所述第一收集器单元经配置以自所述第一存储库接收用于所述第一线程的操作数并输出所述第一线程的一程序指令及由所述第一线程的程序指令所规定的任何操作数。所述第二收集器单元经配置以自所述第二存储库接收用于所述第二线程的操作数并输出所述第二线程的一程序指令及由所述第二线程的程序指令所规定的任何操作数。
本发明的一种方法的各实施例包括确定为一线程分配的寄存器数量,并将用于所述线程的所述数量的寄存器分配至一组经配置以模拟一多端口存储器的存储库中至少一个存储库中的位置。
本发明的各实施例包括一种用于为程序指令存储操作数的系统。所述系统包括分配构件,其用于根据一分配类型来分配用于存储由一线程所使用的操作数的寄存器;存储构件,其用于将所述操作数存储于所述寄存器中;及收集构件,其用于搜集由所述线程内的-程序指令所规定的任何操作数。


附图显示根据本发明一个或多个方面的实例性实施例;然而,所述附图不应视为将本发明限定至所示实施例,而是仅用于便于解释及理解的目的。
图1是一根据本发明一个或多个方面的相应计算机系统的一实例性实施例的方块图,其包括一主计算机及一图形子系统;图2是根据本发明一个或多个方面的图1中可编程图形处理管线的一实例性实施例的方块图;图3是根据本发明一个或多个方面的图2中寄存器文件单元的一实例性实施例的方块图;图4A是根据本发明一个或多个方面对用于处理线程的寄存器进行分配的一实例性实施例;图4B、4C及4D是根据本发明一个或多个方面对用于处理线程的寄存器进行分配的其他实例性实施例;图4E是根据本发明一个或多个方面对用于线程的寄存器进行分派的一实例性实施例;图4F是根据本发明一个或多个方面对用于线程的寄存器进行分派的另一实例性实施例;图5是根据本发明一个或多个方面图2中的寄存器文件单元的另一实例性实施例的方块图;图6A图解说明根据本发明一个或多个方面的一种分配用于处理一线程的寄存器的方法的一实施例;图6B图解说明根据本发明一个或多个方面的另一种分配用于处理一线程的寄存器的方法的一实施例;图6C图解说明根据本发明一个或多个方面的另一种分配用于处理一线程的寄存器的方法的一实施例。
具体实施例方式
在下文说明中列举了大量具体细节以使人们能够更透彻地了解本发明。当然,所属领域的技术人员应明了无需某些或全部这些具体细节也可实施本发明。在其他示例中,未对众所周知的特征加以赘述,以免淡化本发明。
图1是一计算系统的图解说明,所述计算系统总体上标记为100且包括一主计算机110及一图形子系统170。计算系统100可为台式计算机、服务器、膝上型计算机、掌上型计算机、图形输入板计算机、游戏控制台、例如个人数字助理(PDA)或蜂窝式电话等便携式无线终端机、基于计算机的模拟器、或类似装置。主计算机110包括主处理器114,主处理器114可包括一直接介接至主存储器112的系统存储器控制器或者可通过一系统接口115与主存储器112进行通信。系统接口115可为一I/O(输入/输出)接口,或者一包括用于直接介接主存储器112的系统存储器控制器的桥接装置。所属领域中所知的系统接口115的一实例包括IntelNorthbridge。
主计算机110通过系统接口115及一图形处理器105内的图形接口117与图形子系统170进行通信。在图形接口117处接收到的数据可传递至一前端130或者通过存储器控制器120写入至一本地存储器140。图形处理器105使用图形存储器来存储图形数据及程序指令,其中图形数据是输入至图形处理器内各组件或自这些组件输出的任何数据。图形存储器可包括主存储器112、本地存储器140、耦接至图形处理器105内各组件的寄存器文件、及类似装置的某些部分。
除其他组件外,图形处理器105还包括前端130,前端130经由图形接口117自主计算机110接收命令。前端130对这些命令进行解译及格式化,并将经格式化的命令及数据输出至一IDX(索引处理器)135。可编程图形处理管线150使用某些所述经格式化命令通过提供存储于存储器中的程序指令或图形数据的位置来启动数据处理。IDX135、可编程图形处理管线150及一光栅操作单元160分别包括一通往存储器控制器120的接口,通过所述接口可自存储器(例如本地存储器140与主存储器120的任一组合)读取程序指令及数据。当使用主存储器112的一部分来存储程序指令及数据时,可将主存储器112的所述部分解除高速缓存,以便提高由图形处理器105进行存取的性能。
IDX135视需要自存储器读取经处理的数据(例如由光栅操作单元160写入的数据),并将资料、经处理的资料及经格式化的命令输出至可编程图形处理管线150。可编程图形处理管线150及光栅操作单元160分别包含一个或多个可编程处理单元,以执行各种专门功能。这些功能中的某些功能为表查找、标量及向量加法、乘法、除法、座标系映射、向量范数的计算、嵌图、导数的计算、内插、及类似功能。可编程图形处理管线150及光栅操作单元160分别视需要配置成通过这些单元多遍地执行数据处理作业或者在可编程图形处理管线150内多遍地执行数据处理作业。光栅操作单元160包括一通往存储器控制器120的写入接口,数据可通过所述写入接口写入至存储器。
在一典型实施方案中,可编程图形处理管线150执行几何形状计算、光栅化、及片段计算。因此,对可编程图形处理管线150进行编程以处理表面、基元、顶点、片断、像素、样本或任何其他数据。为简明起见,在本说明的其余部分中将使用“样本”这一用语来指代例如表面、基元、顶点、像素、片断或类似数据等图形数据。
可编程图形处理管线150所输出的样本传递至一光栅操作单元160,光栅操作单元160视需要执行近平面及远平面剪辑以及光栅操作(例如模版印刷、z测试及类似操作),并将结果或由可编程图形处理管线150所输出的样本保存于本地存储器140中。当图形子系统170所接收的数据已由图形处理器105完全处理时,使用一输出控制器180提供图形子系统170的一输出185。输出控制器180视需要经配置以将数据递送至一显示装置、网络、电子控制系统、例如计算系统100等其他计算系统、其他图形子系统100、或类似装置。另一选择为,将数据输出至一薄膜记录装置或写入至一外围装置,例如磁盘驱动器、磁带、光盘或类似装置。
图2是图1中可编程图形处理管线150的图解说明。至少一组样本由IDX 135输出并由可编程图形处理管线150接收到,且根据至少一个程序来处理所述至少一组样本,所述至少一个程序包括图形程序指令。一程序可处理一组或多组样本。反过来,一组样本可由一个或多个程序构成的序列来处理。可编程图形处理管线150的某些实施例包括其他单元,所述其他单元经配置以执行特定功能,例如对基元数据进行光栅化以产生片断数据。
可编程图形处理管线150自IDX135接收样本,例如表面、基元、经处理数据、或类似数据。表面可经流式多处理器200处理以产生基元,所述基元可经流式多处理器200处理以产生顶点,且所述顶点可经流式多处理器200处理以产生片断。在本发明的替代实施例中,一个或多个流式多处理器200包含于一通用处理器(例如主处理器114)中。如在图2中所示,可编程图形处理管线150包括一个或多个流式多处理器200。每一流式多处理器200均包括至少一个或多个将在本文中进一步说明的执行单元270。所述样本可由这些流式多处理器200中的任一个加以处理。在流式多处理器200的某些实施例中,使用一读取接口(在图2中未显示)通过存储器控制器120自本地存储器140或主存储器112读取图形数据(例如纹理映像)。如在下文中所进一步说明,当流式多处理器200内的一处理线程可用时,流式多处理器200便接受一样本。
一流式多处理器200内的线程控制单元220接收样本及一指向要被执行以处理所述样本的程序指令序列的指针。线程控制单元320为每一要被处理的样本分派一线程。一线程包括一指向一程序指令(例如程序内的第一个指令)的指针(程序计数器)、线程状态信息、及用于存储在处理所述样本期间所使用及产生的操作数的存储资源。当为处理一线程所需的资源(例如用于存储操作数或线程状态信息的存储资源)不可用时,流式多处理器200将不接受额外的样本来进行处理。当与一线程相关联的程序指令已执行完毕时,被分配用于存储在执行所述线程期间所接收及所产生的操作数的存储资源(例如寄存器)便可供分配给另一线程,即将所述存储资源解除分配并在线程控制单元220中将所述线程标记为可用。
线程控制单元220将分配信息-其规定为存储操作数所需的存储资源的数量-输出至一寄存器地址单元240。线程控制单元220将所述指针及样本输出至一指令单元230。在每一时钟循环中可自线程控制单元220输出至指令单元230的指针及样本的数量在本发明的不同实施例之间可有所不同。
指令单元230使用一专用读取接口通过存储器控制器120自本地存储器140或主存储器112读取程序指令。在本发明的一替代实施例中,在各流式多处理器200之间共享单个指令单元230。在本发明的某些实施例中,指令单元230包括一指令高速缓冲存储器。
指令单元230执行不处理数据的指令,例如转移指令、调用/返回指令、或分支指令。指令单元230对各程序指令的执行进行调度、使各程序指令交错以处理任何现用(即分配给一样本)的线程。在本发明的某些实施例中,指令单元230在无额外信息规定一寄存器文件单元250内分配给各线程的寄存器特定位置(例如寄存器所位于的库)的情况下对各程序指令的执行进行调度。
指令单元230可经配置以在对用于线程的程序指令进行调度时使用固定或可编程的优先权。例如,被分配用于处理顶点程序指令的线程可始终比被分配用于处理片断程序指令的线程具有更高的优先权。在另一实例中,需要使用较大数量寄存器来存储操作数的线程可具有比需要使用较少寄存器来存储操作数的线程具有更高的优先权。在本发明的某些实施例中,指令单元230自一寄存器文件单元250接收指示具体线程的寄存器利用率的信息,且指令单元230相应地调整特定线程的优先权,以减少对寄存器文件单元250中寄存器的使用。
在本发明的其他实施例中,指令单元230使用规定一寄存器文件单元250内寄存器特定位置的额外信息来对程序指令的执行进行调度。例如,根据寄存器文件单元250内存储有用于指令的一个或多个操作数的库,将各程序指令预先分类成若干个群组。指令单元230以循环方式自每一群组中选择一个程序指令,每一时钟循环将一个或多个程序指令输出至寄存器地址单元240。
指令单元230将所述程序指令及样本输出至寄存器地址单元240。如结合图3及图5所述,寄存器地址单元240存取寄存器文件单元250内存储由每一线程所规定的操作数的寄存器。寄存器地址单元240输出对每一程序指令的请求。请求的实例包括对一特定操作数的读取请求或者对一特定操作数的写入请求。在本发明的一实施例中,寄存器地址单元240在每一时钟循环中输出对单个指令的请求。例如,对于一载入指令(LD),输出一(1)个写入请求以将一操作数写入至一寄存器。类似地,对于一乘法-累加(MAD)指令,输出3个读取请求(每一源操作数一个)及1个写入请求(对目的地操作数的写入请求)。
寄存器地址单元240将所述请求及一对应的程序指令(例如MAD)输出至一寄存器文件单元250。寄存器文件单元250处理所述请求,从而将操作数读取至寄存器文件单元250内的寄存器及自寄存器文件单元250内的寄存器写入操作数。寄存器文件单元250调度对各请求的处理,以免出现回写冲突及基于循环的冲突。在本发明的某些实施例中,寄存器文件单元250使用一记分板来跟踪操作数写入至寄存器的状态,以确定何时可自寄存器读取一操作数。
当对读取请求进行处理以获得为处理一程序指令所需的操作数时,寄存器文件单元250确定何时已获得所有操作数并随后将程序指令及操作数输出至执行单元270以供处理。执行单元270将经处理的操作数返送至寄存器文件单元250,以写入至由程序指令所规定的目的地操作数。执行管线240经程序指令配置以执行例如以下等作业嵌图,透视修正,内插,明暗处理,混合及类似作业。经处理的样本自每一执行管线240输出至光栅操作单元160。在本发明的某些实施例中,将额外的执行管线240耦接至寄存器文件单元250及光栅操作单元160。
图3是根据本发明一个或多个方面的图2中所示寄存器文件单元250的一实例性实施例的方块图。在本发明的替代实施例中,在一通用处理器(例如主处理器114)内使用寄存器文件单元250。寄存器文件单元250包括两个或更多个存储库-库320,其经配置以模拟单个多端口存储器。每一库320均包括数个用作经配置以存储操作数的寄存器的位置。每一收集器单元330均自寄存器地址单元240接收请求及对应的程序指令,并判定所述程序指令是否是一要由耦接至收集器单元330的特定执行单元365执行的指令。如果所述程序指令是一要由耦接至收集器单元330的特定执行单元365执行的指令,则收集器单元330接受所述程序指令并请求进行处理。在本发明的某些实施例中,每一执行单元365均相同,并使用一优先权方案来确定哪一执行单元365将执行所述程序指令。本发明的替代实施例将所述指令分派给负载最小的执行单元365。在本发明的某些实施例中,两个或更多个收集器单元330耦接至单个执行单元365,且使用一优先权方案来选取所述两个或更多个收集器单元中哪一收集器单元将操作数输出至所述单个执行单元365以供处理。
每一收集器单元330均将对所接受程序指令的请求输出至任一库请求仲裁单元310。每一库请求仲裁单元310均判定所述请求是否需要读取耦接至库请求仲裁单元310的特定库320中的一寄存器。将结合图4A、4B、4C、4D、4E及4F来说明某些可能的寄存器分配。每一请求均由一个库请求仲裁单元310输出至其中定位有被分派给所述请求中所规定操作数的寄存器的库320。被接受的程序指令保持于指定用于搜集操作数的收集器单元330中。每一库请求仲裁单元310还在不同的收集单元330之间进行仲裁并每一时钟循环向耦接至库请求仲裁单元310的库320输出一个请求。
每一库320均包括一读取请求端口以用于自一库请求仲裁单元310接收请求。每一库320还包括一写入请求端口,以用于自执行单元270接收要将经处理数据写入至一分派给由程序指令所规定操作数的目的地寄存器的写入请求。因此,使用2个较低端口数存储器(1个写入端口及1个读取端口)库来模拟一具有2个写入端口及2个读取端口的多端口存储器。在本发明的某些实施例中,使用额外的请求端口。在本发明的其他实施例中,将读取请求端口与写入请求端口相组合,从而存取一单端口存储器。在一时钟循环期间,每一库320均可通过一选择器325将由读取请求所规定的一操作数输出至一对应的收集器单元330。因此,当一程序指令为源数据规定3个操作数时,当所述操作数驻存于同一库320中时,搜集所述操作数需要至少3个时钟循环。每一收集器单元330也可收集源数据,例如存储于库320以外的寄存器(未显示)中的常数及直接数据。选择器325自输入端(未显示)接收未存储于库320中的源数据。当一收集器单元330搜集到所有操作数时,程序指令便准备好发送。在本发明的某些实施例中,包含额外的库请求仲裁单元310、库320、选择器325及收集器单元330,以增大在一时钟循环期间读取的操作数的数量。在本发明的一实施例中,省掉了选择器325且每一库320直接耦接至一收集器单元330。
当一收集器单元330已搜集到用于一程序指令的所有操作数时,收集器单元330便将程序指令及操作数输出至耦接至收集器单元330的执行单元365以供处理。当所述程序指令执行完毕时,如果所述程序指令规定了一目的地操作数,则执行单元365将一写入请求输出至其中一个库320。执行单元270亦可将经处理的操作数输出至光栅操作单元160。在本发明的某些实施例中,每一执行单元365均处理多于一个指令,从而在每一时钟循环中得到多于一个指令的通过量。执行不同的指令可在执行单元365对其进行处理时引起不同的延迟。
在本发明的一实施例中,将在单个库(例如库320)中分配寄存器来存储用于处理一线程的操作数。此种分配称作一“瘦”分配类型。图4A是根据本发明一个或多个方面在4个库中对用于处理各线程的寄存器进行瘦分配的实例性实施例。在图4A中,在库0中分配寄存器来存储用于处理线程A的操作数,在库1中分配寄存器来存储用于处理线程B的操作数,在库2中分配寄存器来存储用于处理线程C的操作数,并在库3中分配寄存器来存储用于处理线程D的操作数。可在库0、库1、库2及/或库3中分配寄存器来存储用于处理其他线程的操作数。在本发明的替代实施例中,则使用更少或更多个库。
在本发明的另一实施例中,可在这4个库中的每一个内分配寄存器来存储用于处理一线程的操作数,其中每一库均可为一库320。此种分配称作“胖”分配类型。图4B是一根据本发明一个或多个方面在4个库中对用于处理各线程的寄存器进行胖分配的实例性实施例。在图4B中,在库0、库1、库2及库3中分配寄存器来存储用于处理线程A的操作数。还在库0、库1、库2及库3中分配寄存器来存储用于处理线程B、C及D的操作数。在本发明的替代实施例中,则使用更少或更多个库。
在本发明的某些实施例中,以“库计数值”为单位分配用于处理各线程的寄存器,所述“库计数值”单位代表胖或瘦分配类型中寄存器的具体数量。可在库0中跟踪一指示下一可供分配的寄存器的寄存器基地址,并可使用所述库计数值、分配类型及寄存器基地址来确定其他库中的下一可用寄存器。
可使用胖或瘦分配在库0、库1、库2及/或库3中分配寄存器来存储用于处理额外线程的操作数。然而,如在图4C中所示,将胖与瘦分配类型相混合可导致可供用于分配的寄存器的利用率较差。例如,当一第一线程(例如线程A)使用在库0中进行的瘦分配且一第二线程(例如线程B使用在这四个库中的每一库中进行的胖分配时,一使用瘦分配的第三线程可能会被延迟到所述第一线程执行完毕为止。另一选择为,在本发明的某些实施例中,如在图4D中所示,胖分配类型可自每一库的顶部进行,而瘦分配类型可自每一库的底部进行。线程A及B使用一胖分配,而线程C及D则使用一瘦分配。如此对分配进行“划分”能够填充相同的分配类型以更有效地利用可供分配的寄存器。
当对线程使用胖分配时,分派给每一操作数的位置可简单地循序进行。图4E是一根据本发明的一个或多个方面循序地为线程分派寄存器的实例性实施例。例如,一分配给线程A的被分派用于存储操作数400A的寄存器位于库0中,一分配给线程B的被分派用于存储操作数400B的寄存器也位于库0中。如果线程A及线程B正执行相同的程序指令,则当线程A与线程B处理一读取线程A的操作数400A及线程B的操作数400B的程序指令时,有可能将出现库冲突。如果操作数400B与操作数400A不存储于同一库中,则可避免出现库冲突。
在寄存器分派过程期间可使用一相位值,以使处理同一程序指令的各线程将不将由所述程序指令规定的其对应操作数分派给处于同一库中的各寄存器。图4F是根据本发明一个或多个方面使用一相位值来为各线程分派寄存器的实例性实施例。例如,一分配给线程A的被分派用于存储操作数410A的寄存器位于库0中,且一分配给线程B的被分派用于存储操作数410B的寄存器位于库1中。如果线程A与线程B正在执行相同的程序指令,则当线程A及线程B处理一读取线程A的操作数410A及线程B的操作数410B的程序指令时不会出现库冲突。在本发明的一替代实施例中,对各寄存器进行重新映射,以使处理同一程序指令的各线程将不将由所述程序指令规定的其对应操作数分派给处于同一库中的各寄存器。例如,对于4个库而言,可将一所分派寄存器编号中的较低的两个位与一对应于所述寄存器所分配给的线程的唯一相位值进行互斥OR(XOR)运算。本发明的一种替代方法是将以库数量为模的相位值添加至所分派的寄存器编号。
当对寄存器使用胖分配时,为处理一程序指令所需的两个或更多个操作数有可能将被分派至位于两个或更多个不同库中的寄存器。例如,如果一用于线程A的程序指令规定操作数414A及415A,则各读取请求将被排队于两个不同的请求队列310中一其中一个耦合至库0,而另一个耦合至库1。同样地,操作数414A将输出至耦合至库0的收集器单元330,而操作数415A将输出至耦合至库1的收集器单元330。由于单个收集器单元330搜集用于每一程序指令的操作数,因此使用一种机制来允许在不同的库与收集器单元330之间传送操作数。
图5是根据本发明一个或多个方面的图2中所示寄存器文件单元的另一实例性实施例的方块图,所述寄存器文件单元包括一交错单元525及复数个库320,其中每一库320均耦接至一库请求仲裁单元310。交错单元525配置成可将来自任一库320的操作数输出路由至任一收集器单元330的输入。因此,单个收集器单元330便可收集由一程序指令所规定的所有操作数。如结合图3所述,每一收集器单元330均自任一库320搜集由一程序指令规定的操作数。当使用交错单元525时,可比当库320的数量等于收集器单元330的总数量时更有效地进行线程调度及寄存器分配(胖或瘦分配)。
一调度器单元540耦接于一组收集器单元330与一执行单元B575之间。调度器单元540可自该组内的每一收集器单元330接收程序指令及对应的操作数(例如输入),因此调度器单元540在该组内的各收集器单元330之间进行仲裁。在本发明的某些实施例中,调度器单元540以循环方式进行仲裁。在本发明的其他实施例中,该组内的每一收集器单元330均具有一对应的优先权且调度器单元540根据所述优先权自每一收集器单元330接受输入。例如,一个收集器单元300可具有高于其他收集器单元330的优先权,且如果一程序指令及操作数可用,则调度器单元540将始终自所述一个收集器单元330接受输入。
单个收集器单元330直接耦接至一执行单元A565。执行单元A 565可经配置以执行所述执行单元B575未被配置成执行的特定指令。因此,单个收集器单元330接受用于供执行单元A565执行的程序指令(及请求),且一组收集器单元330接受用于供执行单元B575执行的程序指令(及请求)。
图6A图解说明根据本发明的一个或多个方面的一种分配用于处理线程的寄存器的方法的一实施例。在步骤600中,寄存器地址单元240自线程控制单元220接收一为一线程进行寄存器分配的请求。在步骤605中,寄存器地址单元240判定为处理所述线程所需的寄存器规模(即寄存器数量)是否小于或等于一固定的或可编程的值X。如果寄存器地址单元240判定出所述大小大于X,则在步骤610中,寄存器地址单元240在多个库320中分配用于存储操作数的寄存器(即进行胖分配)。在步骤615中,寄存器地址单元240更新一基指针。所述基指针指示库320内可供用于分配的第一位置。
在步骤620中,寄存器地址单元240更新一相位值,以使为下一线程分配的分派给操作数的各寄存器将相对于在步骤610中所分配的寄存器偏斜。在步骤625中,寄存器地址单元240判定所述相位值是否等于N,其中N是库320的数量。如果在步骤625中,寄存器地址单元240判定出所述相位值等于N,则在步骤630中,寄存器地址单元240将所述相位值设定为0并进行至步骤670。如果在步骤625中,寄存器地址单元240判定出所述相位值不等于N,则寄存器地址单元240进行至步骤670并将分配信息输出至寄存器文件单元250内的请求分发单元300。
如果在步骤605中,寄存器地址单元240判定出所述规模小于或等于X,则在步骤635中,寄存器地址单元240判定可供用于一瘦分配的库320是否为N-1。如果在步骤635中,寄存器地址单元240判定出可供用于分配的库320是库N-1(此由一库指示符规定),则在步骤650中,寄存器地址单元240更新所述基以指示可供用于分配的第一位置并进行至步骤645。如果在步骤635中,寄存器地址单元240判定出可供用于分配的库320不是库N-1,则在步骤640中,寄存器地址单元240通过将库指示符递增1来更新所述库指示符。在步骤645中,寄存器地址单元240在由所述库指示符所规定的单个库320中分配用于存储操作数的寄存器(即为一瘦分配),并进行至步骤670。如前面所述,在步骤670中,寄存器地址单元240将分配信息输出至寄存器文件单元250内的请求分发单元300。
图6B图解说明根据本发明一个或多个方面的另一种分配用于处理线程的寄存器的方法的一实施例。在步骤600中,寄存器地址单元240接收一寄存器分配请求,包括一为胖分配或瘦分配的分配类型。在本发明的某些实施例中,所述分配类型是在编译程序指令时确定并由一驱动器提供至寄存器地址单元240。在步骤603中,寄存器地址单元240判定所规定分配类型是否为瘦分配,且如果是,则如前面结合图6A所述,进行至步骤610、615、620、625、630及670。而如果在步骤603中寄存器地址单元240判定出所规定分配类型不是瘦分配,则如前面结合图6A所述,寄存器地址单元240进行至步骤635、640、645、650及670。
图6C图解说明根据本发明一个或多个方面另一种分配用于处理线程的寄存器的方法的一实施例。在步骤600中,寄存器地址单元240接收一寄存器分配请求,包括一为胖分配或瘦分配的分配类型。在步骤603中,寄存器地址单元240判定所规定分配类型是否为瘦分配,且如果是,则在步骤607中,寄存器地址单元240判定所述瘦分配是否将处于由库指示符所规定的库320的范围内(即是否有所需数量的寄存器可供使用)。如果在步骤607中,寄存器地址单元240判定出所述瘦分配将处于库320的范围内,则寄存器地址单元240如前面结合图6A所述进行至步骤635、640、645、650及670。
而如果在步骤603中寄存器地址单元240判定出所规定分配类型不是瘦分配,则如前面结合图6A所述,寄存器地址单元240进行至步骤610、615、620、625、630及670。如果在步骤607中,寄存器地址单元240判定出所述瘦分配将不处于库230的范围内,则寄存器地址单元240也如前面结合图6A所述进行至步骤610、615、620、625、630及670。
因此,所属领域中的技术人员将了解,任何经配置以执行图6A、6B、6C所示方法步骤或其等价步骤的系统均将属于本发明的范畴内。此外,所属领域中的技术人员将了解,图6A、6B、6C所示方法步骤可扩展至支持一包括任意数量个库的用于模拟一多端口存储器的寄存器文件单元。
上文已参照具体实施例对本发明进行了说明。然而,显而易见,可在不背离随附权利要求书中所陈述本发明更宽广精神及范围的前提下对这些具体实施例作各种修改和改变。因此,应将上文说明及附图视为仅具有例示性而非限定性意义。在方法权利要求项中所列的步骤并不隐含着以任一特定次序实施这些步骤,除非在该权利要求项中明确指明。
所有商标均为其拥有者分别所有。
权利要求
1.一种将寄存器分配至存储库内的方法,其包括确定分配用于一线程的寄存器数量;及将用于所述线程的所述数量的寄存器分配至一组存储库中至少一个存储库中的若干位置,所述一组存储库经配置以模拟一多端口存储器。
2.如权利要求1所述的方法,其中将分配用于所述线程的所述数量的寄存器划分成若干部分且在所述一组存储库内的每一存储库中分配所述若干部分。
3.如权利要求1所述的方法,其中将分配用于所述线程的所述数量的寄存器定位于所述一组存储库内的一单个存储库中。
4.如权利要求1所述的方法,其中所述数量的寄存器的所述分配是基于一分配类型。
5.如权利要求4所述的方法,其进一步包括如下步骤根据分配用于所述线程的所述寄存器数量来确定所述分配类型。
6.如权利要求4所述的方法,其进一步包括如下步骤自一驱动器接收所述分配类型。
7.如权利要求1所述的方法,其进一步包括如下步骤自所述一组存储库内的一第一存储库内的一寄存器读取由所述线程内的一程序指令规定的一第一操作数。
8.如权利要求7所述的方法,其进一步包括如下步骤自所述一组存储库内的一第二存储库内的一寄存器读取由所述线程内的所述程序指令规定的一第二操作数。
9.如权利要求8所述的方法,其进一步包括如下步骤收集所述第一操作数及所述第二操作数并调度所述程序指令、所述第一操作数、及所述第二操作数以供执行。
10.如权利要求7所述的方法,其进一步包括如下步骤自所述一组存储库内的所述第一存储库内的另一寄存器读取由所述线程内的所述程序指令规定的一第二操作数。
11.如权利要求10所述的方法,其进一步包括如下步骤收集所述第一操作数及所述第二操作数并调度所述程序指令、所述第一操作数、及所述第二操作数以供执行。
12.如权利要求1所述的方法,其进一步包括通过使用与所述线程相关联的一相位值分派每一寄存器,将分配用于所述线程的所述一组寄存器内的寄存器分派至所述至少一个存储库。
13.一种用于存储用于图形程序指令的操作数的寄存器文件单元,其包括一第一存储库,其经配置以存储用于一第一线程的操作数;一第二存储库,其经配置以存储用于一第二线程的操作数;一第一收集器单元,其经配置以自所述第一存储库接收用于所述第一线程的所述操作数并输出所述第一线程的一程序指令及由所述第一线程的所述程序指令所规定的任何操作数;及一第二收集器单元,其经配置以自所述第二存储库接收用于所述第二线程的所述操作数并输出所述第二线程的一程序指令及由所述第二线程的所述程序指令所规定的任何操作数。
14.如权利要求13所述的寄存器文件,其进一步包括一将所述第一存储库耦接至所述第二收集器单元的交错单元,以便使所述第二收集器自所述第一存储库接收用于所述第一线程的操作数。
15.如权利要求13所述的寄存器文件,其进一步包括一第一库请求仲裁单元,其经配置以将操作数读取请求输出至所述第一存储库;及一第二库请求仲裁单元,其经配置以将操作数读取请求输出至所述第二存储库。
16.如权利要求13所述的寄存器文件,其进一步包括一调度器单元,所述调度器单元耦接至所述第二收集器单元并经配置以输出所述第一线程的所述程序指令及由所述第一线程的所述程序指令所规定的任何操作数或者所述第二线程的所述程序指令及由所述第二线程的所述程序指令所规定的任何操作数。
17.如权利要求16所述的寄存器文件,其进一步包括一执行单元,所述执行单元经配置以执行由所述调度器单元所输出的任何程序指令。
18.如权利要求16所述的寄存器文件,其进一步包括一执行单元,所述执行单元经配置以执行由所述第一收集器单元所输出的任何程序指令。
19.一种用于存储用于图形程序指令的操作数的系统,其包括分配构件,其用于根据一分配类型来分配用于存储由一线程所使用的操作数的寄存器;存储构件,其用于将所述操作数存储于所述寄存器中;及搜集构件,其用于搜集由所述线程内的一图形程序指令所规定的任何操作数。
20.如权利要求19所述的系统,其进一步包括用于分派寄存器以使库冲突最小化的构件。
21.如权利要求19所述的系统,其进一步包括用于根据所述分配类型来分发操作数读取请求的构件。
22.如权利要求19所述的系统,其进一步包括用于执行所述程序指令以处理由所述程序指令所规定的所述操作数的构件。
23.如权利要求19所述的系统,其中根据一第一分配类型所分配的寄存器是自一库的顶部分配且根据一第二分配类型所分配的寄存器是自所述库的底部分配。
全文摘要
本发明揭示一种使用较低端口数存储器作为库来模拟一多端口存储器的设备及方法。分配存储器的一部分来存储与一线程相关联的数据。可将分配给一线程的所述存储器部分存储于单个库中或多个库中。当源操作数自一个或多个库输出时,一耦接至每一库的收集器单元搜集为处理一程序指令所需的源操作数。当已搜集到为处理所述程序指令所需的所有源操作数时,所述收集器单元将所述源操作数输出至一执行单元。
文档编号G06F9/30GK101014933SQ200580029849
公开日2007年8月8日 申请日期2005年7月7日 优先权日2004年7月13日
发明者约翰·埃里克·林霍尔姆, 明·Y·西乌, 西蒙·S·莫伊, 塞缪尔·刘, 约翰·R·尼克奥尔斯 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1