发明名称 面向CPU+GPU处理器的混合粒度一致性维护方法
摘要 本发明公开了面向CPU+GPU处理器的混合粒度一致性维护方法,目的是解决CPU簇和GPU簇的二级缓存的一致性问题。技术方案是设计一个由粗粒度的域目录和细粒度的块目录组成的双目录结构,双目录结构嵌在L2Cache和主存通道之间,根据CPU簇和GPU簇发出的不同访存请求类型,若访存请求的初始来源为GPU,则采用GPU请求维护流程,若访存请求的初始来源为GPU,启动CPU请求维护流程,通过域目录和块目录相互通信并协作,完成一致性信息的更新和维护以及数据的传递,保证处理器访存的一致性。本发明能有效过滤GPU应用对一致性资源的竞争、减少GPU对CPU性能干扰、保证CPU数据精确记录,极大地提升CPU+GPU异构多核系统的处理性能,且能满足CPU应用对重要数据精细跟踪的需求。
申请公布号 CN104615576B 申请公布日期 2017.03.15
申请号 CN201510092458.9 申请日期 2015.03.02
申请人 中国人民解放军国防科学技术大学 发明人 邢座程;唐川;张洋;刘苍;汤先拓;王锋;王庆林;原略超;吕朝;董永旺;危乐
分类号 G06F15/16(2006.01)I 主分类号 G06F15/16(2006.01)I
代理机构 国防科技大学专利服务中心 43202 代理人 郭敏
主权项 一种面向CPU+GPU处理器的混合粒度一致性维护方法,其特征在于包括以下步骤:第一步,设计一个由一个粗粒度的域目录和一个细粒度的块目录组成的混合粒度的双目录结构,嵌在二级缓存即L2Cache和主存通道之间,域目录和块目录相互通信,完成一致性信息的更新和维护以及数据的传递,且域目录支持通过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结束。
地址 410073 湖南省长沙市开福区德雅路109号