具有流水线的计算电路的存储器系统 以及提供数据的方法 【技术领域】
本发明涉及计算机系统,更具体地说,涉及计算机的中央处理单元中的高速缓存系统。
背景技术
许多现代计算系统使用具有流水线体系结构(pipelined architecture)的处理器以增大指令吞吐量。在理论上,当流水线处理器在执行安排得很好的顺序指令流时它能在每个机器周期内执行一个指令。即使指令本身含有或需要若干个要执行的单独的微指令(microinstruction),也能实现这一点。流水线处理器的操作是通过把一个指令的执行分解成若干阶段来进行的,每阶段需要一个机器周期去完成。在流水线处理器中,在第一个指令实际执行完成之前便开始处理第二个指令,从而减小了延迟时间。事实上,在任何给定时刻能有多个指令处于不同的处理阶段。这样,系统的总体指令执行延迟时间(这通常认为是一个指令序列启动时刻和结束执行时刻之间的延时)能显著地减小。
在一些现代计算机系统中,整数和商用指令流具有许多加载(load,装入),它们的目标要在其下一个指令中立即被使用。利用更高频率的微处理器,流水线深度已经增加,从而使一级数据高速缓存(L1 Dcache)加载访问(load access)可以是许多周期,在该时间期间任何后续的独立指令都必须拖延(stall)。已经提议一个附加的小尺寸数据高速缓存,称作L0或零级高速缓存,以缓解较长地L1数据高速缓存访问,在那里L0典型地是一个小尺寸(1-8KB)的一周期总前导访问时间的高速缓存。然而,在高频率流水线设计中,L0高速缓存一直伴随着若干问题,包括:由于它们的小尺寸和直接映射特性(单路关联)造成的高不中(miss,未命中)率(30-50%),因又一个全数据高速缓存级显著增加的复杂性,由于它们持续使用所造成的高功耗以及长行(线)填充时间造成行(线)参考后沿拖延。这些因素的结合,加上极高频深度流水线,已经导致一般放弃L0高速缓存。
所以,需要一个有短的前导访问时间(lead access time)的小高速缓存,它有低不中率、低功耗和短的填充行(线)时间。
【发明内容】
先有技术的缺点被本发明克服,在一个方面,本发明是一个用于具有流水线的计算电路的存储器系统,该流水线中包括至少一个功能单元。一个地址发生器产生存储器地址。一个相关高速缓存存储器响应该地址发生器并由该存储器地址寻址。一个高速缓存目录与该高速缓存存储器相关联。该高速缓存存储器能够产生高速缓存存储器输出。一个非相关的、无目录的关联存储器响应该地址发生器并可由该存储器地址寻址。该关联存储器接收来自高速缓存存储器的输入数据。该关联存储器能够产生关联存储器输出,它被传递给功能单元。一个比较电路比较该关联存储器输出和高速缓存存储器输出,并且当关联存储器输出不等于高速缓存存储器输出时发出一个比较错信号(miscompare signal)。
在另一方面,本发明是一种向流水线的功能单元提供数据的方法。一个相关高速缓存存储器被以一存储器地址寻址,从而产生高速缓存存储器输出。一个非相关的、无目录的关联存储器以该存储器地址寻址,从而产生关联存储器输出。该关联存储器输出被传递给功能单元。该高速缓存存储器输出被与关联存储器输出比较。当该高速缓存存储器输出与关联存储器输出不相同时,该功能单元被禁止(disabled)。
由下文结合附图对优选实施例的描述,本发明的这些和其他方面将变得清楚。如对本领域技术人员是显然的那样,可以实现本发明的许多变化和修改而不脱离所公开的新概念的精神和范围。
【附图说明】
图1是本发明一个实施例的方框图。
图2是可以与本发明一个实施例一起使用的基本L1数据高速缓存加载端口结构的方框图。
图3是可以与本发明一个实施例一起使用的关联存储器的方框图。
【具体实施方式】
现在详细描述本发明的一个优选实施例。参考附图,在各图中类似数字代表类似的部件。如在这里的描述和整个权利要求中所使用的那样,下列词在这里取其明确关联的意义,除非上下文清楚表明不是这样:a、an(一个)和the(该)的意义包括复数引用(plural reference),in(在...中)的意义包括in和on(在...中,在...上)。
如图1中所示,本发明的一个实施例是用于具有流水线的计算电路的存储器系统100,该流水线包括至少一个功能单元150,如算术-逻辑单元(ALU)。通常,地址发生器110产生存储器地址112,该地址由该计算电路用于访问(存取)在存储器中存储的数据。该计算电路包括相关高速缓存存储器(coherent cache memory)120(也称作L1数据高速缓存),它可由该存储器地址112寻址。相关高速缓存存储器120被用于存储新近访问过的可能被再次使用的被读数据。(存储数据不是保留在LBUF中)。高速缓存目录124与该高速缓存存储器相关联,提供关于高速缓存命中或不中方面的信息。高速缓存存储器120产生高速缓存存储器输出122,它一般有被功能单元需要的高概率。通常,访问相关高速缓存存储器120要用若干周期。在完成一次对高速缓存存储器120的访问时,在GPR寄存器文件126中记录一次命中。
一个非相关的、无目录的关联存储器(non-coherent directory、lessassociative memory)130(也称作加载缓冲器或LBUF)也可由存储器地址112寻址。由于它的非相关、无目录性质,还由于它相对较小并靠近执行单元,该关联存储器130可在单个周期内被访问。关联存储器130接收来自高速缓存存储器120的输入数据,并能够产生关联存储器输出132,该输出被传递给功能单元150。
一旦接收到,比较电路140便把关联存储器输出132与高速缓存存储器输出122加以比较。当关联存储器输出132不等于高速缓存存储器输出122时,比较电路140发出一个比较错信号(miscompare signal)。一个临时关联存储器输出缓冲器134缓冲关联存储器输出132,直至由比较电路140收到相应的相关高速缓存存储器输出122为止。发出比较错信号142将触发流水线拖延。再有,当发出比较错信号142时,相关高速缓存存储器输出122被写入关联存储器130。
对于一个实用和有用的如同L0那样的数据高速缓存,如果它能被独特地定制成只为那些它有价值的从属加载(dependent load)应用场合,如果它能被做成在总体上忽略相关性规则,如果对它预定的工作负荷它的命中率能达到80%,如果对一个不中所付出的代价能保持不超过访问L1数据高速缓存所需的额外周期,以及如果它能实现一个或两个周期的重新加载(reload)但无需增加会拖延流水线的额外L1数据高速缓存读周期,那么它就会是有价值的和实用的。该关联存储器130应该是一个足够小尺寸的阵列(例如2-4KB),从而只用两级选择器便能访问任何字:一个行地址选择或RAS以及一个列地址选择或CAS。如果在该关联存储器130的高速缓存地址锁存器本身中利用零延时地址产生方案,并实现最小地址再加电,则一个2KB关联存储器130能造成与ALU/AGEN单元相同的定时/周期时间,如果从核心芯片布局(floor plan)和流水线的观点把它看成如同ALU/AGEN的一个对等组元的话。
关联存储器130加载缓冲器使用算法可以概括如下:
4KB加载提取缓冲器
只取行,因为加载的从属使用
只取最近64行的缓冲器
64字节行有4个16字节子行
加载缓冲器是非相干的
加载缓冲器以L1端口0并行提取
对于从属性加载,如同一个拖延减小器工作
向RA/RB旁路寄存器提供早期结果
只有L1加载提取写寄存器文件(一个推测的LBUF目标从不写
该寄存器文件)
到加载缓冲器子行的存储被忽略
只有基本加载类型能访问加载缓冲器
没有符号扩展、节字反转、DW交叉加载
没有LQ、浮点加载
需要HW对齐
违反这些限制的加载造成加载缓冲器不中
由于希望关联存储器130不干扰正在进行的其他高速缓存存储器120加载访问,所以希望使关联存储器130保持小的行尺寸。参考图2,一个实施例利用一个双宽度双端口(等效于单宽度伪四端口)L1数据高速缓存120模式的基本高速缓存200,每个功能单元使用一个端口(假定涉及四个功能单元)。许多指令集体系结构要求16字节的四字加载功能,所以每个端口是16字节宽。四个读端口210(为简单,只显示其中的两个)被大量地用于突发和流加载的情况,如加载加倍、移动字符串、大量数值循环等,在这些情况中关联存储器130LBUF高速缓存是没有价值和未被允许的。然而,对于从属加载以及关联存储器130LBUF对减小拖延有价值的加载使用情况,平均每周期少于一个端口被用于加载。这样,当执行一个有从属应用的标量加载时,它几乎总是有其余三个端口空闲。在这种情况,该单个加载被允许并行访问全部四个读端口,对于总共64字节行的访问,每个端口访问不同的顺序16字节子行。这样,在单周期访问/再加载中能实现64字节的行尺寸,这在其后的周期中不造成访问总线或阵列干扰。如果偶然有两个或三个加载要并行执行,则只存在一个或两个自由读端口。于是,在这些情况中,只有剩余的一个或两个自由16字节端口还能把子行提取到关联存储器130LBUF(即总计328或488)。为处置这种情况,64B行的每个16B子行有一个单独的有效位指出它是否存在于关联存储器130LBUF中。即使有648行大小可用,一个直接映射2KB-4KB关联存储器130LBUF的命中率仍很差,约为50-60%。对于一个不中予以大约二个周期的代价,仍得不到什么增益。
再参考图1,该关联存储器130LBUF不是用做一般情况的高速缓存,而是做为特殊情况的高速缓存,以在普通D-形式(有效地址=基地址+偏移)加载与一从属使用有冲突时消除拖延。例如,如果从属使用加载的60%有高度可预测的目标值(如以计数器执行的硬件监视所发现的那样),使用值预测方案提供加载目标早期值以消除任何拖延。然后,只对于这从属使用加载的剩余40%,使用关联存储器130LBUF去高速缓存它们以消除拖延。这又把关联存储器130LBUF的有效大小增大到约40KB(1/40%×16KB),它能给出约90%命中率。
如图3中所示,可与所示实施例一起使用的关联存储器300包括一个高速缓存地址寄存器312,它寻址一个行地址选择器314和一个列地址选择器316。一个12位宽关联存储器目录310也被该高速缓存地址寄存器312寻址,并向一个8路关联比较器320输出它的值,它也输出到列地址选择器316。
关联存储器130LBUF的若干特征大大地简化了该实现并显著提高了访问路径的速度,允许更快的周期时间和/或更大的关联存储器130LBUF尺寸。关联存储器130LBUF不需保持相关这一事实意味着关联存储器130LBUF不需要由总线逻辑来监听,意味着由于再加载、更新等造成的任何困难的周期窗情况被忽略,还意味着如果关联存储器130LBUF被作为直接映射(单路关联)高速缓存来实现的话根本不需要LBUF高速缓存目录。于是,关联存储器130LBUF被称作缓冲器而不称作高速缓存的的理由就是因为这种非相关性性质。
访问关联存储器130LBUF的每个加载还必须总要启动L1数据高速缓存存储器120加载访问,这一要求使得上述非相关性简化成为可能。这一要求无论如何都是需要的,以允许在关联存储器130LBUF不中时立即再加载关联存储器130LBUF行(这也是为了不使后来高速缓存存储器120访问(存取)去再加载关联存储器130LBUF)。这样,当高速缓存存储器120命中访问时,正确的和相关的数据将总是在猜测性非相关但快速的关联存储器130LBUF访问之后n减1周期内准备好(这里n是L1数据高速缓存访问所需周期数)。所以,猜测性关联存储器130LBUF访问数据能作为旁路程的/转发的数据被功能单元立即使用,而且该数据能在暂存寄存器中被缓冲一个或多个周期,在那里它能与高速缓存存储器120访问的非猜测性数据进行比较。
如果这两个值一致,则肯定早些时候使用的猜测性关联存储器130LBUF输出132值是正确的。如果这两个值不一致(即发出了比较错信号142),则知道猜测性关联存储器130LBUF输出132数据是不正确的,这被处理为关联存储器130LBUF不中,需要从已提取的高速缓存存储器120输出122再加载。
这一系统的又一个好处是在GPR寄存器文件126上不需要附加的写端口,因为正确的由关联存储器130LBUF访问的数据从不写入寄存器文件126。这些数据只用于到ALU150等的快速旁路/转发路径,而且只有总是正确的高速缓存存储器120数据被写入寄存器文件126。关联存储器130LBUF的非相关性性质还允许它忽略可能写它的一行的存储。这是几乎没有性能损失的另一个简化,因为特别是对于从属加载使用情况和在通常优化的代码环境中,极不可能重新访问已存储的关联存储器130LBUF数据。
上文描述的实施例只是作为演示示例给出。很容易理解,由本说明公开的具体实施例可以做出许多变体而不脱离本发明。因此,本发明的范围由下文中的权利要求确定,而不是局限于上文具体描述的实施例。