首页> 中国专利> 基于位置对应关系的指令Cache一致性的实现方法

基于位置对应关系的指令Cache一致性的实现方法

摘要

本发明涉及一种基于位置对应关系的指令Cache一致性的实现方法,在指令Cache管理部件和二级Cache管理部件设置具有相同组织结构的Itag阵列和FB装填缓冲,其中,指令Cache管理部件采用虚地址,二级Cache管理部件采用物理地址。当出现指令访问指令Cache缺失时,先申请V‑FB装填缓冲的条目,再根据V‑FB装填缓冲的条目申请P‑FB装填缓冲的条目,当指令Cache块数据完全返回指令Cache管理部件后,V‑FB装填缓冲开始装填V‑Itag阵列,装填完毕后,根据装填V‑Itag阵列的位置,P‑FB装填缓冲将内容装填到P‑Itag阵列的相应位置,最后依序将P‑FB装填缓冲的条目和V‑FB装填缓冲的条目置无效。本发明实现了指令Cache的一致性。

著录项

  • 公开/公告号CN106776367A

    专利类型发明专利

  • 公开/公告日2017-05-31

    原文格式PDF

  • 申请/专利权人 上海高性能集成电路设计中心;

    申请/专利号CN201611147800.1

  • 发明设计人 胡向东;李俊;蒋生健;

    申请日2016-12-13

  • 分类号G06F12/0817;G06F12/0808;

  • 代理机构上海泰能知识产权代理事务所;

  • 代理人宋缨

  • 地址 200120 上海市浦东新区张江高科园区毕升路399号

  • 入库时间 2023-06-19 02:17:44

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-05-12

    授权

    授权

  • 2017-06-23

    实质审查的生效 IPC(主分类):G06F12/0817 申请日:20161213

    实质审查的生效

  • 2017-05-31

    公开

    公开

说明书

技术领域

本发明涉及微处理器的Cache一致性技术领域,特别是涉及一种基于位置对应关系的指令Cache一致性的实现方法。

背景技术

现代微处理器中,Cache已是标准配置,通常有指令Cache(简称“I-Cache”),数据Cache(简称“D-Cache”),二级Cache(简称“L2-Cache”),三级Cache(简称“L3-Cache”)等。要实现Cache之间的数据互通,必须要维护Cache之间的数据一致性。通常情况下,D-Cache,L2-Cache或者L3-Cache都存有可写副本,并且是以物理地址的方式存储。而I-Cache内是只读副本,可以以物理地址的方式存储,也可以以虚地址的方式存储。

副本要获得可写权限,需要将其他同样拥有此副本的Cache置无效。通常,判断是否拥有同样的副本的标准是看副本的物理地址是否与正在获取可写权限的副本的物理地址是否同属于一个Cache块。

指令地址空间中存储数据的是指令。一般情况下,指令都是事先编译好的,CPU并不需要对指令空间中存储的内容进行修改。但是对于执行像Java这类的解释性的程序,CPU需要执行的指令是临时生成的,而不是事先编译好的,所以CPU一边“生产”指令,一边“消费”指令。“生产”指令的过程,实际上就是对指令空间进行写操作,在指令空间中旧的副本需要被清除。如果旧的副本在I-Cache中,则需要从I-Cache将旧的副本置无效。对于不支持指令Cache一致性的CPU而言,I-Cache置无效的方式通常是I-Cache全部刷新,并且需要软件干预,不过这样做的缺点是效率较低,而且I-Cache的刷新会将一些不需要被清理的副本也被清理出去,造成不必要的I-Cache缺失,影响性能。

硬件支持指令Cache一致性可以更好的支持Java这类解释性程序的执行,即由硬件保证,CPU写指令空间的数据时,硬件自动将I-Cache中相应的旧的指令置无效。这样CPU在“消费”自己“生产”的指令时,可以无需软件完成置无效的动作,就可以取到正确的新指令。

对于以物理地址存储的I-Cache而言,硬件实现指令Cache一致性时,由于L2-Cache也是物理地址存储,故只需按照物理地址来生成二次请求即可。不过以物理地址存储的指令Cache在访问的时候,比直接用虚地址存储的指令Cache访问起来要多一个I-TLB的虚实地址代换步骤。而对于用虚地址存储的I-Cache,由于L2-Cache是按照物理地址存储,则二次请求无法直接按照地址生成,硬件实现指令Cache的一致性需要寻找新的方法。

发明内容

本发明所要解决的技术问题是提供一种基于位置对应关系的指令Cache一致性的实现方法,使得在I-Cache为虚地址存储且L2-Cache为物理地址存储的前提下,实现指令Cache的一致性。

本发明解决其技术问题所采用的技术方案是:提供一种基于位置对应关系的指令Cache一致性的实现方法,在指令Cache管理部件设置V-Itag阵列和V-FB装填缓冲,在二级Cache管理部件中设置P-Itag阵列和P-FB装填缓冲,其中,V-FB装填缓冲和P-FB装填缓冲具有相同组织结构,V-FB装填缓冲与P-FB装填缓冲在相同的位置上保存着同一个Cache行的信息,V-FB装填缓冲记录的是虚地址,P-FB装填缓冲记录的物理地址;V-Itag阵列和P-Itag阵列具有相同组织结构,V-Itag阵列与P-Itag阵列中相同的位置存放着同一个Cache行的信息,V-Itag阵列采用虚地址标记,P-Itag阵列采用物理地址标记;

当出现指令访问指令Cache缺失时,对指令Cache缺失进行装填,具体为:先申请V-FB装填缓冲的条目并记录所需信息,再根据V-FB装填缓冲的条目申请P-FB装填缓冲的条目并记录所需信息,当指令Cache块数据完全返回指令Cache管理部件后,V-FB装填缓冲开始装填V-Itag阵列,装填完毕后,根据装填V-Itag阵列的位置,P-FB装填缓冲将内容装填到P-Itag阵列的相应位置,最后依序将P-FB装填缓冲的条目和V-FB装填缓冲的条目置无效。

所述申请V-FB装填缓冲的条目以及与其相应的P-FB装填缓冲的条目并记录所需信息具体为:先申请V-FB装填缓冲的条目,并在所述V-FB装填缓冲的条目中记录所需信息,接着获取缺失的Cache块的物理地址,然后向二级Cache管理部件发送一次请求,申请与所述先申请V-FB装填缓冲的条目相应的P-FB装填缓冲的条目,并在所述P-FB装填缓冲的条目中记录所需信息。

所述V-FB装填缓冲装填V-Itag阵列完毕后向二级Cache管理部件发送拷贝类请求,P-FB装填缓冲将内容装填到P-Itag阵列中,其中,装填到P-Itag阵列中位置与装填到V-Itag阵列中的位置相对应。

所述V-FB装填缓冲装填V-Itag阵列时,在装填Cache块的第一个Flit数据时,将原有位置的V-Itag置无效,装填Cache块的最后一个Flit数据的时候将新的地址装填至V-Itag中并置有效。

当发生数据错误时,指令Cache管理部件向二级Cache管理部件发送抛弃类请求,二级Cache管理部件把相应的P-FB装填缓冲的条目置无效,然后向指令Cache管理部件发送响应信息;指令Cache管理部件接收到该抛弃类请求的响应信息后,把相应的V-FB装填缓冲的条目置无效。

在装填过程中,在二级Cache管理部件接收到写类请求或者外部置无效类二次请求时,根据所述写类请求和外部置无效类二次请求的物理地址查询P-Itag阵列和P-FB装填缓冲,当发现P-Itag阵列或P-FB装填缓冲中有所述物理地址的副本时置P-Itag阵列相应位置或P-FB装填缓冲相应条目无效,并将P-Itag阵列所在位置或P-FB装填缓冲的条目作为信息向指令Cache管理部件发送置无效二次请求。

若指令Cache管理部件收到将P-FB装填缓冲的条目作为信息的置无效二次请求时,处理过程如下:

如果V-FB装填缓冲中的内容正处于已经发送抛弃类请求且等待二级Cache管理部件返回响应时,不进行处理;

如果V-FB装填缓冲中的内容正处于已经发送拷贝类请求且等待二级Cache返回管理部件响应时,对V-FB装填缓冲不进行处理,将V-Itag阵列中所对应的副本置无效;

如果V-FB装填缓冲中的内容已经装填完指令Cache,但还没有发送拷贝类请求,也没有抛弃类请求,则将V-FB装填缓冲置无效,同时将V-Itag阵列中所对应的副本置无效;

如果V-FB装填缓冲中的内容还未装填完指令Cache,且没有发送拷贝类请求或者抛弃类请求,则将V-FB装填缓冲置无效。

若指令Cache管理部件收到将P-Itag阵列所在位置作为信息的置无效二次请求时,处理过程如下:

如果V-Itag阵列所在位置还未被V-FB装填缓冲中的内容完全覆盖,即V-FB装填缓冲中的内容还未开始装填或者还没有完成装填指令Cache,则将V-Itag阵列所在位置的内容置无效;

如果V-FB装填缓冲中的内容已经完成对V-Itag阵列所在位置的装填,则忽略该置无效二次请求。

有益效果

由于采用了上述的技术方案,本发明与现有技术相比,具有以下的优点和积极效果:本发明不基于地址对应关系,无需TLB代换,也不需要L2-Cache与I-Cache为包含关系,能够在I-Cache为虚地址标记且L2-Cache为物理地址标记的情况下,利用在L2-Cache管理部件中设置的与指令Tag对应的缓冲,通过位置判别的方式,实现I-Cache与L2-Cache的一致性。该方法对I-Cache和L2-Cache的相互约束要求少,在一边生产指令、一边消费指令的应用模式下,可以提高微处理器的性能。

附图说明

图1是本发明所涉及的存储器层次示意图;

图2为取指请求不命中I-Cache和V-FB时,分配V-FB条目,并且申请分配编号相同的P-FB条目示意图;

图3为V-FB条目装填V-Itag示意图;

图4为拷贝类请求CP及其响应处理流程示意图;

图5为抛弃类请求EV及其响应处理流程示意图;

图6为V-FB条目还未开始或者未完成装填V-Itag时收到置V-FB无效二次请处理流程示意图;

图7为V-FB条目完成装填V-Itag但未发出拷贝类请求时收到置V-FB无效二次请处理流程示意图;

图8为置V-FB无效二次请求与拷贝类请求同时存在处理流程示意图;

图9为置V-FB无效二次请求与抛弃类请求同时存在处理流程示意图;

图10为V-FB还未完成装填V-Itag时,置V-Itag无效二次请处理流程示意图;

图11为V-FB完成装填V-Itag后,置V-Itag无效二次请处理流程示意图。

具体实施方式

下面结合具体实施例,进一步阐述本发明。应理解,这些实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。

本发明的实施方式涉及一种基于位置对应关系的指令Cache一致性的实现方法,该发明涉及的存储器层次如图1所示,包括I-Cache管理部件、D-Cache管理部件、L2-Cache管理部件、L3-Cache管理部件以及存储器等结构,在I-Cache管理部件和L2-Cache管理部件中设置相同组织结构的Itag阵列和FB装填缓冲。V-FB装填缓冲与P-FB装填缓冲在相同的位置上保存着同一个Cache行的信息,只是V-FB装填缓冲记录的是虚地址,P-FB装填缓冲记录的物理地址。V-Itag阵列与P-Itag阵列中相同的位置(同索引同路)也存放着同一个Cache行的信息,其中V-Itag阵列采用虚地址标记,P-FB阵列采用物理地址标记。在装填条目的短暂几拍内,允许V-Itag阵列与P-Itag阵列,V-FB装填缓冲与P-FB装填缓冲存储的内容不一致,但处理流程会保证这几拍的正确性,并最终使得L2-Cache管理部件中的记录和I-Cache管理部件中的记录保持一致。

D-Cache的写类请求和外部置无效类二次请求都有可能命中P-FB或者P-Itag,造成相应条目的置无效,此时需要通知I-Cache管理部件中的V-FB和V-Itag进行相应的操作。另外,I-Cache管理部件也可以发送拷贝类请求或者抛弃类请求给L2-Cache管理部件,并得到响应,从而维护I-Cache的一致性。

如图2所示,当取指请求不命中指令Cache,也不命中V-FB装填缓冲时,申请一个V-FB装填缓冲的条目,如图中黑色阴影块所示;然后向L2-Cache管理部件申请与V-FB装填缓冲的编号相同的P-FB装填缓冲的条目。在申请V-FB装填缓冲的条目时,已经确定好该条目将来装填的V-Itag阵列的位置,如图中竖线阴影所示。此时该V-Itag阵列的位置可能无效,也可能有效且为其他Cache行的信息。

具体地说,当出现指令访问指令Cache缺失,总是先申请V-FB装填缓冲的条目,假设为条目i,在申请的条目i中记录好所需信息之后,再查询I-TLB,获取缺失Cache块的物理地址,然后向L2-Cache管理部件发送一次请求,申请与V-FB装填缓冲相对应的P-FB装填缓冲的条目i,记录所需信息。然后查询L2-Cache管理部件,等待数据返回。

如图3所示,当指令数据由L2-Cache管理部件返回到V-FB装填缓冲中时,在适当的时机,比如指令Cache管理部件的写端口有空闲时,将V-FB装填缓冲中的数据装填到V-Itag阵列中。装填的过程需要持续多个时钟周期。具体地说,当指令Cache块数据完全返回I-Cache管理部件后,V-FB装填缓冲开始装填指令Cache,修改V-Itag阵列。由于装填一个Cache块需要多个周期,所以一般的装填处理都是在装填Cache块的第一个Flit数据时,将原有位置的V-Itag置无效,装填Cache块的最后一个Flit数据的时候将新的地址装填至V-Itag中并置有效。

如图4所示,当V-FB装填缓冲的条目完成装填V-Itag阵列时,向L2-Cache管理部件发送拷贝类请求CP,把P-FB装填缓冲中的内容装填到P-Itag阵列对应的条目中,装填完成后,把该P-FB装填缓冲的条目置无效,同时向I-Cache管理部件发送拷贝类请求的响应。当I-Cache管理部件接收到该响应时,把对应的V-FB装填缓冲的条目置无效,完成一次装填过程。也就是说,在V-FB装填缓冲将整个Cache块的数据装填完毕之后,向L2-Cache管理部件发出拷贝类请求CP,携带V-FB装填缓冲的条目号i,被装填的V-Itag的索引号X和路号W,通知第i个条目的P-FB装填缓冲,将物理地址写入索引号X和路号W的P-Itag阵列中并置有效,然后P-FB装填缓冲的条目i被删除,并向I-Cache管理部件返回完成响应,V-FB装填缓冲收到该完成响应后,删除条目i。

如图5所示,当由于发生数据错等原因,需要抛弃某个V-FB条目时,I-Cache管理部件向L2-Cache管理部件发送抛弃类请求EV,L2-Cache管理部件把相应的P-FB条目置无效,然后向I-Cache管理部件发送响应信息。I-Cache管理部件接收到该抛弃类请求的响应后,把相应的V-FB条目置无效,完成一次抛弃类请求的处理流程。

也就是说,当V-FB装填缓冲的条目i因为某种原因(装填的数据有错误或者装填的数据是错误路径上的无效数据)无需对指令Cache进行装填时,向L2-Cache管理部件发出抛弃类请求EV。P-FB装填缓冲收到该请求后,删除条目i,然后向V-FB装填缓冲返回完成响应,之后V-FB装填缓冲删除条目i。

假定上述V-FB装填缓冲的条目i中存放的将要装填的新Cache块的数据为W,在V-Itag阵列中将要被覆盖的旧Cache块的数据为D,可能收到的置无效二次请求如下:

在数据W完全装入V-FB装填缓冲的条目i之后,不论数据W是否已经装入V-Itag阵列中,I-Cache管理部件都可能会收到L2-Cache管理部件发过来针对数据W的置无效二次请求;在数据W还未完全装入V-FB装填缓冲的条目i之前,则L2-Cache管理部件不会发出针对W的二次请求。

对于数据D,在V-FB装填缓冲的条目i完成对V-Itag阵列的装填,向L2-Cache管理部件发出拷贝类请求,并且收到L2-Cache管理部件的响应之后,I-Cache管理部件不会收到针对数据D的置无效二次请求。在收到上述L2-Cache管理部件的响应之前,都有可能收到针对数据D的置无效二次请求。

在上述可能收到置无效二次请求的时间段中,当L2-Cache管理部件收到由D-Cache管理部件发送的写类请求或者由存储器/三级缓存管理部件发送的外部置无效请求时,通过写类请求或外部置无效请求的物理地址A同时查询P-Itag阵列和P-FB装填缓冲。当符合下述任一条件时I-Cache管理部件将收到置无效二次请求:(1)若发现P-Itag阵列中有地址A的副本,则记录地址A的副本所在的索引号X和路号W,并作为二次请求的信息发给I-Cache管理部件;(2)若发现P-FB装填缓冲有地址A的副本,则记录地址A的副本所在的条目号i,并作为二次请求的信息发给I-Cache管理部件。

I-Cache管理部件在不同的阶段,针对收到的数据W和数据D的置无效二次请求,有不同的处理方式。

若I-Cache管理部件收到针对V-FB装填缓冲的条目i(即数据W)的置无效二次请求时,处理如下:

如果数据W还未装填完指令Cache,且没有发送拷贝类请求CP或者抛弃类请求EV,则只需要把W置无效即可。如图6所示,当写类请求或者外部置无效类二次请求命中某个P-FB装填缓冲的条目时,需要将该P-FB装填缓冲的条目置无效,同时向I-Cache管理部件发送置V-FB装填缓冲无效二次请求。如果对应的V-FB装填缓冲的条目还未装填完指令Cache,且当前没有发出拷贝类请求或者抛弃类请求时,则把该V-FB装填缓冲的条目置无效。

如果数据W已经装填完指令Cache,但还没有发送拷贝类请求CP,也没有抛弃类请求EV,则需要把数据W置无效,也需要把V-Itag中索引号X和路号W的副本置无效,因为此时数据D所在的位置已经被数据W覆盖。如图7所示,当写类请求或者外部置无效类二次请求命中某个P-FB装填缓冲的条目时,需要将该P-FB装填缓冲的条目置无效,同时向I-Cache管理部件发送置V-FB装填缓冲的无效二次请求。如果对应的V-FB装填缓冲已经装填完指令Cache,但还没有发送拷贝类请求CP,也没有抛弃类请求EV,则把该V-FB装填缓冲的条目置无效,也要把该V-FB条目装填的V-Itag阵列所对应的索引号和路号中的内容置无效。将V-Itag阵列置无效的动作完成之后,其对应的P-Itag阵列情况有可能:一种为无效;另一种为有效且为旧的地址。如果该P-Itag阵列为有效,则I-Cache管理部件可能会收到置V-Itag阵列的无效二次请求,由于此时V-Itag阵列的对应位置的内容已经无效,因此再次置无效不会产生任何效果,不会影响正确性。

如果数据W正处于已经发送拷贝类请求CP且等待L2Cache返回管理部件响应时,对V-FB装填缓冲不进行处理,但是要把V-Itag阵列中索引号X和路号W的副本置无效,因为此时数据D所在的位置已经被数据W覆盖。如图8所示,当写类请求或者外部置无效类二次请求命中某个P-FB条目时,需要将该P-FB装填缓冲的条目置无效,同时向I-Cache管理部件发送置V-FB装填缓冲的无效二次请求。I-Cache管理部件接收到该二次请求时,发现对应的V-FB装填缓冲的条目已经发出拷贝类请求CP,正在等待L2-Cache管理部件的响应,则把该V-FB装填缓冲的条目装填的V-Itag阵列中的内容置无效。L2-Cache管理部件处理该拷贝类请求,并向I-Cache管理部件发送响应。I-Cache管理部件接到该拷贝类请求的响应后才把该V-FB装填缓冲的条目置无效。

如果数据W正处于已经发送抛弃类请求EV且等待L2-Cache管理部件返回响应时,不进行处理。如图9所示,当写类请求或者外部置无效类二次请求命中某个P-FB装填缓冲的条目时,需要将该P-FB装填缓冲的条目置无效,同时向I-Cache管理部件发送置V-FB装填缓冲的无效二次请求。I-Cache管理部件接收到该二次请求时,发现对应的条目已经发出抛弃类请求EV,正在等待L2-Cache管理部件的响应,则忽略该置V-FB装填缓冲的无效二次请求。L2Cache管理部件处理该抛弃类请求,并向I-Cache端发送响应。I-Cache管理部件接到该抛弃类请求的响应后才把该V-FB条目置无效。

若I-Cache管理部件收到针对V-Itag阵列中索引号X和路号W(即数据D)的副本的置无效二次请求,处理如下:

如果此时数据D还未被数据W完全覆盖,即数据W还未开始装填或者还没有完成装填I-Cache,则把I-Cache中的D置无效。如图10所示,当写类请求或者外部置无效类二次请求命中某个P-Itag阵列所对应位置时,需要将该P-Itag阵列所对应的位置置无效,同时向I-Cache管理部件发送置V-Itag阵列的无效二次请求。I-Cache管理部件接收到该二次请求时,发现该V-Itag阵列对应的V-FB装填缓冲的条目不处于装填完成的状态,则把该V-Itag阵列所对应的位置中的内容置无效。此时如果处于装填过程中,由于装填开始时会把该V-Itag阵列的所对应的位置置无效,所以再次置无效不会产生任何效果,装填仍然可以继续。

如果数据W已经完成对V-Itag中索引号X和路号W的的装填,则忽略该置无效二次请求。如图11所示,当写类请求或者外部置无效类二次请求命中某个P-Itag阵列所对应的位置时,需要将该P-Itag所对应的位置置无效,同时向I-Cache管理部件发送置V-Itag阵列的无效二次请求。I-Cache管理部件接收到该二次请求时,发现该V-Itag阵列对应的V-FB装填缓冲条目处于装填完成的状态,则说明L2-Cache管理部件命中的是装填之前的条目,且该条目已经被新的内容覆盖,因此可以直接忽略该置V-Itag阵列无效二次请求。

不难发现,本发明不基于地址对应关系,无需TLB代换,也不需要L2-Cache与I-Cache为包含关系,能够在I-Cache为虚地址标记且L2-Cache为物理地址标记的情况下,利用在L2-Cache管理部件中设置的与指令Tag对应的缓冲,通过位置判别的方式,实现I-Cache与L2-Cache的一致性。该方法对I-Cache和L2-Cache的相互约束要求少,在一边生产指令、一边消费指令的应用模式下,可以提高微处理器的性能。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号