降低高速缓存的功耗转让专利

申请号 : CN200610109170.9

文献号 : CN1908859B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 石原亨法尔扎·法拉赫

申请人 : 富士通株式会社

摘要 :

降低高速缓存的功耗。在一个实施例中,一种用于降低高速缓存上的功耗的方法包括:根据哪个代码可写入与高速缓存分开的存储器来确定代码布置。该代码布置减少了当将代码从存储器载入高速缓存时高速缓存行间顺序流的出现。该方法还包括:根据代码布置来编译代码;以及将代码写入存储器中,用于随后根据代码布置将代码从存储器载入高速缓存中以降低高速缓存上的功耗。在另一实施例中,该方法还包括:确定高速缓存的非均匀架构,用以针对高速缓存中的各高速缓存组提供最优数量的高速缓存路。该非均匀架构允许高速缓存中的多个高速缓存组具有彼此不同的关联值。该方法还包括:实现高速缓存中的非均匀架构以进一步降低高速缓存上的功耗。

权利要求 :

1.一种用于降低高速缓存上的功耗的方法,该方法包括如下步骤:根据哪个代码可写入与高速缓存分开的存储器来确定代码布置,该代码布置减少了当将代码从存储器载入高速缓存时高速缓存行间顺序流的出现;

根据代码布置来编译代码;

将代码写入存储器中,用于随后根据代码布置将代码从存储器载入高速缓存中,以降低高速缓存上的功耗;

确定高速缓存的非均匀架构,用以针对高速缓存中的各高速缓存组提供最优数量的高速缓存路,该最优数量提供了高速缓存中的最大功率降低,该非均匀架构允许高速缓存中的多个高速缓存组具有彼此不同的关联值;和实现高速缓存中的非均匀架构,以进一步降低高速缓存上的功耗,由此在第一高速缓存组与第一数量个活动路相交并且第二高速缓存组与第二数量个活动路相交的情况下,所述第一高速缓存组与所述第二高速缓存组具有不同的关联值,其中所述第一数量与所述第二数量不同。

2.根据权利要求1所述的方法,其中所述高速缓存是处理器上的指令高速缓存。

3.根据权利要求1所述的方法,其中与所述高速缓存分开的所述存储器包括与处理器相关联的主存储器。

4.根据权利要求1所述的方法,其中高速缓存行间顺序流包括在高速缓存中跨越高速缓存行边界的基本块。

5.根据权利要求1所述的方法,其中:

减少高速缓存行间顺序流的出现减少了执行代码过程中的标签查找;并且减少执行代码过程中的标签查找降低了高速缓存上的功耗。

说明书 :

技术领域

本发明总体上涉及一种存储器系统,更具体地,涉及降低高速缓存上的功耗。

背景技术

在处理器上的高速缓存通常会消耗相当大量的功率。作为示例,在ARM920T处理器上的指令高速缓存占用了该处理器的功耗的约25%。作为另一示例,在StrongARM SA-110处理器(其针对低功率应用)上的指令高速缓存占用了该处理器的功耗的约27%。

发明内容

本发明的具体实施例可以降低或消除与现有的存储器系统相关的问题和缺点。
在一个实施例中,一种用于降低高速缓存的功耗的方法包括如下步骤:根据哪个代码可写入与高速缓存分开的存储器来确定代码布置(placement)。该代码布置减少了当将代码从存储器载入高速缓存时高速缓存行(cache-line)间顺序流的出现。该方法还包括如下步骤:根据代码布置来编译代码,以及将代码写入存储器中,用于随后根据代码布置将代码从存储器载入高速缓存中以降低高速缓存上的功耗。
在另一实施例中,该方法还包括确定高速缓存的非均匀架构,用以为高速缓存中的各高速缓存组提供最优数量的高速缓存路的步骤。非均匀架构允许高速缓存中的多个高速缓存组具有彼此不同的关联(associativity)值。该方法还包括实现高速缓存中的非均匀架构以进一步降低高速缓存上的功耗的步骤。
本发明的具体实施例可以提供一个或更多个技术优点。作为示例而非出于限制,这些具体实施例可以降低高速缓存上的功耗。具体实施例提供了一种用以降低高速缓存上的功耗的非均匀高速缓存架构。具体实施例便于代码布置以减少在高速缓存中的标签查找、路查找、或标签查找和路查找两者,从而降低高速缓存上的功耗。具体实施例便于同时优化高速缓存架构和代码布置以减少高速缓存路或标签访问以及高速缓存未中(cache miss)。具体实施例可以提供这些技术优点中的全部技术优点、一些技术优点或不提供这些技术优点。具体实施例可以提供一个或更多个其他技术优点,对于本领域技术人员来说,根据此处的附图、说明书以及权利要求书,这些其他技术优点中的一个或更多个将易于被清楚理解。

附图说明

为了提供对本发明及其特征和优点的更全面的理解,结合附图参照以下说明,在附图中:
图1例示了一种用于降低高速缓存上的功耗的示例非均匀高速缓存架构;和
图2A和2B例示了用于降低高速缓存上处的功耗的示例代码布置。

具体实施方式

图1例示了一种用于降低高速缓存10上的功耗的示例非均匀高速缓存架构。在具体实施例中,高速缓存10是处理器的用于临时存储用于在该处理器上执行的代码的组件。对“代码”的引用包括一个或更多个可执行指令、其他代码、或在合适的情况下可执行指令和其他代码二者。高速缓存10包括多个组12、多个路14以及多个标签16。组12与多个路14和多个标签16逻辑地相交。组12与路14之间的逻辑交叉包括高速缓存10中的用于存储代码的多个彼此相邻的存储单元。组12与标签16之间的逻辑交叉包括高速缓存10中的彼此相邻的一个或更多个存储单元,该存储单元用于存储便于对存储在高速缓存10中的代码进行定位、对存储在高速缓存10中的代码进行识别、或对存储在高速缓存10中的代码进行定位和识别的数据。作为示例而非限制,组12a与标签16a之间的第一逻辑交叉可以包括如下的一个或更多个存储单元,该存储单元用于存储使得便于对存储在组12a与路14a之间的第二逻辑交叉处的代码进行定位、对存储在该第二逻辑交叉处的代码进行识别或对存储在该第二逻辑交叉处的代码进行定位和识别的数据。高速缓存10还包括多个读出放大器(sense amplifier)18。在具体实施例中,读出放大器18用于读取高速缓存10中的存储单元的内容。尽管对包括根据特定组织布置的特定组件的特定高速缓存10进行了例示和描述,但是本发明考虑了包括根据任何合适的组织布置的任何合适的组件的任何合适的高速缓存10。此外,本发明并不限于高速缓存10,而是考虑了任何合适的存储器系统。
在具体实施例中,在高速缓存10中的非均匀架构降低了在高速缓存10上的功耗、来自高速缓存10电流泄漏或这两者。非均匀架构使得多个组12可以具有彼此不同的多个关联值。在具体实施例中,如果第一组12与第一数量个活动路14相交、第二组12与第二数量个活动路14相交、并且该第一数量与该第二数量不同,则第一组12具有与第二组12不同的关联值。作为示例而非限制,根据高速缓存10中的非均匀架构,在组12a和组12b中路14a、路14b、路14c以及路14d都是活动的;在组12c和组12d中只有路14a和路14b是活动的;在组12e、组12f、组12g以及组12h中只有组14a是活动的。在具体实施例中,活动存储单元可用于进行存储,而不活动存储单元不可用于进行存储。
在具体实施例中,在对高速缓存10的设计过程中确定在各高速缓存组中的高速缓存路的最优数量。作为示例而非限制,如下所述,硬件、软件、或嵌入式逻辑组件或两个或更多个这些组件的组合可以执行用于确定在各高速缓存组中的高速缓存路的最优数量的算法。一个或更多个用户可以使用一个或更多个计算机系统来向一个或更多个组件提供输入或从一个或更多个组件接收输出。在合适的情况下,对“高速缓存路”的引用包括高速缓存10中的路14。在合适的情况下,对“高速缓存组”的引用包括高速缓存10中的组12。在具体实施例中,在应用程序正在运行时,可以动态地改变在高速缓存10中的活动高速缓存路的数量。在具体实施例中,一个或更多个休眠晶体管可用于动态地改变高速缓存10中的活动高速缓存路的数量。在具体实施例中,可以通过去除用于将电源连接到未使用高速缓存路中的存储单元的通道(vias),来将到未使用高速缓存路的电源与未使用高速缓存路的连接断开。也可以按同样的方式将未使用存储单元与位线和字线断开。
在具体实施例中,可以使用第二有效位(valid bit)来标记未使用高速缓存块。在合适的情况下,对“高速缓存块”的引用包括组12与路14之间的逻辑交叉。在合适的情况下,高速缓存块还包括组12与对应于路14的标签16之间的逻辑交叉。在具体实施例中,将一个或更多个有效位附到各组12中的各标签16中。在具体实施例中,这种位是各组12中的各标签16的一部分。如果第二有效位是1,则相对应的高速缓存块在出现了高速缓存未中的情况下不用于替换。访问不活动高速缓存块会导致高速缓存未中。在具体实施例中,为了降低在非均匀高速缓存10处的功耗,使在用于访问的高速缓存组中被标记为不活动的高速缓存路的读出放大器18不活动。在具体实施例中,这是通过检查存储器地址寄存器22的组索引20来实现的。作为示例而非限制,在图1所例示的非均匀高速缓存10中,当以组12e、组12f、组12g或组12h为访问目标时,使读出放大器18c和读出放大器18d不活动。当以组12c、组12d、组12e、组12f、组12g或组12h为访问目标时,使读出放大器18e、读出放大器18f、读出放大器18g以及读出放大器18h全都不活动。
对于所有指令取(fetch),不必执行标签访问和标签比较。考虑紧接在指令i之后执行的指令j。存在三种情况:
1.高速缓存行内顺序流
当i和j指令均驻留在同一高速缓存行上并且i是非分支指令或未采用(untaken)分支时,会出现该情况。
2.高速缓存行间顺序流
该情况类似于第一种情况,唯一的不同是i和j驻留在不同的高速缓存行上。
3.非顺序流
在此情况下,i为已采用分支指令,并且j是它的目标。
在第一种情况下,即高速缓存行内顺序流,容易检测到j和i驻留在同一高速缓存路中。因此,用于指令j的标签查找是不必要的。另一方面,针对非顺序取要求标签查找和路访问,例如已采用分支(或非顺序流)或跨过高速缓存行边界(或高速缓存行间顺序流)的顺序取。结果,在高速缓存行内顺序流的情况下使标签16和路14的存储单元不活动,会降低高速缓存10处的功耗。具体实施例使用该技术或类似的行间路存储(ILWM)技术。
图2A和2B例示了用于降低高速缓存10处的功耗的示例代码布置。考虑7个指令的基本块。将基本块表示为A,将指令表示为A1、A2、A3、A4、A5、A6以及A7。A7是已采用分支,A3不是分支指令。在图2A中,A7驻留在高速缓存行26e的字24d处。A3驻留在高速缓存行26d的字24h处。当执行A3或A7时,需要进行标签查找,这是因为在各情况下不清楚在高速缓存10中是否驻留有下一指令。然而,在图2B中,A位于高速缓存10的地址空间中,使得A不跨越任何高速缓存行边界。由于A不跨越任何高速缓存行边界,因此对于A3可以排除高速缓存访问和标签访问。在具体实施例中,改变主存储器中的基本块的布置,使得当从主存储器将频繁访问的基本块加载到高速缓存10中时这些频繁访问的基本块不会跨越任何高速缓存行边界(或者跨越尽可能少的高速缓存行边界)。
对高速缓存行间顺序流的出现次数的减少会降低高速缓存10处的功耗。尽管对高速缓存行大小的增大趋于减少这种出现,但是对高速缓存行大小的增大也趋于使与高速缓存未中相关联的片外存储器访问的次数增加。具体实施例使用这样的算法:将该平衡关系(trade-off)考虑在内,并考察不同的高速缓存行大小,以使存储器层级的总功耗达到最小。
考虑具有L个字的高速缓存行大小的大小为C(其中C=2m个字)的直接映射高速缓存10。在高速缓存读取未中时从存储器取出L个连续的字。在直接映射高速缓存10中,可以通过来计算包含有位于存储器地址M处的字的高速缓存行。因此,如果以下条件成立,则两个存储器位置Mi和Mj将映射到同一高速缓存行:

可以将以上方程写成:
(n·C-L)<(Mi-Mj)<(n·C+L)  (1)
其中n为任意整数。如果基本块Bi和Bj在迭代次数为N的循环内,并且它们的存储器位置Mi和Mj满足条件(1),则当执行该循环时高速缓存冲突未中发生至少N次。对于W路组关联性高速缓存10,这将被扩展。如果在循环中访问满足条件(1)的W个以上的具有不同值的不同地址,则会在W路组关联性高速缓存10中发生高速缓存冲突未中。M是存储器地址。因此,可以容易地根据高速缓存参数计算出高速缓存冲突未中的数量,所述高速缓存参数例如是高速缓存行大小、高速缓存组的数量、高速缓存路的数量、各基本块在高速缓存10的存储器地址空间中的位置以及目标应用程序的各闭合循环的迭代次数。具体实施例或多或少地同时对高速缓存配置和代码布置进行最优化,以针对给定性能限制而降低高速缓存10处以及片外存储器的动态功耗和泄漏功耗。在具体实施例中,一算法针对给定关联性对各高速缓存组中的高速缓存冲突的次数进行计算。
可以使用以下符号来提供代码布置的示例问题定义:
Ememory,Eway以及Etag:分别是对主存储器每次访问的能耗、对单个高速缓存路每次访问的能耗以及对高速缓存标签存储器每次访问的能耗。
Pstatic:主存储器的静态功耗。
TEmemory和TEcache:分别是主存储器(例如片外存储器)的总能耗和高速缓存10的总能耗。
Pleakage:1字节高速缓存存储器块的泄漏功耗。
TEleakage:高速缓存存储器由于泄漏而产生的总能耗。
Wbus:存储器访问总线宽度(字节)。
Winst:指令的大小(字节)。
Scache:高速缓存存储器中的组的数量。
Caccess:单次存储器访问所需的CPU周期的数量。
Cwait:存储器访问的等待周期的数量。
Fclock:CPU的时钟频率。
nline:高速缓存存储器的行大小(字节)。
ai:在第i个高速缓存组中的路的数量。
Nmiss:高速缓存未中的数量。
Ninst:执行的指令的数量。
Xi:第i个高速缓存组的“全路访问”的次数。在“全路”访问中激活了目标高速缓存组中的所有高速缓存路和高速缓存标签。在高速缓存行间顺序流或非顺序流的情况下“全路访问”是必要的。否则,只激活单个高速缓存路。
Ttotal和Tconst:总执行时间和对它的限制。
Ptotal:存储器系统的总功耗。
假设Ememory、Eway、Etag、Pstatic、Pleakage、Wbus、Winst、Scache、Fclock、Caccess、Cwait以及Tconst是给定的参数。待确定的参数是nline、ai。Nmiss、Xi以及Ttotal是代码布置Wbus、Winst、nline以及ai的函数。可以根据一个或更多个现有方法找出Nmiss、Ninst以及Xi。由于通常将高速缓存10分成多个子存储体(sub-bank)并且每次访问只激活单个子存储体,因此Eway与nline无关。
可以将以下示例问题定义用于代码布置:对于Ememory、Eway、Etag、Pstatic、Pleakage、Wbus、Winst、Scache、Fclock、Caccess、Cwait的给定值以及原始目标代码,确定代码布置nline和ai,以使在给定时间限制Tconst下的存储器层级的总功耗Ptotal最小化。可以使用以下公式来计算Ttotal、TEmemory、TEcache、TEleakage以及Ptotal:
T total = 1 F clock · { N inst + N miss · ( C access · n line W bus + C wait ) }
TE memory = E memory · N miss · n line W bus + P static · T total
TE cache = E wity · N inst + E way · N miss · n line W inst + E tag · N miss + E way · Σ i = 0 S cache { ( a i - 1 ) · X i } + E tag · Σ i = 0 S cache ( a i · X i )
TE leakage = P leakage · T toatl · n line · Σ i = 0 S cache a i
P total = ( TE memory + TE cache + TE leakage ) T total , T total T const
在具体实施例中,算法以初始高速缓存配置(nline=32,Scache=8,ai=64)开始。在下一步骤中,算法找到应用程序的每个块在地址空间中的最优位置。在具体实施例中,这是通过改变地址空间中的布置函数的次序并找出最佳排序来执行的。对于每个排序,算法通过迭代地求得这样的高速缓存组来极大地降低能量:对于该高速缓存组,将高速缓存路的数量减少2倍会得到最大功率降低。通过计算针对给定关联性的高速缓存未中的数量来求得功耗(Ptotal)和运行时间(Ttotal)。在不对高速缓存10进行仿真的情况下并且通过针对应用程序对各循环的迭代次数和各基本块在地址空间中的位置进行分析,可以执行该计算。连同针对各高速缓存组的高速缓存路的最优数量一起选择给出了最低能量的排序。该算法针对不同的高速缓存行大小执行以上多个步骤,并且只要功耗降低了就继续下去。当改变了高速缓存行大小时可以固定函数的次序。这是个好的简化,因为当将高速缓存行大小改变2倍时函数的最优排序通常不会变化很大。在具体实施例中,该算法的计算时间与函数的数量呈二次方关系,并与应用程序的循环次数呈线性关系。
作为示例而非限制,以下伪代码实现了上述算法的一个或更多个示例要素。
Procedure MinimizePower
输入:Ememory、Eway、Etag、Pleakage、Wbus、Winst、Scache、Fclock、Caccess、Cwait、Tcount、Pstatic以及原始目标代码。
输出:nline、一组ai以及最优化目标代码中的函数的次序
令L为目标程序中的函数列表(按它们的执行次数的降序排序);
  Pmin=Tmin=无穷大
  for每个nline∈{32,64,128,256,512}do
          Pinit=Pmin;Tinit=Tmin,
          repeat
             Pmin=Pinit;Tmin=Tinit,
             for(t=0;t<|L|t++)do
                p=L[t];
                for每个p’∈L并且p’p do
                   将函数p插在p’的位置;
                   将所有ai设置为64并计算Ptotal和Ttotal;
                   Repeat
                      1.找出这样的高速缓存组,即,将其高速缓存路
                        的数量减少2倍会导致最大功率降低
                      2.将高速缓存组的高速缓存路的数量除以2,并
                        计算Ptotal和Ttotal;
                 until((Ptotal停止减小)或者(Ttotal>Tconst))
                 if(Ptotal Pmin&Ttotal Tmin)then
                     Pmin=Ptotal;Tmin=Ttotal;BESTlocation=p’;
                 end if
             end for
             将函数p置于BESTlocation的位置
         end for
      until(Pmin停止减小)
      if(Pinit=Pmin&Tinit Tconst)then
         输出BESTline、BESTways以及BESTorder;Exit;
      else
        BESTline=nline;BESTways=一组ai,
        BESTorder=函数的次序;
      end if
    end for
end Procedure
在具体实施例中,硬件、软件或嵌入式逻辑组件或两个或更多个这些组件的组合执行以上算法的一个或更多个步骤。一个或更多个用户可以使用一个或更多个计算机系统来向一个或更多个组件提供输入或从一个或更多个组件接收输出。
利用具体实施例对本发明进行了描述。本领域的技术人员可以理解对用于描述本发明的具体实施例的一个或更多个修改、替换、变化、变更或变型,这些修改、替换、变化、变更或变型是在所附权利要求的范围内。本发明涵盖所有这种修改、替换、变化、变更以及变型。