CN104615576A - 面向cpu+gpu处理器的混合粒度一致性维护方法 - Google Patents
面向cpu+gpu处理器的混合粒度一致性维护方法 Download PDFInfo
- Publication number
- CN104615576A CN104615576A CN201510092458.9A CN201510092458A CN104615576A CN 104615576 A CN104615576 A CN 104615576A CN 201510092458 A CN201510092458 A CN 201510092458A CN 104615576 A CN104615576 A CN 104615576A
- Authority
- CN
- China
- Prior art keywords
- territory
- request
- block
- catalogue
- cpu
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了面向CPU+GPU处理器的混合粒度一致性维护方法,目的是解决CPU簇和GPU簇的二级缓存的一致性问题。技术方案是设计一个由粗粒度的域目录和细粒度的块目录组成的双目录结构,双目录结构嵌在L2Cache和主存通道之间,根据CPU簇和GPU簇发出的不同访存请求类型,若访存请求的初始来源为GPU,则采用GPU请求维护流程,若访存请求的初始来源为GPU,启动CPU请求维护流程,通过域目录和块目录相互通信并协作,完成一致性信息的更新和维护以及数据的传递,保证处理器访存的一致性。本发明能有效过滤GPU应用对一致性资源的竞争、减少GPU对CPU性能干扰、保证CPU数据精确记录,极大地提升CPU+GPU异构多核系统的处理性能,且能满足CPU应用对重要数据精细跟踪的需求。
Description
技术领域
本发明主要涉及片上异构多核处理器一致性维护方法,特指CPU+GPU片上异构多核系统,也适用于其它具有类似访存特征的异构多核体系结构。
背景技术
传统多核处理器利用多个复杂重核高效快速地处理单个或几个程序,有较好的控制性,时钟频率高,单线程执行快,目前主要面向桌面及服务器领域。众核加速处理器,如图像处理器(GPU),由大量简单核组成,并行处理能力强,能效高,具有计算密集型优势,其应用领域从图像处理逐步转向科学计算。异构多核处理器体系结构融合了通用处理器单线程能力和众核加速处理器多线程并行处理能力的优势,是未来面向领域应用的多核处理器发展方向。CPU+GPU的片上异构多核结构已经成功的商业化,并占据了个人PC市场的大量份额。片上融合的CPU+GPU结构利用共享存储和统一的地址空间,减少了传统分离结构中CPU和GPU间的通信开销,并简化了编程人员的工作负担。与此同时,由于存储共享,多个核的私有缓存(Cache)中会拥有同一地址数据的副本,从程序语义考虑,数据的多个副本必须是最新的且完全一致的,这就是多核共享存储的Cache一致性问题。
一直以来,业界多采用一致性协议来维护Cache的一致性,一致性协议主要分为两类:软件一致性协议和硬件一致性协议。软件一致性协议主要依赖编译器,通过显式的作废指令或清空指令来作废和清除多余的副本以实现Cache的一致性。硬件一致性协议则仅依赖硬件,不需要软件和编译器的干预,针对不同的访存请求,自主实现Cache的一致性。访存请求可以分为四类:写回请求,该请求要将访存请求中的目标地址的最新数据从缓存中写回到主存,使得该数据的所有副本都是最新的;逐出请求,该请求要将访存请求中的目标地址对应的数据(若数据为修改过的,会先有写回请求,然后再发出逐出请求)从缓存中逐出(即作废);写请求,该请求要修改访存请求中的目标地址对应的数据;读请求,该请求要将访存请求中的目标地址对应的数据传给请求来源。硬件一致性协议根据访存请求的不同类型,通过硬件自主地定位目标地址对应的数据在各个核私有Cache中的副本,采用作废或者更新相应的副本等操作,以保证所有数据是一致的且最新的。硬件一致性协议是当前主流的一致性协议实现方法。
常见的硬件一致性协议有监听协议、目录协议和令牌协议。令牌协议是新兴的一致性协议维护方法,主要是学术界在研究,并未在商业界使用。监听协议则需要多核处理器中所有处理器共享同一条通信总线,每一个处理器发送访存请求后会独占这条通信总线,其他处理器的请求只能等待,直到占据总线的请求服务完毕,其余处理器才能竞争通信总线的下一次使用权限。当处理器的数量较多的时候,无论是独占通信总线导致的其他处理器的等待,还是对通信总线的竞争都会导致吞吐率(即单位时间内服务的请求数量)的下降。同时,由于监听协议并不会详细记录每一个数据副本的具体位置,而是通过广播的方式,将请求告诉所有处理器,如果该处理器有所请求的数据副本,就会做相应的处理,如果没有就忽略当前请求。这些被忽略的请求并没有存在的必要,反而造成额外的功耗开销。所以目前商业界主要采用目录协议。目录协议的硬件基础是目录缓存,缓存的每一项对应一个数据缓存块(Cacheline,处理器对数据的读写请求的基本单位),用以记录对应Cacheline的一致性信息。目录缓存项一般拥有三个域,分别是Cacheline的索引标志(tag)、状态信息和共享者列表。索引标志用来判定处理器请求的数据地址与目录当前项是否一致。状态信息有三种状态:无效、共享、私有,分别表示当前Cacheline是否有效、是否被处理器共享和是否被修改独占。而共享者列表则记录有哪些处理器拥有当前Cacheline的副本,这样在修改当前Cacheline时就可以通过查找共享者列表,精确定位所有拥有该Cacheline副本的处理器,只对这些处理器发出相应的请求,避免了监听协议中产生的无用请求。由于目录协议详细记录了所有Cacheline的一致性信息,若某一个处理器要修改某地址的数据,根据目录内的相关信息,作废其他副本拥有者的数据或者同时修改所有副本就可以保证Cache的一致性。
在CPU+GPU异构系统中,GPU应用访存频率极高(单位时间内产生的访存请求极高,比CPU应用高出1-2个数量级),数据的空间局部性特征明显(即许多请求是对一片连续的Cacheline的访问),且数据重用性较差(即数据第一次使用后可能很久后才会被用到甚至可能不会再用到),大量私有数据不需要一致性访问(即只有一个处理器使用,不会有多个副本而导致一致性问题)。CPU应用访问频率较低,空间局部性特征不突出,具有较好的时间局部性(当前被访问的数据可能很快又会被访问),少量数据重用性强,会被频繁访问。由于GPU应用与CPU应用在访存模式上存在上述特征,GPU应用的大量访问有可能导致目录资源的竞争而饿死CPU;或者大量不需要一致性维护的数据占据目录,浪费了有限的目录空间,使得大量需要一致性维护的CPU应用的请求无法得到及时的响应,导致性能的降低,因此传统的以Cacheline为单位记录一致性相关信息的细粒度目录一致性协议已经不能适应CPU+GPU的异构多核结构。
在2013年12月召开的第46届微体系结构国际会议(International Symposium onMicroarchitecture,MICRO)上,Jason Power等人发表了一篇文章,名为“面向CPU-GPU集成结构的异构系统一致性协议”(”Heterogeneous System Coherence for IntegratedCPU-GPU Systems”),简称HSC协议。该文章面向CPU+GPU的异构多核系统,整个系统的组织可以分为两层。外层系统结构如图1所示,CPU簇和GPU簇分别连接一个私有的二级缓存(L2Cache),二级缓存通过目录结构与主存通道(DRAM Channels)相连。而CPU簇+二级缓存和GPU簇+二级缓存则分别构成了一个内层系统。对于CPU簇内层系统,它由两个分别带有私有一级缓存(L1Cache)的CPU核组成,两个CPU核共享二级缓存。同理,GPU簇是由32个分别带有一级缓存的计算单元(CU)构成,所有CU共享二级缓存。在簇内,二级缓存和一级缓存间仍存在一致性维护问题,所以该文章采用了层次化的一致性协议,对于CPU簇和GPU簇内,各有一套机制保证缓存的一致性,以此作为既定条件,文章的研究重点是外层系统的二级缓存和主存间的一致性问题。
该文章将一片连续的Cacheline定义为一个区域(Region),一个Cacheline唯一对应一个区域,一个区域包含连续的多个Cacheline。整个目录系统则以区域为单位记录该区域的一致性信息。与传统的以一个Cacheline为单位的细粒度一致性协议相比,该协议以区域为单位,一条记录涵盖的范围更广,因此称为粗粒度一致性协议。粗粒度一致性协议基本硬件由三部分组成:两个域缓冲(Region Buffer)和一个域目录(Region Directory),如图1。
域缓冲连接着二级缓存、域目录和主存通道,由缺失状态处理寄存器(Miss stateshandling register,MSHR)队列A、多路选择器A、缓冲阵列和域缓冲控制单元组成。域缓冲接收到从处理器发来的访存请求,将请求存到缺失状态处理寄存器队列A中。所有的处理器请求在这里排队等待域缓冲处理。多路选择器A根据当前请求的数据地址的域标志位,在以多体形式组织的缓冲阵列中进行检索。缓冲阵列由许多缓冲阵列项组成,每一个缓冲阵列项由域标志位、状态信息位和有效块列表向量三个域构成,域标志位用于索引,状态信息位与目录中的状态信息意义相同,有效块列表向量记录当前区域中哪些Cacheline是有效的。如果在缓冲阵列中检索,请求地址与某一项的域标志位匹配(简称“命中”),根据缓冲阵列项的状态信息位,由域缓冲控制单元判断请求区域的访问授权:私有状态时,该数据区域的拥有者(拥有这个数据区域的处理器)可以被授予读写权利,共享状态的共享者(拥有这个数据区域副本的处理器)可以被授予读权利。如果授权允许当前请求,域缓冲控制单元将请求发送给直接访存总线接口(Direct memory access bus Interface,DMA总线接口),通过DMA总线访问主存。若授权不允许当前请求或检索未命中,则将当前请求转发给域目录,由域目录进行进一步的仲裁。
域目录连接着两个域缓冲和主存通道,由MSHR队列B、多路选择器B、目录阵列和目录控制单元组成。域目录接收到来自域缓冲的请求,并将请求写入MSHR队列B中等待处理。域目录中的多路选择器B根据当前请求的地址的域标志位,在以多体形式组织的目录阵列中进行检索。目录阵列由许多目录阵列项组成,每一个目录阵列项组织方法与传统目录协议的目录缓存项的组织方法相同,只是记录单位从细粒度的Cacheline变成粗粒度的区域。如果检索未命中,目录控制单元将请求转发给主存,由主存完成数据响应。若检索命中,则目录控制单元则根据目录阵列项中记录的状态信息,在获得数据响应的同时,与相关处理器簇的二级缓存和域缓冲进行通信和相关操作,完成一致性的维护。
下面以最复杂的GPU写共享状态的数据区域但发生失效情况的处理过程示例HSC协议如何维护一致性:
1.GPU簇发送一个对地址A的写请求给GPU二级缓存。为了保证一致性,该数据只能被GPU独占,CPU中如果有该数据副本则必须作废。
2.GPU二级缓存收到GPU簇的写请求并检索,发现请求的A地址缺失,GPU二级缓存将请求转发给域缓冲。
3.以R(A)表示地址A所在的区域,域缓冲在处理该写请求时,检索到该区域命中,并发现该区域的状态信息为共享,表示CPU簇中有该区域的数据副本,无法得到写请求的授权。域缓冲控制单元将对地址A的写请求转发给域目录。
4.域目录检索命中,为了保证写独占,目录控制单元将向CPU的域缓冲发送R(A)区域的作废请求。
5.CPU的域缓冲接到作废请求后,检索缓冲阵列,命中后根据记录中有效块列表向量,向CPU二级缓存中R(A)区域内所有有效块发送作废请求。
6.CPU二级缓存收到作废请求后,通过CPU的域缓冲控制单元将R(A)数据返回给域目录,并将所有块逐一作废逐出。当所有块逐出后,通知域目录进行下一步。
7.域目录接到通知后,将R(A)区域的数据和私有状态授权转发给GPU的域缓冲。
8.若在本次请求之后GPU簇又发出了属于R(A)区域的访存请求,因为GPU的域缓冲已经具备私有授权,新请求直接通过DMA总线获取数据响应。
在上面的示例中,请求本身只是针对地址A,按照传统细粒度一致性协议,地址A周围其它地址的数据和相应的一致性信息并不需要做任何处理。而在粗粒度一致性协议中,由于域目录是以包含地址A的一整个区域为单位记录一致性信息,所以所有属于该区域的其它地址的数据和相应的一致性信息都被处理(“处理”在上面的示例中即为作废数据块修改一致性状态为私有的一系列操作)了。这种粗粒度的域目录将多个Cacheline整合为一个区域,使得对一个地址的请求可以完成对一个区域的一致性访问授权,对之后区域内的任何地址的请求都不需要访问域目录(如上述示例的步骤8)。对于GPU应用高频率、高空间局部性特征的访存请求效果尤其明显,大大减少了域目录的访问次数;同时由于GPU有大量请求不需要维护一致性,即大部分请求都可以在域缓冲中得到授权,通过DMA直接访问,进一步减少了对域目录的访问请求。
然而,粗粒度一致性协议的缺点是无法满足需要精确记录一致性信息的应用(CPU上的应用)需求,进而导致整个系统访问延时和通信开销的增加。从上面的例子中可以发现对地址A的写请求要将R(A)区域内所有有效块全部作废。对于CPU类应用,因为其数据空间局部性差(相邻地址数据的访存特征差别较大),少量数据重用特征明显,可能区域A中有一个地址的数据是CPU应用要经常访问的,在R(A)被作废后,CPU的下一次访问无法从访问延时较低的CPU二级缓存中获得,而需要向GPU请求相应数据,修改一致性信息,并写回主存,这些在细粒度一致性协议中本不需要处理的过程会导致访问时间延长和额外的功耗。所以对于CPU应用更需要精确细致的一致性信息维护。对于此类应用,粗粒度的一致性维护不仅低效,而且区域范围的无差别作废有很大几率将CPU应用内重用性明显的数据误伤逐出,导致性能的降低,甚至出现乒乓现象。
综上所述,在CPU+GPU的异构多核系统中,传统的细粒度一致性协议会因为GPU应用的大量访问导致目录资源的竞争而饿死CPU;或者大量不需要一致性维护的数据占据目录,浪费了有限的目录空间,使得大量需要一致性维护的CPU应用的请求无法得到及时的响应,导致性能的降低。而HSC采用的粗粒度一致性协议仅考虑了GPU应用的访存特点,没有精确记录每一个Cacheline的一致性信息,区域性的处理各个处理器(CPU簇和GPU簇)的一致性请求,会产生许多无用操作增加功耗,甚至误伤逐出CPU应用中重用性明显的数据,导致这些对性能影响明显的数据的访存延时增加。因此更优的一致性协议应该能兼顾CPU应用和GPU应用各自的访存特征。
发明内容
本发明要解决的技术问题在于:解决CPU簇和GPU簇的二级缓存的一致性问题。针对异构多核系统中单一粒度一致性协议(传统目录协议和HSC协议)无法很好地兼顾CPU应用和GPU应用的问题,提出一种能够有效过滤GPU应用对一致性资源的竞争、减少GPU对CPU性能干扰、同时保证CPU数据精确记录的一致性维护方法,从而极大地提升CPU+GPU异构多核系统的处理性能。
本发明提出的面向CPU+GPU处理器的混合粒度一致性维护方法包括以下步骤:
第一步,设计一个混合粒度的双目录结构。该双目录结构由一个粗粒度的域目录和一个细粒度的块目录组成。将双目录结构嵌在L2Cache和主存通道之间,域目录和块目录相互通信,完成一致性信息的更新和维护以及数据的传递,该结构是保证Cache一致性的硬件基础。对于主存的访问,除了支持传统的访问方式,双目录结构中的域目录也可以通过DMA总线从主存获得数据响应。域目录和块目录的设计方法是:
1.1域目录设计
域目录与GPU二级缓存、CPU二级缓存、块目录和主存通道相连。域目录接收来自GPU二级缓存、CPU二级缓存和块目录的访存请求。收到请求后,域目录在块目录的辅助下实现GPU请求的数据的一致性访问,并辅助块目录实现CPU请求的数据的一致性访问。
域目录由MSHR队列C、多路选择器C、域目录阵列和域目录控制单元组成。MSHR队列C接收来自GPU二级缓存和CPU二级缓存的访存请求,将访存请求暂存,队列的顺序也即请求响应的顺序。
MSHR队列C通过多路选择器C与域目录阵列相连,多路选择器C根据MSHR队列C中访存请求的地址在域目录阵列中定位对应域目录项。MSHR队列C结构与背景技术图1中的MSHR队列B结构完全一样,多路选择器C与图1中的多路选择器B结构完全一样。
域目录阵列采用多体结构的组织方式,由于域目录阵列要同时记录CPU二级缓存和GPU二级缓存的相关一致性信息,其容量(即域目录项的个数)应满足完整记录全部二级缓存项的要求,即M>=M1/M2,其中M表示域目录阵列的容量,M1表示CPU二级缓存与GPU二级缓存的Cacheline数之和,M2表示单块区域(“区域”与背景技术中的区域含义相同,表示一片连续的Cacheline,后文出现的“区域”也是相同含义)内的Cacheline数。域目录阵列的每个体都有自己的访问端口,以支持高带宽访问。每个体结构又由多个域目录项组成,每个域目录项记录一个区域的一致性信息。域目录项包含三个域,分别是域标志位、CPU计数器和GPU计数器。域标志位是当前域目录项记录的区域地址的部分比特位,多路选择器C通过将请求地址与域标志位比较,定位请求对应的域目录项。CPU计数器和GPU计数器分别记录域目录项对应区域在CPU和GPU二级缓存中的Cacheline副本数,而不精确记录缓存位置和有效块地址,CPU计数器和GPU计数器的位数由一个区域包含的Cacheline数决定,若一个区域包含N个Cacheline,则CPU计数器和GPU计数器的位数均为当两个计数器皆为0时,表示当前区域未被缓存;当CPU计数器为0,GPU计数器非0时,GPU有当前数据区域内部分Cacheline的副本,而CPU没有任何Cacheline的副本。当CPU计数器非0时,表示CPU有当前数据区域内部分Cacheline的副本。
域目录阵列的输出端连接域目录控制单元,域目录阵列将定位到的域目录项的一致性信息(GPU计数器和CPU计数器的值)发送给域目录控制单元。
域目录控制单元根据第二步的一致性维护流程实现结构设计,与块目录控制单元协作完成一致性的数据访问的控制任务。域目录控制单元与域目录阵列、直接访存总线接口、块目录控制单元、GPU二级缓存、多路选择器C相连。
域目录控制单元向直接访存总线接口发送对主存通道的访问请求,直接访存总线接口将请求转发给主存通道,将主存通道返回的数据传给域目录控制单元。
域目录控制单元将自己无法单独处理的请求发给块目录控制单元,由块目录控制单元协助完成一致性的访问请求;或者域目录控制单元将数据反馈给块目录控制单元,以响应块目录控制单元之前发出的请求。
域目录控制单元向GPU二级缓存发送检查请求,并从GPU二级缓存接收响应的数据。
域目录控制单元向多路选择器C发送对域目录阵列的访问请求,多路选择器C在域目录阵列中定位到对应域目录项后,由域目录阵列将该项的信息发送给域目录控制单元。
1.2块目录设计
块目录与CPU二级缓存、域目录以及主存通道相连。块目录接收来自CPU二级缓存和域目录的访存请求,收到请求后,块目录在域目录的辅助下实现CPU请求的数据的一致性访问,并辅助域目录实现GPU请求的数据的一致性访问。
块目录由MSHR队列D、多路选择器D、块目录阵列和块目录控制单元组成。MSHR队列D与域目录中的MSHR队列C的结构一样,区别在于只接受来自CPU二级缓存的访存请求。多路选择器D与多路选择器C的结构一样。
MSHR队列D通过多路选择器D与块目录阵列相连,多路选择器D根据MSHR队列D中访存请求的地址在块目录阵列中定位对应块目录项。
块目录阵列采用多体结构的组织方式,由于块目录仅记录CPU二级缓存的相关一致性信息,其容量大于等于CPU二级缓存的Cacheline数(因为域目录要同时记录CPU簇和GPU簇二级缓存的一致性信息,所以与仅记录CPU二级缓存的块目录相比,域目录阵列的记录范围要大于等于CPU二级缓存和GPU二级缓存的Cacheline数之和;另外由于域目录将一个区域看作整体,每个区域用一个域目录项记录,即粗粒度记录方式,所以域目录阵列的容量即域目录项的个数要大于等于CPU二级缓存和GPU二级缓存的Cacheline数之和与区域所含Cacheline数的比值)。每个体结构由多个块目录项组成,每个块目录项记录一个Cacheline的一致性信息。块目录项包含三个域,分别是块标志位、状态位、共享者列表。块标志位是当前块目录项记录的Cacheline地址的部分比特位,多路选择器D通过将请求地址与块标志位比较定位块目录项。状态位用于记录当前Cacheline的一致性状态,它包括私有、共享、无效三种状态,用两比特位可以表示。私有状态标识当前Cacheline仅有一份,且已被修改;共享状态标识当前Cacheline有多个副本,或者当前Cacheline只有一份,但是未被修改,缓存中的数据与主存中的数据保持一致;无效状态标识当前Cacheline是无效的,不存在于CPU二级缓存中。共享者列表用以记录拥有当前Cacheline数据副本的处理器簇,每个处理器簇用一比特位表示,1表示对应处理器簇拥有当前Cacheline数据副本,0表示对应处理器簇没有当前Cacheline数据副本。
块目录阵列的输出端连接着块目录控制单元,块目录阵列将索引定位到的块目录项的一致性状态信息(状态位和共享者列表信息)发送给块目录控制单元。
块目录控制单元根据第二步的一致性维护流程实现结构设计,与域目录控制单元协作完成一致性的数据访问的控制任务。除块目录阵列以外,块目录控制单元还分别与以下部件连接:块目录控制单元与块目录阵列、主存通道、域目录控制单元、CPU二级缓存、多路选择器D相连。
块目录控制单元向主存通道发送数据访问请求,并接收主存通道返回的数据响应。
块目录控制单元将自己无法单独处理的请求发给域目录控制单元,由域目录控制单元协助完成一致性的访问请求;或者块目录控制单元将数据反馈给域目录控制单元,以响应域目录控制单元之前发出的请求。
块目录控制单元向CPU二级缓存发送检查请求,并从CPU二级缓存接收响应的数据。
块目录控制单元向多路选择器D发送对块目录阵列的访问请求,多路选择器D在块目录阵列中定位到对应块目录项后,由块目录阵列将该项的信息发送给块目录控制单元。
第二步,基于混合粒度的双目录结构维护数据访问的一致性。本发明实现的一致性维护方法针对CPU+GPU异构系统设计了两套一致性维护流程:GPU请求维护流程和CPU请求维护流程。
若访存请求的初始来源为GPU,转2.1;若访存请求的初始来源为CPU,转2.2。
2.1采用GPU请求维护流程:
2.1.1、GPU访问GPU二级缓存:当请求为逐出请求时,转2.1.1.1;当请求为写回请求时,转2.1.1.2;当请求为读请求时,且在GPU二级缓存中匹配到了请求的目标地址(简称“命中”),即读命中,转2.1.1.3;当请求为写请求,且GPU二级缓存命中时,即写命中时,转2.1.1.4;当请求是读或写请求,且GPU二级缓存缺失时,转2.1.1.5。
2.1.1.1、当请求为逐出请求时,GPU二级缓存逐出目标地址对应的Cacheline,域目录控制单元将对应区域的域目录项的GPU计数器减1,此次请求完成,转2.3。
2.1.1.2、当请求为写回请求时,GPU二级缓存将目标地址对应的Cacheline通过DMA总线写回主存,目录信息不作修改,此次请求完成,转2.3。
2.1.1.3、当请求为读请求,且GPU二级缓存命中时,GPU直接从GPU二级缓存获得数据响应,此次请求完成,转2.3。
2.1.1.4、当请求为写请求,且GPU二级缓存命中时,GPU二级缓存检查目标地址数据的状态信息,若数据为私有状态(简称“脏”),表示数据被独占,则GPU二级缓存直接修改数据,此次请求完成,转2.3。若发现数据非脏,则GPU二级缓存将请求转发给域目录处理,方法是:域目录控制单元检查目标地址对应的域目录项,若发现CPU计数器为零,转2.1.1.4.1;若发现CPU计数器非零,转2.1.1.4.2。
2.1.1.4.1、此时CPU计数器为零,表示目标地址的数据未被共享,GPU二级缓存直接修改请求地址对应的数据。此次请求完成,转2.3。
2.1.1.4.2、此时CPU计数器非零,域目录控制单元将请求转发给块目录控制单元,由块目录控制单元检查块目录阵列,判断数据是否被CPU共享:若未在块目录阵列中匹配到请求的目标地址(简称“缺失”),即块目录缺失,转2.1.1.4.2.1;若块目录命中,转2.1.1.4.2.2。
2.1.1.4.2.1、若块目录缺失,则表示目标地址未在CPU二级缓存中缓存,则参照2.1.1.4.1的操作由GPU二级缓存直接修改数据,此次请求完成,转2.3。
2.1.1.4.2.2、若块目录命中,则CPU二级缓存要作废目标地址的副本,同时块目录控制单元作废目标地址对应的块目录项,并通知域目录控制单元更新目标地址的域目录项的CPU计数器减1。此次请求完成,转2.3。
2.1.1.5、无论读请求或写请求,若GPU二级缓存缺失,GPU二级缓存将请求转发给域目录:若域目录缺失,转2.1.1.5.1;若域目录命中,转2.1.1.5.2。
2.1.1.5.1、若域目录缺失,说明目标地址所在区域并未被L2Cache缓存,访存请求直接通过DMA总线从主存得到整个区域的数据响应,同时域目录控制单元将域目录项中的GPU计数器设为最大值。此次请求完成,转2.3。
2.1.1.5.2、若域目录命中,则域目录控制单元检查CPU计数器和GPU计数器:若两个计数器皆为0,转2.1.1.5.2.1;若CPU计数器为0,GPU计数器非0,转2.1.1.5.2.2;若CPU计数器非0,转2.1.1.5.2.3。
2.1.1.5.2.1、若两个计数器皆为0,也表示目标地址所在区域未被缓存,参照域目录访问缺失时(2.1.1.5.1)处理。此次请求完成,转2.3。
2.1.1.5.2.2、若CPU计数器为0,GPU计数器非0,则仅GPU拥有当前区域的部分数据,DMA将目标地址的数据从主存经域目录控制单元传递给GPU二级缓存,同时域目录控制单元将对应域目录项的GPU计数器加1。此次请求完成,转2.3。
2.1.1.5.2.3、若CPU计数器非0,则表示CPU中有目标地址所属区域的部分数据,域目录控制单元将请求转发到块目录控制单元处理,块目录控制单元处理方法是:若请求为写请求,且访问块目录命中,转2.1.1.5.2.3.1;若请求为读请求,且访问块目录命中,转2.1.1.5.2.3.2;若请求为读请求或写请求,且访问块目录缺失,转2.1.1.5.2.3.3。
2.1.1.5.2.3.1、若请求为写请求,且访问块目录命中,则块目录控制单元通知CPU二级缓存作废请求数据的副本,并使块目录中目标地址的块目录项失效,然后通知域目录控制单元将对应域目录项的CPU计数器减1。
2.1.1.5.2.3.1.1、通过块目录控制单元将CPU二级缓存中的数据转发给域目录控制单元,并通知域目录控制单元将目标地址的域目录项的GPU计数器加1。域目录控制单元收到数据后直接转发给GPU二级缓存。此次请求完成,转2.3。
2.1.1.5.2.3.2、若请求为读请求,且访问块目录命中,表示当前请求的数据块在CPU二级缓存中有副本,按照传统目录一致性协议方式处理:即块目录控制单元修改目标地址的块目录项的一致性状态信息为共享,并将GPU簇加入到该项的共享者列表中;若目标地址原始状态为私有状态,此时还要将数据写回主存。然后执行2.1.1.5.2.3.1.1。
2.1.1.5.2.3.3、无论读请求或写请求,若访问块目录缺失,表示当前数据在CPU二级缓存中没有副本。块目录控制单元向主存请求目标地址的数据,并将数据通过域目录控制单元转发给GPU的L2Cache。域目录控制单元在收到数据的同时将目标地址对应域目录项的GPU计数器加1。此次请求完成,转2.3。
2.2启动CPU请求维护流程。
2.2.1、CPU访问CPU二级缓存:当请求为读请求且命中时,转2.2.1.1;当请求为逐出请求时,转2.2.1.2;当请求为写回请求时,转2.2.1.3;当请求为写请求且命中时,转2.2.1.4;若请求为读请求或写请求,且CPU二级缓存缺失时,转2.2.1.5。
2.2.1.1、当请求为读请求且命中时,CPU直接从CPU二级缓存获得数据响应。此次请求完成,转2.3。
2.2.1.2、当请求为逐出请求时,CPU二级缓存将请求同时转发给域目录和块目录,域目录控制单元将对应域目录项的CPU计数器减1;块目录控制单元则作废对应块目录项。此次请求完成,转2.3。
2.2.1.3、当请求为写回请求时,表示目标数据处于私有状态(即数据为脏)。将数据写回主存后,将目标地址的块目录项的状态信息设置为共享。此次请求完成,转2.3。
2.2.1.4、若为写请求且命中,同时目标地址的数据在CPU二级缓存中为脏,则表示数据已经被独占,则CPU二级缓存直接修改请求地址的数据完成写请求,此次请求完成,转2.3。若请求写命中但目标地址的数据在CPU二级缓存中非脏,则CPU二级缓存将请求转发给块目录,块目录对请求的处理方法是:若块目录的目标地址对应的块目录项中的共享者列表信息显示GPU簇中无目标地址的副本,转2.2.1.4.1;反之若有目标地址的副本,转2.2.1.4.2。
2.2.1.4.1、若块目录的目标地址对应的块目录项中的共享者列表信息显示GPU簇中无目标地址的副本,则按传统目录一致性协议方式处理:即块目录仅更新对应块目录项的状态信息为私有。此次请求完成,转2.3。
2.2.1.4.2、若块目录的目标地址对应的块目录项中的共享者列表信息显示GPU簇中有目标地址的副本,则按传统目录一致性协议方式处理:即块目录将对应目录项的状态信息设为私有,并将GPU簇从共享者列表中逐出。同时块目录控制单元通知域目录控制单元作废GPU二级缓存中的数据副本,并将对应域目录项中的GPU计数器减1。此次请求完成,转2.3。
2.2.1.5、无论读请求或写请求,若访问CPU二级缓存缺失,CPU二级缓存将请求同时转发给域目录和块目录。块目录通过块目录控制单元向主存申请数据。接下来根据域目录的访问情况做以下相应的处理:若域目录缺失,转2.2.1.5.1;若域目录命中,转2.2.1.5.2。
2.2.1.5.1、若访问域目录缺失,表示目标地址所属的整个区域都没有被缓存。域目录控制单元在域目录阵列中添加目标地址对应区域的域目录项,并将其CPU计数器加1,然后通知块目录控制单元“域目录访问缺失”。块目录控制单元在收到通知后,等待主存的数据响应,收到主存响应的数据后将其传给CPU二级缓存,并在块目录阵列中添加目标地址的块目录项。块目录控制单元结合域目录控制单元反馈的域目录缺失信息,按传统目录一致性协议方式处理:即将对应块目录项的状态信息设为私有(写请求)或共享(读请求),共享者列表设置为只有CPU簇。此次请求完成,转2.3。
2.2.1.5.2、若访问域目录命中,表示GPU二级缓存包含目标地址所属区域的部分数据。域目录控制单元向GPU二级缓存发送目标地址的数据请求:若GPU二级缓存缺失,转2.2.1.5.2.1;若GPU二级缓存命中,且数据非脏时,转2.2.1.5.2.2;若GPU二级缓存命中,且数据为脏时,转2.2.1.5.2.3。
2.2.1.5.2.1、若GPU二级缓存缺失,表示GPU没有目标地址的副本,域目录控制单元将对应域目录项的CPU计数器加1,并通知块目录控制单元“GPU二级缓存缺失”。块目录控制单元等待主存的数据响应并将数据转发给CPU二级缓存。块目录控制单元在块目录阵列中添加目标地址的块目录项,按传统目录一致性协议方式处理:即将块目录对应块目录项的状态信息设为私有(写请求)或共享(读请求),共享者列表设置为只有CPU簇。此次请求完成,转2.3。
2.2.1.5.2.2、若GPU二级缓存的目标地址命中且数据非脏(表示数据未被修改),域目录控制单元将域目录的对应域目录项的CPU计数器加1,并将GPU二级缓存中的数据传递给块目录控制单元。块目录控制单元将最先到达的数据(来自域目录控制单元或者主存)转发给CPU二级缓存,同时根据请求类型的不同做以下相应的处理:若请求类型为读请求,转2.2.1.5.2.2.1;若请求类型为写请求,转2.2.1.5.2.2.2。
2.2.1.5.2.2.1、若请求类型为读请求,块目录控制单元在块目录阵列中添加目标地址的块目录项,按传统目录一致性协议方式处理:即将对应块目录项状态信息设定为共享,共享者列表设置为CPU簇加GPU簇。此次请求完成,转2.3。
2.2.1.5.2.2.2、若请求类型为写请求,域目录控制单元作废GPU二级缓存的副本并将对应的域目录项的GPU计数器减1。块目录控制单元在块目录阵列中添加目标地址的块目录项,按传统目录一致性协议方式处理:即将对应块目录项状态信息设定为私有,共享者列表设置为只有CPU簇。此次请求完成,转2.3。
2.2.1.5.2.3、若GPU二级缓存的目标地址命中且数据为脏(表示数据已修改),域目录控制单元将GPU二级缓存中请求地址的数据转发给块目录控制单元并将对应域目录项的CPU计数器加1。块目录控制单元收到GPU二级缓存的数据响应后,将数据转发给CPU二级缓存,并写回主存。然后根据请求类型的不同,做以下处理:若请求类型为写请求,转2.2.1.5.2.3.1;若请求类型为读请求,转2.2.1.5.2.3.2。
2.2.1.5.2.3.1、若请求类型为写请求,域目录控制单元作废GPU二级缓存的副本并将对应的域目录项的GPU计数器减1。块目录控制单元在块目录阵列中添加目标地址的块目录项,按传统目录一致性协议方式处理:即将对应块目录项状态信息设定为私有,共享者列表设置为只有CPU簇。此次请求完成,转2.3。
2.2.1.5.2.3.2、若请求类型为读请求,块目录控制单元在块目录阵列中添加目标地址的块目录项,按传统目录一致性协议方式处理:即将对应块目录项状态信息设定为共享,共享者列表设置为CPU簇加GPU簇。此次请求完成,转2.3。
2.3结束。
采用本发明可以达到以下技术效果:
1、本发明利用粗粒度的域目录有效地过滤了GPU应用中频繁的、集中的、空间局部性特征明显的访存请求,避免了其对细粒度块目录的干扰。
2、本发明同时具备细粒度的块目录,采用传统Cacheline粒度记录一致性信息,满足了CPU应用对部分重要数据精细跟踪的需求。
综上,本发明根据CPU簇和GPU簇发出的不同访存请求类型,利用域目录和块目录的协作,保证了处理器访存的一致性。该方法针对CPU+GPU异构系统设计了两套一致性维护流程,根据请求来源的不同,选择对应的处理流程即可维护L2Cache的一致性。两套一致性维护流程的控制由域目录控制单元和块目录控制单元协同实现。与背景技术中的HSC协议相比,本发明兼顾了CPU和GPU各自的访存特征,避免了相互间的干扰,可以降低平均访存延时。
附图说明
图1是背景技术第46届微体系结构国际会议Jason Power等人公布的面向CPU-GPU集成结构的异构系统一致性协议(HSC协议)的系统结构图;
图2是本发明总体流程图;
图3是本发明第一步构建的混合粒度双目录结构的逻辑结构图;
图4是本发明混合粒度双目录结构中的域目录逻辑结构图;
图5是本发明混合粒度双目录结构中的块目录逻辑结构图;
图6是本发明的第二步中GPU请求维护流程处理GPU请求时的流程图;
图7是本发明的第二步中CPU请求维护流程处理CPU请求时的流程图。
具体实施方式
图2是本发明总体流程图。本发明包括以下步骤:
第一步,设计混合粒度双目录结构,包括:两个子步骤:
1.1设计粗粒度的域目录结构。
1.2设计细粒度的块目录结构。
第二步,采用混合粒度双目录结构进行一致性维护:当初始请求来源为GPU时,执行2.1;当初始请求来源为CPU时,执行2.2:
2.1由混合粒度双目录结构执行GPU请求维护流程,转2.3。
2.2由混合粒度双目录结构执行CPU请求维护流程,转2.3。
2.3结束。
本发明的第一步为第二步的一致性维护方法提供了硬件基础,第二步控制第一步的混合粒度双目录结构正确完成保证一致性的数据访问。
图3是第一步构建的混合粒度双目录结构的逻辑结构图。该双目录结构由一个粗粒度的域目录和一个细粒度的块目录组成,外部与CPU二级缓存、GPU二级缓存和主存通道相连,嵌在两者之间。域目录和块目录之间可以相互通信,完成一致性信息的更新和维护以及数据的传递。混合粒度双目录结构是保证Cache一致性的硬件基础。其中:
域目录与GPU二级缓存、块目录和直接访存总线接口实现双向连接,以完成相互间请求或数据的传递,同时,域目录与CPU二级缓存单向连接,以接受来自CPU二级缓冲的请求。其中,域目录与主存通道是通过直接访存总线连接,可以实现一片区域数据的连续访问。
块目录与CPU二级缓存、域目录以及主存通道实现双向连接,以完成相互间请求或数据的传递。其中,块目录与主存通道是通过传统的片上网络连接。
图4是域目录逻辑结构图。
域目录由MSHR队列C、多路选择器C、域目录阵列和域目录控制单元组成。MSHR队列C接收来自GPU二级缓存和CPU二级缓存的访存请求,将访存请求暂存,队列的顺序也即请求响应的顺序。
MSHR队列C通过多路选择器C与域目录阵列相连,多路选择器C根据MSHR队列C中访存请求的地址在域目录阵列中定位对应域目录项。
域目录阵列采用多体结构的组织方式,由于域目录阵列要同时记录CPU二级缓存和GPU二级缓存的相关一致性信息,其容量应满足完整记录全部二级缓存项的要求,即容量大于等于CPU二级缓存与GPU二级缓存的Cacheline数之和与单块区域内的Cacheline数的比值。域目录阵列的每个体都有自己的访问端口,以支持高带宽访问。每个体结构又由多个域目录项组成,每个域目录项记录一个区域的一致性信息。域目录项包含三个域,分别是域标志位、CPU计数器和GPU计数器。域标志位是当前域目录项记录的区域地址的部分比特位,多路选择器C通过将请求地址与域标志位比较索引定位请求对应的域目录项。CPU计数器和GPU计数器分别记录域目录项对应区域在CPU和GPU二级缓存中的Cacheline副本数,而不精确记录缓存位置和有效块地址,计数器的位数由一个区域包含的Cacheline数决定,若一个区域包含N个Cacheline,则计数器的位数为当两个计数器皆为0时,表示当前区域未被缓存;当CPU计数器为0,GPU计数器非0时,GPU有当前数据区域内部分Cacheline的副本,而CPU没有任何Cacheline的副本。当CPU计数器非0时,表示CPU有当前数据区域内部分Cacheline的副本。
域目录阵列的输出端连接域目录控制单元,域目录阵列将索引定位到的域目录项的一致性信息(GPU计数器和CPU计数器的值)发送给域目录控制单元。
域目录控制单元根据第二步的一致性维护流程实现结构设计,与块目录控制单元协作完成一致性的数据访问的控制任务。
域目录控制单元与域目录阵列、直接访存总线接口、块目录控制单元、GPU二级缓存、多路选择器C相连。
域目录控制单元向直接访存总线接口发送对主存通道的访问请求,直接访存总线接口将请求转发给主存通道,将主存通道返回的数据传给域目录控制单元。
域目录控制单元将自己无法单独处理的请求发给块目录控制单元,由块目录控制单元协助完成一致性的访问请求;或者域目录控制单元将数据反馈给块目录控制单元,以响应块目录控制单元之前发出的请求。
域目录控制单元向GPU二级缓存发送检查请求,并从GPU二级缓存接收响应的数据。
域目录控制单元向多路选择器C发送对域目录阵列的访问请求,多路选择器C在域目录阵列中定位到对应域目录项后,由域目录阵列将该项的信息发送给域目录控制单元。
图5是块目录逻辑结构图。
块目录由MSHR队列D、多路选择器D、块目录阵列和块目录控制单元组成。MSHR队列D与域目录中的MSHR队列C的结构和作用一样,区别在于只接受来自CPU二级缓存的访存请求。
MSHR队列D通过多路选择器D与块目录阵列相连,多路选择器D根据MSHR队列D中访存请求的地址在块目录阵列中定位对应块目录项。
块目录阵列采用多体结构的组织方式,由于块目录仅记录CPU二级缓存的相关一致性信息,其容量应满足记录全部CPU二级缓存项的要求,即大于等于CPU二级缓存的Cacheline数。每个体结构由多个块目录项组成,每个块目录项记录一个Cacheline的一致性信息。块目录项包含三个域,分别是块标志位、状态位、共享者列表。块标志位是当前块目录项记录的Cacheline地址的部分比特位,多路选择器D通过将请求地址与块标志位比较索引定位块目录项。状态位用于记录当前Cacheline的一致性状态,它包括私有、共享、无效三种状态,用两比特位可以表示。私有状态标识当前Cacheline仅有一份,且已被修改;共享状态标识当前Cacheline有多个副本,或者当前Cacheline只有一份,但是未被修改,缓存中的数据与主存中的数据保持一致;无效状态标识当前Cacheline是无效的,不存在于CPU二级缓存中。共享者列表用以记录拥有当前Cacheline数据副本的处理器簇,每个处理器簇用一比特位表示,1表示拥有副本,0表示没有副本。
块目录阵列的输出端连接着块目录控制单元,块目录阵列将索引定位到的块目录项的一致性状态信息(状态位和共享者列表信息)发送给块目录控制单元。
块目录控制单元根据第二步的一致性维护流程实现结构设计,与域目录控制单元协作完成一致性的数据访问的控制任务。
块目录控制单元与块目录阵列、主存通道、域目录控制单元、CPU二级缓存、多路选择器D相连。
块目录控制单元向主存通道发送数据访问请求,并接收主存通道返回的数据响应。
块目录控制单元将自己无法单独处理的请求发给域目录控制单元,由域目录控制单元协助完成一致性的访问请求;或者块目录控制单元将数据反馈给域目录控制单元,以响应域目录控制单元之前发出的请求。
块目录控制单元向CPU二级缓存发送检查请求,并从CPU二级缓存接收响应的数据。
块目录控制单元向多路选择器D发送对块目录阵列的访问请求,多路选择器D在块目录阵列中定位到对应块目录项后,由块目录阵列将该项的信息发送给块目录控制单元。
图6是本发明的GPU请求维护流程处理GPU请求时的工作流程图。下面的描述中每一个代号(如2.1.1.1)代表图中一个方块,其中“.”代表图中一个箭头,代号中的数字的个数代表流程行进的深度。代号的字面意思表示一条路径,即从起点(2.1.1、GPU访问GPU二级缓存)到达其代表的方块的一条路径。描述的顺序采取深度优先,左边优先,上面优先的原则,即优先沿着一条路径描述,同一深度的多个选择优先选择靠左的路径,若路径都在左侧则上面的路径优先。
2.1.1、GPU访问GPU二级缓存:当请求为逐出请求时,转2.1.1.1;当请求为写回请求时,转2.1.1.2;当请求为读请求时,且在GPU二级缓存中匹配到了请求的目标地址(简称“命中”),即读命中,转2.1.1.3;当请求为写请求,且GPU二级缓存命中时,即写命中时,转2.1.1.4;当请求是读或写请求,且GPU二级缓存缺失时,转2.1.1.5。
2.1.1.1、当请求为逐出请求时,GPU二级缓存逐出目标地址对应的Cacheline,域目录控制单元将对应区域的域目录项的GPU计数器减1,此次请求完成,转2.3。
2.1.1.2、当请求为写回请求时,GPU二级缓存将目标地址对应的Cacheline通过DMA总线写回主存,目录信息不作修改,此次请求完成,转2.3。
2.1.1.3、当请求为读请求,且GPU二级缓存命中时,GPU直接从GPU二级缓存获得数据响应,此次请求完成,转2.3。
2.1.1.4、当请求为写请求,且GPU二级缓存命中时,GPU二级缓存检查目标地址数据的状态信息,若数据为私有状态(简称“脏”),表示数据被独占,则GPU二级缓存直接修改数据,此次请求完成,转2.3。若发现数据非脏,则GPU二级缓存将请求转发给域目录处理,方法是:域目录控制单元检查目标地址对应的域目录项,若发现CPU计数器为零,转2.1.1.4.1;若发现CPU计数器非零,转2.1.1.4.2。
2.1.1.4.1、域目录控制单元检查目标地址对应的域目录项,若发现CPU计数器为零,表示目标地址的数据未被共享,GPU二级缓存直接修改请求地址对应的数据。此次请求完成,转2.3。
2.1.1.4.2、域目录控制单元检查目标地址对应的域目录项,若发现CPU计数器(简称“CPU_C”)非零,域目录控制单元将请求转发给块目录控制单元(简称“访问块目录”),由块目录控制单元检查块目录阵列,判断数据是否被CPU共享:若未在块目录阵列中匹配到请求的目标地址(简称“缺失”),即块目录缺失,转2.1.1.4.2.1;若块目录命中,转2.1.1.4.2.2。
2.1.1.4.2.1、若块目录缺失,则表示目标地址未在CPU二级缓存中缓存,则参照2.1.1.4.1的操作由GPU二级缓存直接修改数据,此次请求完成,转2.3。
2.1.1.4.2.2、若块目录命中,则CPU二级缓存要作废目标地址的副本,同时块目录控制单元作废目标地址对应的块目录项,并通知域目录控制单元更新目标地址的域目录项的CPU计数器减1。此次请求完成,转2.3。
2.1.1.5、无论读请求或写请求,若GPU二级缓存缺失,GPU二级缓存将请求转发给域目录(简称“GPU访问域目录”):若域目录缺失,转2.1.1.5.1;若域目录命中,转2.1.1.5.2。
2.1.1.5.1、若域目录缺失,说明目标地址所在区域并未被L2Cache缓存,访存请求直接通过DMA总线从主存得到整个区域的数据响应,同时域目录控制单元将域目录项中的GPU计数器(简称“GPU_C”)设为最大值。此次请求完成,转2.3。
2.1.1.5.2、若域目录命中,则域目录控制单元检查CPU计数器和GPU计数器:若两个计数器皆为0,转2.1.1.5.2.1;若CPU计数器为0,GPU计数器非0,转2.1.1.5.2.2;若CPU计数器非0,转2.1.1.5.2.3。
2.1.1.5.2.1、若两个计数器皆为0,也表示目标地址所在区域未被缓存,参照域目录访问缺失时(2.1.1.5.1)处理。此次请求完成,转2.3。
2.1.1.5.2.2、若CPU计数器为0,GPU计数器非0,则仅GPU拥有当前区域的部分数据,DMA将目标地址的数据从主存经域目录控制单元传递给GPU二级缓存,同时域目录控制单元将对应域目录项的GPU计数器加1。此次请求完成,转2.3。
2.1.1.5.2.3、若CPU计数器非0,则表示CPU中有目标地址所属区域的部分数据,域目录控制单元将请求转发到块目录控制单元处理(简称“访问块目录”),块目录控制单元处理方法是:若请求为写请求,且访问块目录命中(简称“写/命中”),转2.1.1.5.2.3.1;若请求为读请求,且访问块目录命中(简称“读/命中”),转2.1.1.5.2.3.2;若请求为读请求或写请求,且访问块目录缺失,转2.1.1.5.2.3.3。
2.1.1.5.2.3.1、若请求为写请求,且访问块目录命中,则块目录控制单元通知CPU二级缓存作废请求数据的副本,并使块目录中目标地址的块目录项失效,然后通知域目录控制单元将对应域目录项的CPU计数器减1。
2.1.1.5.2.3.1.1、通过块目录控制单元将CPU二级缓存中的数据转发给域目录控制单元,并通知域目录控制单元将目标地址的域目录项的GPU计数器加1。域目录控制单元收到数据后直接转发给GPU二级缓存。此次请求完成,转2.3。
2.1.1.5.2.3.2、若请求为读请求,且访问块目录命中,表示当前请求的数据块在CPU二级缓存中有副本,按照传统目录一致性协议方式处理:即块目录控制单元修改目标地址的块目录项的一致性状态信息为共享,并将GPU簇加入到该项的共享者列表中;若目标地址原始状态为私有状态,此时还要将数据写回主存。然后执行2.1.1.5.2.3.1.1。
2.1.1.5.2.3.3、无论读请求或写请求,若访问块目录缺失,表示当前数据在CPU二级缓存中没有副本。块目录控制单元向主存请求目标地址的数据,并将数据通过域目录控制单元转发给GPU的L2Cache。域目录控制单元在收到数据的同时将目标地址对应域目录项的GPU计数器加1。此次请求完成,转2.3。
图7是本发明的CPU请求维护流程处理CPU请求时的工作流程图。代号编号原则与图6相同。
2.2.1、CPU访问CPU二级缓存:当请求为读请求且命中(即读命中)时,转2.2.1.1;当请求为逐出请求时,转2.2.1.2;当请求为写回请求时,转2.2.1.3;当请求为写请求且命中时(即写命中),转2.2.1.4;若请求为读请求或写请求,且CPU二级缓存缺失时,转2.2.1.5。
2.2.1.1、当请求为读请求且命中时,CPU直接从CPU二级缓存获得数据响应。此次请求完成,转2.3。
2.2.1.2、当请求为逐出请求时,CPU二级缓存将请求同时转发给域目录和块目录,域目录控制单元将对应域目录项的CPU计数器减1;块目录控制单元则作废对应块目录项。此次请求完成,转2.3。
2.2.1.3、当请求为写回请求时,表示目标数据处于私有状态(即数据为脏)。将数据写回主存后,将目标地址的块目录项的状态信息设置为共享。此次请求完成,转2.3。
2.2.1.4、若为写请求且命中,同时目标地址的数据在CPU二级缓存中为脏,则表示数据已经被独占,则CPU二级缓存直接修改请求地址的数据完成写请求,此次请求完成,转2.3。若请求写命中但目标地址的数据在CPU二级缓存中非脏,则CPU二级缓存将请求转发给块目录,块目录对请求的处理方法是:若块目录的目标地址对应的块目录项中的共享者列表信息显示GPU簇中无目标地址的副本,转2.2.1.4.1;反之若有目标地址的副本,转2.2.1.4.2。
2.2.1.4.1、若块目录的目标地址对应的块目录项中的共享者列表信息显示GPU簇中无目标地址的副本,则按传统目录一致性协议方式处理:即块目录仅更新对应块目录项的状态信息为私有。此次请求完成,转2.3。
2.2.1.4.2、若块目录的目标地址对应的块目录项中的共享者列表信息显示GPU簇中有目标地址的副本,则按传统目录一致性协议方式处理:即块目录将对应目录项的状态信息设为私有,并将GPU簇从共享者列表中逐出。同时块目录控制单元通知域目录控制单元作废GPU二级缓存中的数据副本,并将对应域目录项中的GPU计数器减1。此次请求完成,转2.3。
2.2.1.5、无论读请求或写请求,若访问CPU二级缓存缺失,CPU二级缓存将请求同时转发给域目录和块目录。块目录通过块目录控制单元向主存申请数据。接下来根据域目录的访问情况做以下相应的处理:若域目录缺失,转2.2.1.5.1;若域目录命中,转2.2.1.5.2。
2.2.1.5.1、若访问域目录缺失,表示目标地址所属的整个区域都没有被缓存。域目录控制单元在域目录阵列中添加目标地址对应区域的域目录项,并将其CPU计数器加1,然后通知块目录控制单元“域目录访问缺失”。块目录控制单元在收到通知后,等待主存的数据响应,收到主存响应的数据后将其传给CPU二级缓存,并在块目录阵列中添加目标地址的块目录项。块目录控制单元结合域目录控制单元反馈的域目录缺失信息,按传统目录一致性协议方式处理:即将对应块目录项的状态信息设为私有(写请求)或共享(读请求),共享者列表设置为只有CPU簇。此次请求完成,转2.3。
2.2.1.5.2、若访问域目录命中,表示GPU二级缓存包含目标地址所属区域的部分数据。域目录控制单元向GPU二级缓存发送目标地址的数据请求:若GPU二级缓存缺失,转2.2.1.5.2.1;若GPU二级缓存命中,且数据非脏时,转2.2.1.5.2.2;若GPU二级缓存命中,且数据为脏时,转2.2.1.5.2.3。
2.2.1.5.2.1、若GPU二级缓存缺失,表示GPU没有目标地址的副本,域目录控制单元将对应域目录项的CPU计数器加1,并通知块目录控制单元“GPU二级缓存缺失”。块目录控制单元等待主存的数据响应并将数据转发给CPU二级缓存。块目录控制单元在块目录阵列中添加目标地址的块目录项,按传统目录一致性协议方式处理:即将块目录对应块目录项的状态信息设为私有(写请求)或共享(读请求),共享者列表设置为只有CPU簇。此次请求完成,转2.3。
2.2.1.5.2.2、若GPU二级缓存的目标地址命中且数据非脏(表示数据未被修改),域目录控制单元将域目录的对应域目录项的CPU计数器加1,并将GPU二级缓存中的数据传递给块目录控制单元。块目录控制单元将最先到达的数据(来自域目录控制单元或者主存)转发给CPU二级缓存,同时根据请求类型的不同做以下相应的处理:若请求类型为读请求,转2.2.1.5.2.2.1;若请求类型为写请求,转2.2.1.5.2.2.2。
2.2.1.5.2.2.1、若请求类型为读请求,块目录控制单元在块目录阵列中添加目标地址的块目录项,按传统目录一致性协议方式处理:即将对应块目录项状态信息设定为共享,共享者列表设置为CPU簇加GPU簇。此次请求完成,转2.3。
2.2.1.5.2.2.2、若请求类型为写请求,域目录控制单元还作废GPU二级缓存的副本并将对应的域目录项的GPU计数器减1。块目录控制单元在块目录阵列中添加目标地址的块目录项,按传统目录一致性协议方式处理:即将对应块目录项状态信息设定为私有,共享者列表设置为只有CPU簇。此次请求完成,转2.3。
2.2.1.5.2.3、若GPU二级缓存的目标地址命中且数据为脏(表示数据已修改),域目录控制单元将GPU二级缓存中请求地址的数据转发给块目录控制单元并将对应域目录项的CPU计数器加1。块目录控制单元收到GPU二级缓存的数据响应后,将数据转发给CPU二级缓存,并写回主存。然后根据请求类型的不同,做以下处理:若请求类型为写请求,转2.2.1.5.2.3.1;若请求类型为读请求,转2.2.1.5.2.3.2。
2.2.1.5.2.3.1、若请求类型为写请求,域目录控制单元作废GPU二级缓存的副本并将对应的域目录项的GPU计数器减1。块目录控制单元在块目录阵列中添加目标地址的块目录项,按传统目录一致性协议方式处理:即将对应块目录项状态信息设定为私有,共享者列表设置为只有CPU簇。此次请求完成,转2.3。
2.2.1.5.2.3.2、若请求类型为读请求,块目录控制单元在块目录阵列中添加目标地址的块目录项,按传统目录一致性协议方式处理:即将对应块目录项状态信息设定为共享,共享者列表设置为CPU簇加GPU簇。此次请求完成,转2.3。
Claims (3)
1.一种面向CPU+GPU处理器的混合粒度一致性维护方法,其特征在于包括以下步骤:
第一步,设计一个由一个粗粒度的域目录和一个细粒度的块目录组成的混合粒度的双目录结构,嵌在L2 Cache和主存通道之间,域目录和块目录相互通信,完成一致性信息的更新和维护以及数据的传递,且域目录支持通过DMA总线从主存获得数据响应,
1.1域目录设计方法是:
域目录与GPU二级缓存、CPU二级缓存、块目录和主存通道相连,域目录接收来自GPU二级缓存、CPU二级缓存和块目录的访存请求,域目录在块目录的辅助下实现GPU请求的数据的一致性访问,并辅助块目录实现CPU请求的数据的一致性访问;
域目录由MSHR队列C、多路选择器C、域目录阵列和域目录控制单元组成;MSHR队列C接收来自GPU二级缓存和CPU二级缓存的访存请求,将访存请求暂存,队列的顺序也即请求响应的顺序,MSHR队列C通过多路选择器C与域目录阵列相连;多路选择器C与MSHR队列C、域目录阵列相连,根据MSHR队列C中访存请求的地址在域目录阵列中定位对应域目录项;
域目录阵列采用多体结构的组织方式,域目录阵列的每个体都有自己的访问端口,每个体结构由多个域目录项组成,每个域目录项包含三个域,分别是域标志位、CPU计数器和GPU计数器;域标志位是当前域目录项记录的区域地址的部分比特位,多路选择器C通过将请求地址与域标志位比较,定位请求对应的域目录项;CPU计数器和GPU计数器分别记录域目录项对应区域在CPU和GPU二级缓存中的Cacheline副本数,所述区域是指一片连续的Cacheline;
域目录阵列的输出端连接域目录控制单元,域目录阵列将定位到的域目录项的一致性信息即GPU计数器和CPU计数器的值发送给域目录控制单元;
域目录控制单元与块目录中的块目录控制单元协作完成一致性的数据访问的控制任务;域目录控制单元与域目录阵列、直接访存总线接口、块目录控制单元、GPU二级缓存、多路选择器C连接,域目录控制单元向直接访存总线接口发送对主存通道的访问请求,直接访存总线接口将请求转发给主存通道,将主存通道返回的数据传给域目录控制单元;
域目录控制单元将自己无法单独处理的请求发给块目录控制单元,由块目录控制单元协助完成一致性的访问请求;或者域目录控制单元将数据反馈给块目录控制单元,以响应块目录控制单元发出的请求;
域目录控制单元向GPU二级缓存发送检查请求,并从GPU二级缓存接收响应的数据;
域目录控制单元向多路选择器C发送对域目录阵列的访问请求,多路选择器C在域目录阵列中定位到对应域目录项后,由域目录阵列将该项的信息发送给域目录控制单元;
1.2块目录设计方法是:
块目录与CPU二级缓存、域目录以及主存通道相连,块目录接收来自CPU二级缓存和域目录的访存请求,块目录在域目录的辅助下实现CPU请求的数据的一致性访问,并辅助域目录实现GPU请求的数据的一致性访问;
块目录由MSHR队列D、多路选择器D、块目录阵列和块目录控制单元组成;
MSHR队列D与CPU二级缓存、多路选择器D相连,接受来自CPU二级缓存的访存请求;多路选择器D与MSHR队列D、块目录阵列相连,根据MSHR队列D中访存请求的地址在块目录阵列中定位对应块目录项;
块目录阵列采用多体结构的组织方式,每个体结构由多个块目录项组成,每个块目录项包含三个域,分别是块标志位、状态位、共享者列表;块标志位是当前块目录项记录的Cacheline地址的部分比特位,多路选择器D通过将请求地址与块标志位比较定位块目录项;状态位用于记录当前Cacheline的一致性状态,它包括私有、共享、无效三种状态,私有状态标识当前Cacheline仅有一份,且已被修改;共享状态标识当前Cacheline有多个副本,或者当前Cacheline只有一份,但是未被修改,缓存中的数据与主存中的数据保持一致;无效状态标识当前Cacheline是无效的,不存在于CPU二级缓存中;共享者列表用以记录拥有当前Cacheline数据副本的处理器簇;
块目录阵列的输出端连接着块目录控制单元,块目录阵列将索引定位到的块目录项的一致性状态信息即状态位和共享者列表信息发送给块目录控制单元;
块目录控制单元与域目录控制单元协作完成一致性的数据访问的控制任务,块目录控制单元与块目录阵列、主存通道、域目录控制单元、CPU二级缓存、多路选择器D相连;
块目录控制单元向主存通道发送数据访问请求,并接收主存通道返回的数据响应;
块目录控制单元将自己无法单独处理的请求发给域目录控制单元,由域目录控制单元协助完成一致性的访问请求;或者块目录控制单元将数据反馈给域目录控制单元,以响应域目录控制单元发出的请求;
块目录控制单元向CPU二级缓存发送检查请求,并从CPU二级缓存接收响应的数据;
块目录控制单元向多路选择器D发送对块目录阵列的访问请求,多路选择器D在块目录阵列中定位到对应块目录项后,由块目录阵列将该项的信息发送给块目录控制单元;
第二步,基于混合粒度的双目录结构维护数据访问的一致性,方法是:若访存请求的初始来源为GPU,转2.1;若访存请求的初始来源为CPU,转2.2;
2.1采用GPU请求维护流程:
2.1.1、GPU访问GPU二级缓存:当请求为逐出请求时,转2.1.1.1;当请求为写回请求时,转2.1.1.2;当请求为读请求时,且在GPU二级缓存中匹配到了请求的目标地址即读命中,转2.1.1.3;当请求为写请求,且GPU二级缓存命中时,即写命中时,转2.1.1.4;当请求是读或写请求,且GPU二级缓存缺失时,转2.1.1.5;
2.1.1.1、当请求为逐出请求时,GPU二级缓存逐出目标地址对应的Cacheline,域目录控制单元将对应区域的域目录项的GPU计数器减1,此次请求完成,转2.3;
2.1.1.2、当请求为写回请求时,GPU二级缓存将目标地址对应的Cacheline通过DMA总线写回主存,目录信息不作修改,此次请求完成,转2.3;
2.1.1.3、当请求为读请求,且GPU二级缓存命中时,GPU直接从GPU二级缓存获得数据响应,此次请求完成,转2.3;
2.1.1.4、当请求为写请求,且GPU二级缓存命中时,GPU二级缓存检查目标地址数据的状态信息,若数据为私有状态即“脏”,表示数据被独占,则GPU二级缓存直接修改数据,此次请求完成,转2.3;若发现数据非脏,则GPU二级缓存将请求转发给域目录处理,方法是:域目录控制单元检查目标地址对应的域目录项,若发现CPU计数器为零,转2.1.1.4.1;若发现CPU计数器非零,转2.1.1.4.2;
2.1.1.4.1、GPU二级缓存直接修改请求地址对应的数据,转2.3;
2.1.1.4.2、域目录控制单元将请求转发给块目录控制单元,由块目录控制单元检查块目录阵列,判断数据是否被CPU共享:若未在块目录阵列中匹配到请求的目标地址即“缺失”,即块目录缺失,转2.1.1.4.2.1;若块目录命中,转2.1.1.4.2.2;
2.1.1.4.2.1、若块目录缺失,则表示目标地址未在CPU二级缓存中缓存,则参照2.1.1.4.1的操作由GPU二级缓存直接修改数据,此次请求完成,转2.3;
2.1.1.4.2.2、若块目录命中,则CPU二级缓存要作废目标地址的副本,同时块目录控制单元作废目标地址对应的块目录项,并通知域目录控制单元更新目标地址的域目录项的CPU计数器减1,此次请求完成,转2.3;
2.1.1.5、无论读请求或写请求,若GPU二级缓存缺失,GPU二级缓存将请求转发给域目录:若域目录缺失,转2.1.1.5.1;若域目录命中,转2.1.1.5.2;
2.1.1.5.1、若域目录缺失,说明目标地址所在区域并未被L2Cache缓存,访存请求直接通过DMA总线从主存得到整个区域的数据响应,同时域目录控制单元将域目录项中的GPU计数器设为最大值,此次请求完成,转2.3;
2.1.1.5.2、若域目录命中,则域目录控制单元检查CPU计数器和GPU计数器:若两个计数器皆为0,转2.1.1.5.2.1;若CPU计数器为0,GPU计数器非0,转2.1.1.5.2.2;若CPU计数器非0,转2.1.1.5.2.3;
2.1.1.5.2.1、若CPU计数器和GPU计数器皆为0,表示目标地址所在区域未被缓存,参照2.1.1.5.1处理,此次请求完成,转2.3;
2.1.1.5.2.2、若CPU计数器为0,GPU计数器非0,则仅GPU拥有当前区域的部分数据,DMA将目标地址的数据从主存经域目录控制单元传递给GPU二级缓存,同时域目录控制单元将对应域目录项的GPU计数器加1,此次请求完成,转2.3;
2.1.1.5.2.3、若CPU计数器非0,则表示CPU中有目标地址所属区域的部分数据,域目录控制单元将请求转发到块目录控制单元处理,块目录控制单元处理方法是:若请求为写请求,且访问块目录命中,转2.1.1.5.2.3.1;若请求为读请求,且访问块目录命中,转2.1.1.5.2.3.2;若请求为读请求或写请求,且访问块目录缺失,转2.1.1.5.2.3.3;
2.1.1.5.2.3.1、若请求为写请求,且访问块目录命中,则块目录控制单元通知CPU二级缓存作废请求数据的副本,并使块目录中目标地址的块目录项失效,然后通知域目录控制单元将对应域目录项的CPU计数器减1;
2.1.1.5.2.3.1.1、通过块目录控制单元将CPU二级缓存中的数据转发给域目录控制单元,并通知域目录控制单元将目标地址的域目录项的GPU计数器加1;域目录控制单元收到数据后直接转发给GPU二级缓存,此次请求完成,转2.3;
2.1.1.5.2.3.2、若请求为读请求,且访问块目录命中,表示当前请求的数据块在CPU二级缓存中有副本,块目录控制单元修改目标地址的块目录项的一致性状态信息为共享,并将GPU簇加入到该项的共享者列表中;若目标地址原始状态为私有状态,此时将数据写回主存,然后执行2.1.1.5.2.3.1.1;
2.1.1.5.2.3.3、无论读请求或写请求,若访问块目录缺失,表示当前数据在CPU二级缓存中没有副本,块目录控制单元向主存请求目标地址的数据,并将数据通过域目录控制单元转发给GPU的L2Cache,域目录控制单元在收到数据的同时将目标地址对应域目录项的GPU计数器加1,此次请求完成,转2.3;
2.2启动CPU请求维护流程:
2.2.1、CPU访问CPU二级缓存:当请求为读请求且命中时,转2.2.1.1;当请求为逐出请求时,转2.2.1.2;当请求为写回请求时,转2.2.1.3;当请求为写请求且命中时,转2.2.1.4;若请求为读请求或写请求,且CPU二级缓存缺失时,转2.2.1.5;
2.2.1.1、当请求为读请求且命中时,CPU直接从CPU二级缓存获得数据响应,此次请求完成,转2.3;
2.2.1.2、当请求为逐出请求时,CPU二级缓存将请求同时转发给域目录和块目录,域目录控制单元将对应域目录项的CPU计数器减1;块目录控制单元则作废对应块目录项,此次请求完成,转2.3;
2.2.1.3、当请求为写回请求时,表示目标数据处于私有状态,即数据为脏,将数据写回主存后,将目标地址的块目录项的状态信息设置为共享,此次请求完成,转2.3;
2.2.1.4、若为写请求且命中,同时目标地址的数据在CPU二级缓存中为脏,则表示数据已经被独占,CPU二级缓存直接修改请求地址的数据完成写请求,此次请求完成,转2.3;若请求写命中但目标地址的数据在CPU二级缓存中非脏,则CPU二级缓存将请求转发给块目录,块目录对请求的处理方法是:若块目录的目标地址对应的块目录项中的共享者列表信息显示GPU簇中无目标地址的副本,转2.2.1.4.1;反之若有目标地址的副本,转2.2.1.4.2;
2.2.1.4.1、若块目录的目标地址对应的块目录项中的共享者列表信息显示GPU簇中无目标地址的副本,则按传统目录一致性协议方式处理:即块目录仅更新对应块目录项的状态信息为私有,此次请求完成,转2.3;
2.2.1.4.2、若块目录的目标地址对应的块目录项中的共享者列表信息显示GPU簇中有目标地址的副本,则按传统目录一致性协议方式处理:即块目录将对应目录项的状态信息设为私有,并将GPU簇从共享者列表中逐出,同时块目录控制单元通知域目录控制单元作废GPU二级缓存中的数据副本,并将对应域目录项中的GPU计数器减1,此次请求完成,转2.3;
2.2.1.5、无论读请求或写请求,若访问CPU二级缓存缺失,CPU二级缓存将请求同时转发给域目录和块目录,块目录通过块目录控制单元向主存申请数据,接下来根据域目录的访问情况做以下相应的处理:若域目录缺失,转2.2.1.5.1;若域目录命中,转2.2.1.5.2;
2.2.1.5.1、域目录控制单元在域目录阵列中添加目标地址对应区域的域目录项,并将其CPU计数器加1,然后通知块目录控制单元“域目录访问缺失”;块目录控制单元在收到通知后,等待主存的数据响应,收到主存响应的数据后将其传给CPU二级缓存,并在块目录阵列中添加目标地址的块目录项;块目录控制单元结合域目录控制单元反馈的域目录缺失信息,按传统目录一致性协议方式处理:即若为写请求将对应块目录项的状态信息设为私有,共享者列表设置为只有CPU簇,此次请求完成,转2.3;若为读请求将对应块目录项的状态信息设为共享,共享者列表设置为只有CPU簇,此次请求完成,转2.3;
2.2.1.5.2、域目录控制单元向GPU二级缓存发送目标地址的数据请求:若GPU二级缓存缺失,转2.2.1.5.2.1;若GPU二级缓存命中,且数据非脏时,转2.2.1.5.2.2;若GPU二级缓存命中,且数据为脏时,转2.2.1.5.2.3;
2.2.1.5.2.1、若GPU二级缓存缺失,表示GPU没有目标地址的副本,域目录控制单元将对应域目录项的CPU计数器加1,并通知块目录控制单元“GPU二级缓存缺失”;块目录控制单元等待主存的数据响应并将数据转发给CPU二级缓存;块目录控制单元在块目录阵列中添加目标地址的块目录项,按传统目录一致性协议方式处理:即若为写请求将对应块目录项的状态信息设为私有,共享者列表设置为只有CPU簇,此次请求完成,转2.3;若为读请求将对应块目录项的状态信息设为共享,共享者列表设置为只有CPU簇,此次请求完成,转2.3;
2.2.1.5.2.2、若GPU二级缓存的目标地址命中且数据非脏,域目录控制单元将域目录的对应域目录项的CPU计数器加1,并将GPU二级缓存中的数据传递给块目录控制单元;块目录控制单元将最先到达的数据转发给CPU二级缓存,同时根据请求类型的不同做以下相应的处理:若请求类型为读请求,转2.2.1.5.2.2.1;若请求类型为写请求,转2.2.1.5.2.2.2;
2.2.1.5.2.2.1、若请求类型为读请求,块目录控制单元在块目录阵列中添加目标地址的块目录项,按传统目录一致性协议方式处理:即将对应块目录项状态信息设定为共享,共享者列表设置为CPU簇加GPU簇,此次请求完成,转2.3;
2.2.1.5.2.2.2、若请求类型为写请求,域目录控制单元作废GPU二级缓存的副本并将对应的域目录项的GPU计数器减1;块目录控制单元在块目录阵列中添加目标地址的块目录项,按传统目录一致性协议方式处理:即将对应块目录项状态信息设定为私有,共享者列表设置为只有CPU簇,此次请求完成,转2.3;
2.2.1.5.2.3、若GPU二级缓存的目标地址命中且数据为脏,域目录控制单元将GPU二级缓存中请求地址的数据转发给块目录控制单元并将对应域目录项的CPU计数器加1;块目录控制单元收到GPU二级缓存的数据响应后,将数据转发给CPU二级缓存,并写回主存;然后根据请求类型的不同,做以下处理:若请求类型为写请求,转2.2.1.5.2.3.1;若请求类型为读请求,转2.2.1.5.2.3.2;
2.2.1.5.2.3.1、域目录控制单元作废GPU二级缓存的副本并将对应的域目录项的GPU计数器减1,块目录控制单元在块目录阵列中添加目标地址的块目录项,按传统目录一致性协议方式处理:即将对应块目录项状态信息设定为私有,共享者列表设置为只有CPU簇,此次请求完成,转2.3;
2.2.1.5.2.3.2、块目录控制单元在块目录阵列中添加目标地址的块目录项,按传统目录一致性协议方式处理:即将对应块目录项状态信息设定为共享,共享者列表设置为CPU簇加GPU簇,此次请求完成,转2.3;
2.3结束。
2.如权利要求1所述的面向CPU+GPU处理器的混合粒度一致性维护方法,其特征在于所述域目录阵列的容量M即域目录项的个数满足M>=M1/M2,M1表示CPU二级缓存与GPU二级缓存的Cacheline数之和,M2表示单块区域内的Cacheline数;CPU计数器和GPU计数器的位数均为N为一个区域包含的Cacheline数。
3.如权利要求1所述的面向CPU+GPU处理器的混合粒度一致性维护方法,其特征在于所述块目录阵列容量大于等于CPU二级缓存的Cacheline数;每个块目录项的状态位用两比特位表示,每个处理器簇用一比特位表示,1表示拥有副本,0表示没有副本。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510092458.9A CN104615576B (zh) | 2015-03-02 | 2015-03-02 | 面向cpu+gpu处理器的混合粒度一致性维护方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510092458.9A CN104615576B (zh) | 2015-03-02 | 2015-03-02 | 面向cpu+gpu处理器的混合粒度一致性维护方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104615576A true CN104615576A (zh) | 2015-05-13 |
CN104615576B CN104615576B (zh) | 2017-03-15 |
Family
ID=53150028
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510092458.9A Active CN104615576B (zh) | 2015-03-02 | 2015-03-02 | 面向cpu+gpu处理器的混合粒度一致性维护方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104615576B (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107015923A (zh) * | 2015-09-30 | 2017-08-04 | 三星电子株式会社 | 用于管理探听操作的一致性互连和包括其的数据处理装置 |
CN107066706A (zh) * | 2017-03-27 | 2017-08-18 | 中国科学院计算技术研究所 | Gpu ffma指令在双发射模式下的通量测试方法 |
CN107861815A (zh) * | 2017-10-31 | 2018-03-30 | 华中科技大学 | 一种多gpu环境下的数据通信性能优化方法 |
CN107861890A (zh) * | 2016-09-22 | 2018-03-30 | 龙芯中科技术有限公司 | 访存处理方法、装置及电子设备 |
CN110389784A (zh) * | 2019-07-23 | 2019-10-29 | 哈尔滨汇拓投资中心(有限合伙) | 一种图像处理器环境中的编译查询处理方法 |
CN110535842A (zh) * | 2019-08-20 | 2019-12-03 | 之江实验室 | 一种基于抽样检测的拟态安全系统和方法 |
CN110727464A (zh) * | 2019-09-11 | 2020-01-24 | 无锡江南计算技术研究所 | 一种针对访存空间独立的多核处理器的信息处理方法 |
CN111414318A (zh) * | 2020-03-24 | 2020-07-14 | 江南大学 | 一种基于提前更新的数据一致性实现方法 |
CN111506521A (zh) * | 2019-01-31 | 2020-08-07 | 华为技术有限公司 | 一种存储器、数据请求写入方法及控制器 |
CN113435153A (zh) * | 2021-06-04 | 2021-09-24 | 上海天数智芯半导体有限公司 | 一种gpu缓存子系统互联的数字电路设计方法 |
CN113435040A (zh) * | 2021-06-26 | 2021-09-24 | 天津大学 | 基于瞬变流的爆管直径反演方法 |
CN116561020A (zh) * | 2023-05-15 | 2023-08-08 | 合芯科技(苏州)有限公司 | 一种混合缓存粒度下的请求处理方法、设备及存储介质 |
WO2024051041A1 (zh) * | 2022-09-06 | 2024-03-14 | 浪潮电子信息产业股份有限公司 | 一种数据存取方法、装置、设备和非易失性可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110153946A1 (en) * | 2009-12-22 | 2011-06-23 | Yan Solihin | Domain based cache coherence protocol |
US8032923B1 (en) * | 2006-06-30 | 2011-10-04 | Trend Micro Incorporated | Cache techniques for URL rating |
CN103955435A (zh) * | 2014-04-09 | 2014-07-30 | 上海理工大学 | 一种融合多级缓存目录建立访问方法 |
-
2015
- 2015-03-02 CN CN201510092458.9A patent/CN104615576B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8032923B1 (en) * | 2006-06-30 | 2011-10-04 | Trend Micro Incorporated | Cache techniques for URL rating |
US20110153946A1 (en) * | 2009-12-22 | 2011-06-23 | Yan Solihin | Domain based cache coherence protocol |
CN103955435A (zh) * | 2014-04-09 | 2014-07-30 | 上海理工大学 | 一种融合多级缓存目录建立访问方法 |
Non-Patent Citations (1)
Title |
---|
JASON POWER ET AL: ""Heterogeneous system coherence for integrated CPU-GPU systems"", 《PROCEEDINGS OF THE 46TH ANNUAL IEEE/ACM INTERNATIONAL SYMPOSIUM ON MICROARCHITECTURE》 * |
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107015923A (zh) * | 2015-09-30 | 2017-08-04 | 三星电子株式会社 | 用于管理探听操作的一致性互连和包括其的数据处理装置 |
CN107015923B (zh) * | 2015-09-30 | 2022-03-04 | 三星电子株式会社 | 用于管理探听操作的一致性互连和包括其的数据处理装置 |
CN107861890B (zh) * | 2016-09-22 | 2020-04-14 | 龙芯中科技术有限公司 | 访存处理方法、装置及电子设备 |
CN107861890A (zh) * | 2016-09-22 | 2018-03-30 | 龙芯中科技术有限公司 | 访存处理方法、装置及电子设备 |
CN107066706A (zh) * | 2017-03-27 | 2017-08-18 | 中国科学院计算技术研究所 | Gpu ffma指令在双发射模式下的通量测试方法 |
CN107066706B (zh) * | 2017-03-27 | 2019-07-30 | 中国科学院计算技术研究所 | Gpu ffma指令在双发射模式下的通量测试方法 |
CN107861815B (zh) * | 2017-10-31 | 2020-05-19 | 华中科技大学 | 一种多gpu环境下的数据通信性能优化方法 |
CN107861815A (zh) * | 2017-10-31 | 2018-03-30 | 华中科技大学 | 一种多gpu环境下的数据通信性能优化方法 |
CN111506521A (zh) * | 2019-01-31 | 2020-08-07 | 华为技术有限公司 | 一种存储器、数据请求写入方法及控制器 |
CN111506521B (zh) * | 2019-01-31 | 2023-10-20 | 华为技术有限公司 | 一种存储器、数据请求写入方法及控制器 |
CN110389784A (zh) * | 2019-07-23 | 2019-10-29 | 哈尔滨汇拓投资中心(有限合伙) | 一种图像处理器环境中的编译查询处理方法 |
CN110535842A (zh) * | 2019-08-20 | 2019-12-03 | 之江实验室 | 一种基于抽样检测的拟态安全系统和方法 |
CN110727464A (zh) * | 2019-09-11 | 2020-01-24 | 无锡江南计算技术研究所 | 一种针对访存空间独立的多核处理器的信息处理方法 |
CN111414318A (zh) * | 2020-03-24 | 2020-07-14 | 江南大学 | 一种基于提前更新的数据一致性实现方法 |
CN111414318B (zh) * | 2020-03-24 | 2022-04-29 | 江南大学 | 一种基于提前更新的数据一致性实现方法 |
CN113435153B (zh) * | 2021-06-04 | 2022-07-22 | 上海天数智芯半导体有限公司 | 一种gpu缓存子系统互联的数字电路设计方法 |
CN113435153A (zh) * | 2021-06-04 | 2021-09-24 | 上海天数智芯半导体有限公司 | 一种gpu缓存子系统互联的数字电路设计方法 |
CN113435040A (zh) * | 2021-06-26 | 2021-09-24 | 天津大学 | 基于瞬变流的爆管直径反演方法 |
WO2024051041A1 (zh) * | 2022-09-06 | 2024-03-14 | 浪潮电子信息产业股份有限公司 | 一种数据存取方法、装置、设备和非易失性可读存储介质 |
CN116561020A (zh) * | 2023-05-15 | 2023-08-08 | 合芯科技(苏州)有限公司 | 一种混合缓存粒度下的请求处理方法、设备及存储介质 |
CN116561020B (zh) * | 2023-05-15 | 2024-04-09 | 合芯科技(苏州)有限公司 | 一种混合缓存粒度下的请求处理方法、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104615576B (zh) | 2017-03-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104615576A (zh) | 面向cpu+gpu处理器的混合粒度一致性维护方法 | |
US10310979B2 (en) | Snoop filter for cache coherency in a data processing system | |
US6976131B2 (en) | Method and apparatus for shared cache coherency for a chip multiprocessor or multiprocessor system | |
TWI463318B (zh) | 快取一致性處理系統、快取記憶體,及其方法 | |
TW475117B (en) | Method of shared intervention for cache lines in the recently read state for SMP bus | |
CN104106061B (zh) | 多处理器数据处理系统以及其中的方法、高速缓存存储器和处理单元 | |
US6330643B1 (en) | Cache coherency protocols with global and local posted operations | |
CN104508645B (zh) | 用于使用多个子锁来控制对具有读取器‑写入器锁的共享数据结构的访问的系统和方法 | |
US20070055826A1 (en) | Reducing probe traffic in multiprocessor systems | |
US6931496B2 (en) | Data-maintenance method of distributed shared memory system | |
TW200815992A (en) | An exclusive ownership snoop filter | |
TW201107974A (en) | Cache coherent support for flash in a memory hierarchy | |
EP1630678B1 (en) | Information processing apparatus | |
US20040088496A1 (en) | Cache coherence directory eviction mechanisms in multiprocessor systems | |
US8209490B2 (en) | Protocol for maintaining cache coherency in a CMP | |
US6950913B2 (en) | Methods and apparatus for multiple cluster locking | |
US20040088495A1 (en) | Cache coherence directory eviction mechanisms in multiprocessor systems | |
CN112955876B (zh) | 用于在数据处理网络中传输数据的方法和装置 | |
KR20160099722A (ko) | 캐시-코히어런시를 갖춘 집적 회로들 | |
US20040088494A1 (en) | Cache coherence directory eviction mechanisms in multiprocessor systems | |
US6418514B1 (en) | Removal of posted operations from cache operations queue | |
EP3788493B1 (en) | Data processing network with flow compaction for streaming data transfer | |
US20050262250A1 (en) | Messaging protocol | |
US8397029B2 (en) | System and method for cache coherency in a multiprocessor system | |
US20140289481A1 (en) | Operation processing apparatus, information processing apparatus and method of controlling information processing apparatus |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |