存储器微块化请求重排序的制作方法

文档序号:6601971阅读:155来源:国知局

专利名称::存储器微块化请求重排序的制作方法
技术领域
:本发明涉及计算机系统;更具体而言,本发明涉及存储器访问控制。
背景技术
:对视频存储器的主存储器进行访问的图形控制器是实现统一存储器架构(UMA)的计算机系统的特色。然而,UMA图形系统的存储器效率可能由于CPU高速缓存线大小的需求而受到限制。例如,用于图形的理想存储器访问大小可以是4到16字节,因为图形控制器能够一次对一个或几个像素或者纹理元素(texel)进行操作。然而,常常针对64字节的CPU高速缓存线大小来优化存储器架构,以使得CPU存储器效率最优化。其结果是,平均起来,从存储器中读出的相当大量的数据可能从未被图形存储器使用过。分立式图形控制器的制造商通过使用更为狭窄的存储器通道而在取出(fetch)过程中使得该问题最小化。然而,该解决方案不能用于基于UMA的集成图形控制器。将通过举例的方式来图示本发明,但是并不局限于附图中的特征,在附图中,相同的参考标记表示类似的元件,并且在附图中图1是计算机系统的一个实施例的框图;图2示出了存储器控制器的一个实施例;图3示出了逻辑虚拟地址的一个实施例;图4示出了存储器控制器的另一个实施例;图5示出了存储器控制器的再一个实施例;图6示出了重排序表(reordertable)的一个实例;图7示出了环形缓冲器条目及逻辑;图8示出了重排序表的另一个实例;图9示出了比较与选择逻辑的一个实施例;图IOA和IOB示出了性能上的改善;以及图11是计算机系统的另一个实施例的框图。具体实施例方式描述了一种存储器请求重排序架构。在以下对本发明的详细描述中,阐述了多个具体细节,以便提供对本发明的透彻理解。然而,本领域技术人员要理解的是,没有这些具体细节,本发明也是可以实现的。在其他实例中,以框图的形式示出了已知的结构和装置,而不是给出细节,以便避免本发明变得不清楚。在说明书中提到的“一个实施例”或者“实施例”意思是结合该实施例所描述的特定特征、结构、或者特点包含在本发明的至少一个实施例中。说明书中各个地方出现的短语“在一个实施例中”并非都一定指的是同一实施例。图1是计算机系统100的一个实施例的框图。计算机系统100包括中央处理单元(CPU)102,其耦合到接口105。在一个实施例中,CPU102是来自加利福尼亚SantaClara的Intel公司的Pentium系列的处理器,PentiumIV处理器。可替换地,也可以使用其他CPU。例如,可以使用多个处理内核来实现CPU102。在另一个实施例中,计算机系统100可以包括多个CPU102。在另一个实施例中,芯片组107也耦合到接口105。芯片组107包括存储器控制组件110。存储器控制组件110可以包括耦合到系统主存储器115的存储器控制器112。系统主存储器115存储数据和由CPU102或者系统100中包含的任何其他器件所执行的指令序列。在一个实施例中,系统主存储器115包括动态随机存取存储器(DRAM);然而,系统主存储器115可以使用其他存储器类型来实现。还可以将其他器件耦合到接口105,例如多个CPU和/或多个系统存储器。存储器控制组件110可以通过接口耦合到输入/输出(I/O)控制组件140。I/O控制组件140提供通往计算机系统100中的I/O器件的接口。I/O控制组件140可以支持I/0总线(例如外设部件互连(PCI)、加速图形端口(AGP)、通用串行总线(USB)、少针脚型接口(lowpincount,LPC)总线、或者其他类型的I/O总线(未示出))上的标准I/O操作。根据一个实施例,图形控制器160与芯片组107进行通信,并且图形控制器160被实现为提供视频图形至耦合到计算机系统100的显示器(未示出)。图形控制器160访问用于视频存储器的主存储器115。如上所述,支持图形系统和CPU的存储器器件的存储器效率受到限制,因为用于图形的存储器访问大小经常理想地为4到16字节,而存储器架构是针对64字节的CPU线大小进行优化以使CPU效率最优化的。根据一个实施例,存储器控制组件110特征降低了图形器件的存储器请求大小,同时保持了64字节的存储器事务。标准存储器通道,例如基于DDRDRAM技术的存储器通道,具有某种m比特的物理宽度。存储器事务由T次传送(transfer)组成,其总逻辑宽度为M=m*T/8个字节。在每次事务中的字节被认为是具有连续的地址。在随后的讨论中,术语宽度表示逻辑宽度。微块化(micro-tiling)将M字节宽度的通道划分为S个子通道,每个子通道宽度为N=M/S字节,其中,在每个子通道上传送N字节的数据。为每个子通道提供地址,其中,某一数量(I)的独立地址比特可能不同于给予其他子通道的地址中的对应比特。在每个子通道上传送的数据被认为是表示毗邻的地址范围。然而,在每个子通道上的数据块并非一定来自于毗邻的地址范围。每个子通道包括通道的总存储单元的子集。图2示出了存储器控制组件110的一个实施例。在一个实施例中,多通道存储器子系统每个通道具有一个微块化存储器控制器。因此,如图2所示,存储器控制组件110包括两个存储器控制器112(存储器控制器1和2),分别用于这两个通道的每一个。每个通道包括S个子通道,每个子通道宽度为N字节。于是,每个通道宽度为M=N*S字节。在该图中,对存储器读出或写入的请求被示为2X2的正方形阵列,其可以表示像素或者纹理元素的2X2阵列。对于在分配给子通道之前的请求进行了图示。在子通道分配之后,将请求编号为O-(S-I),以指示子通道分配。对于耦合到存储器控制组件110的请求者205的N字节返回是在读出事务的情况下发生的。存储器控制组件110包括通道分配逻辑210,其耦合到存储器控制器112。通道分配210经由存储器控制器112将从请求者205接收的每个请求分配至存储器通道240。更进一步地,每个存储器控制器112包括子通道分配215、重排序缓冲器220和事务汇集器(assembler)230。因此,如图2所示,将请求分配给存储器控制器1或者存储器控制器2。子通道分配215将每个请求分配给在存储器通道240中的子通道。重排序缓冲器220收集请求,以使得事务汇集器230尝试汇集对于每个存储器240的子通道的存储器访问。根据一个实施例,每个子通道具有相等的N字节宽度。在图2所示的系统的操作期间,可以将进入到存储器控制器(1或2)的请求分配给子通道并且可以将其放置在重排序缓冲器220中,该请求是地址A处的对于N字节数据块进行读出或者写入的请求。在一个实施例中,采用以下处理定义同一性子通道分配(IdentitySubchannelAssignment)s将该请求地址A向右偏移P=Iog2(N)个比特,得到新的整数值A(例如,A二AP);并且s是A的Q=(S)个最低有效比特(例如,s=A&((1Q)-1))0存储器控制器通过从重排序缓冲器220选择S个读出请求(分别用于每个子通道)来形成存储器读出事务。存储器控制器通过从重排序缓冲器220选择S个写入请求(分别用于每个子通道)来形成存储器写入事务。由共享地址线所表示的地址部分与在该事务中所有的子通道请求相同。图3示出了对物理地址中的地址比特的解释的一个实施例。图3中所示的对于共享和独立地址比特的选择以及子通道选择比特是为了图示说明目的,因为可以随意地将在P个子通道数据地址比特之上的地址比特划分为共享和独立的地址比特以及子通道选择比特。独立地址比特在子通道之间是不同的,并且未必是毗邻的。发送到子通道的地址比特是该子通道的共享地址比特和独立地址比特。图4示出了存储器控制组件110的一个实施例,其从4个16字节的请求汇集成64字节的事务,图中仅示出了单个通道。图4所示出的重排序缓冲器220被实现为用于每个子通道的重排序队列。然而,在其他实施例中,重排序缓冲器220可以通过其他机制实现。在该实施例中,事务汇集器230从16B的请求(分别用于每个子通道)构建64B的存储器请求。形成该存储器请求的所有16B请求都具有相同的共享地址比特。因此,汇集器230查询该队列,根据请求是否具有共同的共享地址来找到能够被汇集到单个事务中的请求。注意,在图4所示的实施例中,汇集器230不能找到用于子通道Ic的请求。当尝试形成事务时,存储器控制器可能不能为每个子通道找到请求以使得所有子通道都具有相同的共享地址段(例如,使得每个共享地址比特的值在所有请求之间都相同)。如果子通道不能用在相应队列中的请求进行填充,则结果是不执行去往/来自该子通道的传送。在一个实施例中,如果子通道不能用请求进行填充,则可以读出任意存储单元并且将结果抛弃。在替换实施例中,每个子通道可以包括附加控制线,其用于在不存在对于该通道的相应请求时,减小(powerdown)子通道的功率。在上述实施例中,事务汇集器230通过从每个重排序序列中选择子通道请求,来汇集通道请求。然而,在替换实施例中,可以实施重排序表来存储子通道请求,而不是每个子通道有独立的相关联的重排序序列。图5示出了存储器控制组件110的实施例,其具有通过重排序表520的请求流(aflowofrequests)0在该实施例中,所示出的请求可以包含共享地址部分和独立地址部分。在图5中以图案示出了共享地址部分,以表示不同或者相同的值。请求的独立地址部分在分配子通道之前可以是空白的。在一个实施例中,上述的Im2(N)个子通道数据地址比特在该级别上与存储器事务不相关,因此没有将其示出。类似地,所传送的实际数据也未示出。重排序表520的每个表元素都具有共享地址部分和S个独立地址部分,S个独立地址部分分别对应每个子通道。如图5中所示,表元素是空白的,以指示还未分配共享地址值。每个独立地址部分也可以是空白的,直到分配了独立地址值为止。在子通道分配之后,在图5中,可以标记请求的独立地址部分,以指示要将该独立地址部分分配给其的子通道(例如,Ia用于子通道la,lb用于子通道lb,等等)。然后,可以将共享地址值与存储在每个表条目(tableentry)中的共享地址值进行比较。如果存在匹配且在该表条目中的相应的子通道地址部分是可用的,就可以将该独立地址值放置在该子通道地址部分中。如果该子通道地址部分已经包含值,则继续搜索具有相匹配的共享地址值的表条目。如果未搜索到,则将该请求的共享的和独立的地址值放置在一个空表条目中。图5示出了具体实例,其中,有S=4个子通道,并且其中最大表深度D=8。S和D均可采用任何值,为重排序表520创建了大数可能配置。为了发出事务,可以选择表条目,并将其转发到事务汇集器230,然后将其作为空表条目返回至重排序表520以便将来使用。根据一个实施例,汇集器从在一个重排序表520行上的16字节请求构建64字节的存储器请求,并且所有的子跨度(SUbspan)都具有相同的共享地址比特。此外,如果在所选择的表条目中的子通道部分是空的,则事务汇集器230能够推测性地插入用于存储器读出的子跨度请求。图6示出了实现该机制的重排序表520的一个实施例。重排序表520包括被称为环形缓冲器条目及逻辑(ringbufferentryandlogic)620的比较逻辑单元的一个环。图7示出了环形缓冲器条目及逻辑620的一个实施例。返回参考图6,表条目可以表示为能够为每个子通道存储单个共享地址值和独立地址值的寄存器。表条目可以实现为一系列寄存器,并且具有用于指示当前存储的值是否有效的有效位。通过选择表条目并将其发送至事务汇集器230,来生成输出请求。然后,将相应的表条目部分标记为无效。根据一个实施例,每个表条目可以耦合至逻辑单元620。此外,每个输入的请求在被表条目选择逻辑630所选择时,可以被插入到该环中与下一个表条目相关联的逻辑单元620处,以将其传递至事务汇集器230。输入的请求包含共享地址值、独立地址值以及子通道分配,可以按照如下将该输入的请求与相关联的表条目进行比较。首先,如果在该表条目中的共享地址值是无效的,则可以将在该请求中的共享地址值复制至该表条目中,可以将在该请求中的独立地址值复制至在该表条目中的相应子通道地址部分中。该表条目中的两个元素都标记为有效。然后,抛弃该请求。然而,如果在该请求和表条目中的共享地址值相等,并且在该表条目中的所分配的子通道的独立地址值是无效的,则可以将在该请求中的独立地址值写入至该表条目中并将其标记为有效。然后,抛弃该请求。否则,则将该请求传送至下一个相继的环形缓冲器元素,并且重复该过程。根据一个实施例,如果对于所有的环形缓冲器条目的比较都失败,则该输入请求可以被阻塞(stalled),直到可以生成输出请求并因此释放环形缓冲器条目为止。图8示出了实现该机制的重排序表520的另一个实施例。重排序表520包括被称为比较与选择逻辑820的比较器逻辑单元的环。图9示出了比较与选择逻辑820的一个实施例。返回参考图8,表条目被表示为能够为每个子通道存储单个共享地址值和独立地址值的寄存器。表条目可以实现为一系列寄存器,并且具有用于指示当前存储的值是否有效的有效位。通过选择最高优先级的表条目并将其发送至事务汇集器230,来生成输出请求。然后,将相应的表条目部分标记为无效。根据一个实施例,每个表条目耦合至逻辑单元820。此外,每个输入的请求被每个逻辑单元820所看到。输入的请求包含共享地址值、独立地址值以及子通道分配,每个逻辑单元820按照如下将该输入的请求与相关联的表条目进行比较(“输入的请求比较”)。首先,如果在该表条目中的共享地址值是无效的,则该比较成功。否则,如果在该请求中的共享地址值与该表条目是相等的并且在该表条目中的所分配子通道的独立地址值是无效的,则该比较成功。否则,该比较失败。在一个实施例中,每个逻辑820单元具有固定的和唯一的表条目Id,并且在被表条目选择逻辑620所选择时将该表条目Id与最高优先级表条目进行比较,以将其发送至事务汇集器230。如果由最高优先级条目所执行的该输入请求的比较成功,则将在该请求中的独立地址值复制至在该表条目中的相应子通道地址部分中。该表条目中的两个元素都标记为有效。然后,抛弃该请求。否则,如果在优先级环上的下一个表条目所执行的该输入请求的比较成功,则将该输入请求复制到该表条目中。否则,重复该过程,直到发现对其而言输入请求比较成功的一个表条目为止。如果没有发现对其而言输入请求比较成功的表条目,则中止该输入请求的插入,直到生成了输出请求并因此释放了环形缓冲器条目为止。微块化存储器子通道能够访问在由共享地址比特和I个独立地址比特所确定的某个地址范围之内的不毗邻的存储器地址。因此,与将I个地址信号复制到每个子通道的成本进行权衡,对于I的明智选择能够提供独立子通道的增强的并行性和带宽效率。图IOA和IOB示出了微块化的性能改善。每个图示出了在分块地址空间(tiledaddressspace)中的三角形的光栅化(rasterization),每个小正方形表示4字节像素或者纹理元素。图IOA示出了当每个请求是64字节时,在标准存储器系统中的过读取(overfetch)0每个4X4像素块表示64字节的对齐的存储器块。该三角形包围了57个像素。采用标准存储器子系统,这57个像素在11个(64字节)存储器块中。因此,为了访问这57个像素,需要访问可能不被使用的额外的119个像素的代价数据(worthofdata)(例如,得到32%的效率)。图IOB示出了在每个请求是16字节并且所有这些请求都可以由微块化汇集器用来构建不带有未使用的子通道的64字节存储器事务的情况下的过读取。在该情况下,三角形接触23个2X2像素阵列,结果是访问35个额外的代价数据(例如,得到62%的效率)。微块化的有效性取决于汇集器构建完全填充的存储器事务的能力。此外,上述重排序表机制对输入的存储器请求执行各种比较,而不是试图在输出端构建请求。这就允许有更多的时间来执行比较,潜在地避免了竞争状态,并且减少了比较器的数量(因此,降低了重排序队列的门的总数)。每个时钟仅仅存在D次比较,而不是每个时钟SXD次比较。图11示出了计算机系统100的另一实施例。在该实施例中,与独立的存储器控制组件和I/O控制组件不同,芯片组107包括单个控制集线器(controlhub)1120。从而,存储器控制器112被包含在CPU102中,存储器115耦合到CPU102。在这样的实施例中,图形控制器160耦合到控制集线器1120,并且经由CPU102访问主存储器115。然而,在阅读了以上描述之后,本发明的很多替换和修改对于本领域技术人员而言毫无疑问地变得显而易见,要理解的是,通过图示说明所示出和描述的任何特定实施例并非意欲被认为是限制性的。因此,对于各种实施例的细节的参考并非意欲限制权利要求的范围,在权利要求中仅仅阐述了被认为是对本发明而言是必要的那些特征。权利要求一种用于存储器访问控制的方法,包括在存储器控制器处接收第一请求,以访问耦合至所述存储器控制器的随机存取存储器器件中的通道;在所述存储器控制器处接收第二请求,以访问所述通道;分配所述第一请求和所述第二请求以访问在所述通道中的两个或者更多可独立寻址的子通道之一;将所述第一请求和所述第二请求与在重排序表中的每个表条目进行比较,每个表条目具有共享地址部分,以及与所述两个或者更多可独立寻址的子通道中的每一个相对应的独立地址部分;以及通过以下操作来构建对所述随机存取存储器器件的存储器请求,所述操作包括将所述第一请求和一个或多个其他请求进行组合以访问所述通道之中的第一可独立寻址的子通道,以及将所述第二请求和一个或多个其他请求进行组合以访问所述通道之中的第二可独立寻址的子通道。2.如权利要求1所述的方法,还包括判断请求的共享地址值是否与表条目的共享地址部分相匹配;以及如果匹配,则判断该表条目的独立地址部分是否为空。3.如权利要求2所述的方法,还包括如果该表条目的独立地址部分为空,则将所述请求插入到所述表条目中。4.如权利要求3所述的方法,还包括将所述请求转发至相关联的子通道。5.如权利要求4所述的方法,还包括在将所述请求转发至相关联的子通道之后,将该空表条目返回至所述重排序表的末尾。全文摘要根据一个实施例,公开了一种存储器控制器。该存储器控制器包括分配逻辑、重排序表和事务汇集器。该分配逻辑接收访问存储器通道的请求,并且分配所述请求以访问在所述通道之中的两个或更多的可独立寻址的子通道中的一个。该重排序表包括两个或者更多的表元素。每个表元素都具有共享地址部分,以及与所述两个或者更多可独立寻址的子通道中的每一个相对应的独立地址部分。该事务汇集器将在重排序表元素中的共享地址部分和独立地址部分进行组合,并发出单个存储器事务。文档编号G06F13/16GK101930412SQ20101016666公开日2010年12月29日申请日期2006年6月23日优先权日2005年6月23日发明者J·秋山,P·布朗,W·克利福德申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1