具有软件-硬件共同管理的高速缓存系统的多核处理器
本申请要求2018年12月4日提交的名称为“MULTI-CORE PROCESSOR WITHSOFTWARE-HARDWARE CO-MANAGED CACHE SYSTEM”的美国临时申请16/209,795的优先权,其全部内容通过引用结合在本申请中。
技术领域
本文中申请的主题一般地涉及管理计算机系统中的高速缓存存储器。更具体地,该主题涉及用于软件-硬件共同管理的高速缓存系统的方法和系统。
背景技术
在并行计算中,由于多个处理器核需要同时访问存储器,因此低存储器访问时延是非常重要和具有挑战性的。在传统的多核处理器中,高速缓存用于降低存储器访问时延。然而,高速缓存一致性协议需要被实现以向程序提供正确的存储器模型。在大规模时,用于管理多个高速缓存系统的高速缓存一致性协议可能是非常繁琐和低效的。期望改进管理高速缓存的方式。
发明内容
本申请内容的各方面提出了多核软件-硬件共同管理的高速缓存系统。在一些实施方式中,提出了一种在计算环境中执行的计算机程序的方法,用于管理高速缓存存储器。该方法可以包括:指定存储器的第一区域用作只读区域;当存储器的第一区域用作只读区域时,指定存储器的第一区域可高速缓存;指定存储器的第二区域用作只读区域;当存储器的第二区域用作只读区域时,指定存储器的第二区域可高速缓存;在存储器的第一区域中引起改变存储器的第一区域的存储器内容的写动作;在引起存储器的第一区域的写动作下,使可高速缓存的存储器的第一区域无效;以及当可高速缓存的第一区域被无效时,将存储器的第二区域保持为可高速缓存。
在一些实施方式中,该方法还包括:指示第一处理器在存储器的第三区域中执行第一写动作;指示第二处理器在存储器的第三区域中执行第二写动作,其中,第一写动作与完成第一写动作或第二写动作所必需的段写动作之间没有任何依赖关系;以及在不具有任何依赖关系的情况下,当第一处理器执行第一写动作以及第二处理器执行第二写动作时,将存储器的第三区域指定为可高速缓存区域。
在一些实施方式中,第二处理器与第一处理器执行第一写动作并行地执行第二写动作。
在一些实施方式中,第一写动作在存储器的第三区域中生成第一更新值,并且第二写动作在存储器的第三区域中生成第二更新值,并且该方法还包括:在第一更新值和第二更新值被另一个处理器使用之前,将第一更新值和第二更新值刷新到较低级存储器区域。
在一些实施方式中,存储器的第一区域包括多个可写入存储器寄存器,并且在一个操作周期内发生使存储器的第一区域无效。
在一些实施方式中,使存储器的第一区域无效包括:获取有效位矢量,有效位矢量至少包括指示存储器的第一区域是否包括有效信息的第一位以及指示存储器的第一区域是否能够由计算机程序高速缓存的第二位;以及更新第二位以指示存储器的第一区域不再能够由计算机程序高速缓存。
在一些实施方式中,该方法还包括:通过重新初始化第一位以及重新初始化第二位来再次使存储器的第一区域初始化为可高速缓存。
在一些实施方式中,提出了一种计算机设备。该计算机设备可以包括:至少一个处理器;存储器,通信上耦接到至少一个处理器并且可由软件程序配置可缓存的。至少一个处理器可以被配置成执行软件程序的指令,指令包括:指定存储器的第一区域用作只读区域;当存储器的第一区域用作只读区域时,指定存储器的第一区域可高速缓存;指定存储器的第二区域用作只读区域;当存储器的第二区域用作只读区域时,指定存储器的第二区域可高速缓存;在存储器的第一区域中引起改变存储器的第一区域的存储器内容的写动作;在引起存储器的第一区域的写动作下,使可高速缓存的存储器的第一区域无效;以及当可高速缓存的第一区域被无效时,将存储器的第二区域保持为可高速缓存。
在设备的一些实施方式中,至少一个处理器还被配置成执行由软件程序的指令,指令还包括:指示第一处理器在存储器的第三区域中执行第一写动作;指示第二处理器在存储器的第三区域中执行第二写动作,其中,第一写动作与完成第一写动作或第二写动作所必需的段写动作之间没有任何依赖关系;以及在不具有任何依赖关系的情况下,当第一处理器执行第一写动作以及第二处理器执行第二写动作时,将存储器的第三区域指定为可高速缓存区域。
在设备的一些实施方式中,第二处理器与第一处理器执行第一写动作并行地执行第二写动作。
在一些实施方式中,该设备还包括通信上耦接至存储器和至少一个处理器的较低级存储器;并且第一写动作在存储器的第三区域中生成第一更新值,并且第二写动作在存储器的第三区域中生成第二更新值,并且指令还包括:在第一更新值和第二更新值被另一个处理器使用之前,将第一更新值和第二更新值刷新到较低级存储器区域。
在设备的一些实施方式中,存储器的第一区域包括多个可写入存储器寄存器,并且使存储器的第一区域无效在一个操作周期内发生。
在设备的一些实施方式中,使存储器的第一区域无效包括:获取有效位矢量,有效位矢量至少包括指示存储器的第一区域是否包括有效信息的第一位以及指示存储器的第一区域是否能够由计算机程序高速缓存的第二位;以及更新第二位以指示存储器的第一区域不再能够由计算机程序高速缓存。
在设备的一些实施方式中,指令还包括:通过重新初始化第一位以及重新初始化第二位来再次使存储器的第一区域初始化为可高速缓存。
在一些实施方式中,提出了一种计算机程序的方法,用于管理多核处理器的高速缓存区域的有效性。该方法可以包括:存储表示第一存储器区域的第一标记以及至少包括第一位和第二位的第一矢量;存储表示第二存储器区域的第二标记以及至少包括第三位和第四位的第二矢量;将第一位、第二位、第三位和第四位设置为0;存储活动位指示符;当活动位指示符为0时,控制第一位以指示第一存储器区域是否为高速缓存的候选,并且控制第三位以指示第二存储器区域是否为高速缓存的候选;以及当活动位指示符为1时,控制第二位以指示第一存储器区域是否为高速缓存的候选,并且控制第四位以指示第二存储器区域是否为高速缓存的候选。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1示出了作为具有多个高速缓存的系统的典型示例的包括编号为0、1、……、K-1的K个核的多核处理器;
图2示出了根据一些实施方式软件如何动态地将不同区域的存储器更新为可缓存的图;
图3示出了通常如何通过每周期更新一个条目可以使高速缓存存储器无效的示例;
图4示出了本申请内容的各方面如何利用位的矢量使得高速缓存存储器在一个周期内被无效的示例;
图5示出了根据一些实施方式的在本申请内容的软件和硬件方案的实现中使用的多核处理器的示例性架构。
具体实施方式
在并行计算中,由于多个处理器核需要同时访问存储器,因此低存储器访问时延是非常重要和具有挑战性的。在传统的多核处理器中,高速缓存用于降低存储器访问时延。然而,高速缓存一致性协议需要被实现以向程序提供正确的存储器模型。在大规模时,用于管理多个高速缓存系统的高速缓存一致性协议可能是非常繁琐和低效的。
本申请内容的各方面描述了由软件和硬件共同管理的高速缓存系统。这在大规模多核处理器中在没有复杂硬件实现的情况下为存储器访问提供了良好的性能。
1.具有高速缓存一致性协议的多核处理器
图1示出了包括编号为0、1、……、K-1的K个核的多核处理器。核中的每个核与高速缓存配对。包括核和高速缓存的节点经由互连网络105彼此连接。存储器控制器110可以耦接至互连网络105以控制互连。在一些情况下,还可以包括芯片外存储器115以将数据提供给高速缓存以进行读取或写入。
当核访问存储器时,其将首先将高速缓存行带到其本地高速缓存中,然后读取或写入数据。当高速缓存在高速缓存行上本地工作时,如果其他核更新同一高速缓存行,则本地高速缓存中的数据可能过时。这是在多核处理器中本地高速缓存的许多潜在问题之一,并且高速缓存一致性协议通常用于解决这些问题。高速缓存一致性逻辑保持跟踪本地高速缓存中高速缓存的所有高速缓存行,并且基于共享信息授予操作权限。通常,该信息保存在目录中,并且当本地高速缓存需要从较低级的存储器层次结构的下层引入高速缓存行时,检查目录中用于该高速缓存的条目。根据高速缓存行的共享状态,立即授予权限,或者延迟授予权限直到适当的准备完成。基于目录的高速缓存一致性协议不能扩展到数百个核。即使可以实现将基于目录的高速缓存一致性协议扩展到数百个核,成本将高得令人望而却步。
2.具有软件-硬件共同管理的高速缓存系统的多核处理器
本申请内容的各方面描述了由软件和硬件共同管理的高速缓存系统,其避免使用高速缓存一致性协议。在一些实施方式中,每个本地高速缓存将具有由软件驱动的以下两个硬件接口:(1)使其内容无效或将其内容刷新到较低级存储器层次结构;(2)指定可以高速缓存的存储器区域。软件将负责指定什么区域可以缓存,并且可以根据软件程序的阶段灵活地将存储器区域从可缓存更改为不可缓存。在一些实施方式中,可以在一个周期内完成无效。可以在存储器中为每个标记保留多个有效位。可以使用包括多个位的矢量“有效位矢量”。两位中仅有一位可以作为有效位以指示存储器的该区域保持着供软件使用的有效信息。
本申请内容的各方面描述了如何通过本地高速缓存利用空间局部性和时间局部性,而无需使用高速缓存一致性协议的复杂且昂贵的硬件实现。由于软件能够规定存储器中哪些区域可缓存,因此本地高速缓存仅对由程序(被软件管理)指定的某些存储器区域进行高速缓存。例如,软件的程序员知道将软件限制到哪些存储器区域。硬件将处理从较低级的存储器层次结构引入高速缓存行以及服务来自核(被硬件管理)的请求。软件还可以使高速缓存无效或刷新高速缓存,以保证程序的正确性。
根据本申请内容的各方面,每个本地高速缓存将具有由软件驱动的以下两个硬件接口:(1)使其内容无效或将其内容刷新到较低级存储器层次结构;(2)指定可以高速缓存的存储器区域。高速缓存将不会对这些存储器区域之外的存储器位置进行高速缓存。例如,当读数据和写数据不在可缓存的存储器区域时,软件仅需为硬件设置少量参数并且控制何时使内容无效或者将内容刷新到更低一级的存储器结构中。
根据本申请内容的各方面,对于本地高速缓存中的每个本地高速缓存,软件规定待高速缓存的存储器区域。硬件可能没有高速缓存一致性功能,因此软件负责正确地指定这些区域以确保程序正确地运行。例如,如果数组A在特定时间段内是只读,则软件可以在该时间段内将A设置为可高速缓存的存储器区域。随着程序推进运行,一旦A可能在写操作中被更新,软件会在本地高速缓存中通过无效或刷新将A从可缓存区域中清除,从而声明A不再在可高速缓存区域中。
如果对本地高速缓存的请求在由软件限定的存储器区域之外,则该请求将被转发到较低级高速缓存并且本地高速缓存不执行任何动作。在较低级高速缓存中执行的任何动作将趋于变得更慢。
作为改变可高速缓存的区域的软件的示例,图2示出了一个示意图。在第一时间段中,矩阵A和B可以由软件设置为可高速缓存,原因是A和B最初是只读矩阵。计算C=A*B的操作可以在软件程序中发生。此后,可以发生另一操作,其中,A被更新为A=D+C。此时,由于A现在正被改变,因此软件可以使该高速缓存无效,使得A不再是可高速缓存区域的一部分,并且现在C和D被设置为可高速缓存。
根据本申请内容的各方面,以下是指定待高速缓存的区域从而避免使用高速缓存一致性协议的软件的一些示例伪代码:
{
//具有10000个元素的全局变量A和B
int A[10000];
int B[10000];
//来假设存在10个核并且每个核处理1000个元素
coreID=getCoreID();
-continued
SetReadOnlyregion(&A,&A+100);
for(i=0;i<1000;i++)
B[coreID*1000+i]=10*A[coreID*1000+i];
FlushLocalCache();
}
在一些实施方式中,如果每个核在区域的不同部分上工作并且核之间不存在依赖性,则可以甚至在存在针对该区域的存储器写入时将存储器区域设置为可高速缓存。例如,A=A+1,其中,A的每个元素以1递增。由于每个核对矩阵A的不同元素进行操作,因此假如高速缓存正在使用直写机制或者新值在被其他核再次使用之前被刷新到较低级存储器层次结构,则这些元素可以被每个本地高速缓存安全高速缓存。可以对软件进行编程以分析关于在程序中同时正被修改的不同元素或方面的那些属性,然后相应地指定可高速缓存区域的边界。此外,根据这些原理的各方面的示例实现包括如下软件:该软件指定什么区域可高速缓存,即使这些区域中的一些区域正在被写入,只要这些区域满足本文中描述的那些条件即可。
为了使高速缓存无效,所有高速缓存行的有效位可能需要被清除。如图3所示,如果有效位正常存储在SRAM(静态随机存取存储器)中,则这将需要许多周期。在这种情况下,每个周期只能更新一个条目。例如,如果高速缓存可以容纳一千个高速缓存行并且有效位存储在SRAM中,则将需要一千个周期来清除所有有效位,并且高速缓存在该时间内不能被使用。在这些常规条件下,使高速缓存无效是相当低效和缓慢的。期望提供用于使高速缓存无效的改进的方法。
如图4所示,根据本申请内容的各方面,在大多数情况下,可以在一个周期内完成无效。代替在SRAM中用于每个标记的单个有效位,可以在SRAM中为每个标记保留多个有效位。在许多情况下,向SRAM的每个字添加少量位的成本并不高。可以使用包括多个位的矢量“有效位矢量”。例如,假设“有效位矢量”具有仅两个位。在给定时间内,两位中仅有一位可以作为有效位以指示SRAM的该区域正存储着供软件使用的有效信息。使用“活动位”来从这两个位中选择一个位。“有效位矢量”中的所有位在高速缓存初始化期间被清除。当使用高速缓存时,被“活动位”选择的有效位的用法与单个有效位设计的使用方法相同。当软件决定使高速缓存无效时,其仅需要改变“活动位”来选择“有效位矢量”的另一位。这将指示由“有效位矢量”管理的SRAM的区域至少在一段时间内不再是可高速缓存区域的一部分。由于“有效位矢量”在初始化期间被清除,因此高速缓存变为空并且其在一个周期内完成。对于此解决方案,用于保持高速缓存行的存储器可能需要增加几位。例如,具有尺寸为20(宽度)×l024(深度)的SRAM保持存储器可能需要替换为21(宽度)×l024(深度)。这将是对SRAM中每个条目大小的设计的硬件的改变。然而,由于单个有效位矢量可以应用于整个高速缓存,因此速度可以显著增加,从而使得通过清除该矢量的仅活动位而在一个周期内清除高速缓存。
注意,一旦“活动位”被切换,则先前的有效位需要在其将来再次被重复使用之前被清除。在高速缓存的当前有效位被“活动位”选定时,清除先前有效位可以和处理服务请求同时进行。每周期只能清除一个条目,并且耗费至少与标记SRAM中的条目数量一样多的周期。如果在由“活动位”重新选择位之前清除过程尚未完成,则不能使用高速缓存直到该过程完成。该过程可以与软件的其他操作并行发生,使得在程序的运行中损失非常少的时间,即使存储器的该特定区域的该重新初始化过程可能需要更长时间。
图5示出了根据一些实施方式的在本申请内容的软件和硬件方案的实现中使用的多核处理器的示例性架构。该示例性架构包括主线程控制单元(master thread controlunit,MTCU)、包括线程控制单元(thread control units,TCU)和路由器以及高速缓存模块的64个集群、八(8)个存储器控制器(memory controllers,MC)。每个TCU可以包括其自己的本地高速缓存,并且指定存储器的什么区域可用于高速缓存可以由软件程序管理,该软件程序为每个TCU指定可缓存区域的范围。TCU可以被配置成响应于执行根据本文提供的描述的管理可高速缓存区域的方法的软件。
主TCU(MTCU)执行程序的串行部分,并且处理诸如spawn和join指令的特定XMT指令。MTCU在并行区段中将指令广播到所有集群,其中,这些指令被复制到本地指令缓冲器并且稍后由集群内的TCU提取。主TCU具有其自己的高速缓存L0,其仅在串行模式期间活动并且应用直写。当XMT处理器进入并行模式时,主TCU丢弃其本地高速缓存。由于选择了直写机制,因此刷新L0高速缓存的开销是微不足道的。当XMT在串行模式下操作时,L0高速缓存是MTCU的第一级高速缓存,并且并行存储器模块提供下一级的存储器层次结构,其类似于高级单处理器中的多级高速缓存层次结构。
集群是多个TCU(例如16个TCU)和其附属功能单元的集合。在图5中示出了集群的框图。TCU可以在并行模式下执行线程。TCU具有其自己的本地寄存器,并且它们是包括取指(fetch)、译码(decode)、执行、存储器访问和回写阶段的简单有序流水线。TCU可以具有非常简单的结构,并且不会积极追求最优性能。给定有限的芯片面积,由于众所周知的许多指令级并行(instruction level parallelism,ILP)技术的降低的回报率,因此当XMT拥有更多数量的简单TCU而不是较少但更高级的TCU时,XMT的总体性能可能会更好。然而,由于XMT正在利用的线程级并行(thread level parallelism,TLP)与ILP互不相关,因此XMT概念不会阻止TCU引入任何高级技术。类似于同时多线程(simultaneous multithreaded,SMT)处理器,TCU共享一些功能单元:乘法/除法(Multiplication/Division,M/D)单元和互连网络端口。如果多个TCU试图使用同一个被分配的功能单元,则适当的仲裁用于对所有请求排队。集群具有至互连网络的一个加载/存储端口,其由集群内的所有TCU共享。通过对尚未完成的存储操作进行计数,存储计数器被用来刷新存储操作。
在XMT处理器中,前缀和(prefix-sum)运算被更加高效地执行。前缀和单元的硬件实现可以接受来自多个TCU的二进制输入,并且执行时间不取决于正向其发送请求的TCU的数量。集群中的PS TCU模块对来自TCU的所有请求进行组合,并且向全局前缀和单元发送一个请求。其还负责将从前缀和单元得到的结果分配给各个TCU。
例如,存在64个独立共享高速缓存模块,并且它们通过互连网络连接至集群。地址空间在这些高速缓存模块之间被平均划分。由于用于常规TCU的指令由MTCU广播并且存储在指令缓冲器中,因此并行高速缓存主要用于数据。互连网络是XMT处理器的非常重要的组成部分,并且需要提供集群与高速缓存模块之间的高带宽、低时延通信。
图5的示例性多核处理器支持MIPS I ISA的子集以及一些XMT特定指令。XMT特定指令包括spawn、join、sspawn(对于单个spawn:在并行模式下时生成附加线程)、ps、psm以及用于广播、预取和只读高速缓存的指令。
本申请内容的各方面不限于图5的示例性多核处理器,并且可以适用于其他并行计算架构。