高速缓冲存储器线清洗微结构执行方法和系统 【技术领域】
本发明通常涉及一种计算机结构,并且具体涉及一种允许处理器清洗与来自连续域中所有高速缓冲存储器的线性存储器地址相关的高速缓冲存储器线的系统和方法。背景技术
高速缓冲存储器装置是一种小而快速的存储器,可用它存储来自更大的、较慢的存储器中最常被存取的数据(或“字”)。
动态随机存取存储器(DRAM)以较低的成本提供大容量的存储空间。不幸的是,动态随机存取存储器的存取相对于现代微处理器而言太慢。提供划算的解决方案的高速缓冲存储器提供一种静态随机存取存储器(SRAM)高速缓冲存储器,或者被物理安装在处理器上的高速缓冲存储器。即使高速缓冲存储器的存储容量相对较小,它仍能实现对其中储存的数据的高速存取。
高速缓冲存储器的运行原理如下文所述。一条指令或数据单元被第一次选定时,必须从低速存储器中读取它。指令或数据然后被储存在高速缓冲存储器中。随后对相同指令或数据的存取是通过更快的高速缓冲存储器完成的,由此便减少了存取时间并提高了整体的系统性能。但是,由于高速缓冲存储器地存储容量有限,并且通常比系统存储器的存储容量小很多,因此高速缓冲存储器常常被充满,当新的指令或数据被存取时,高速缓冲存储器的一些内容必须改变。
高速缓冲存储器被各种方式管理,使得它储存的指令或数据是当时最有可能需要的。当对高速缓冲存储器进行存取,并且其中包含所需要的数据时,高速缓冲存储器“命中”(hit)便发生。否则,如果高速缓冲存储器没有包含所需的数据,高速缓冲存储器“遗漏”(miss)便发生。因此,通常总是试图对高速缓冲存储器的内容进行管理以使得高速缓冲存储器的命中-遗漏比最大。
利用当前的系统,清洗高速缓冲存储器中的某条指定的存储器地址需要了解高速缓冲存储器的置换算法。
一个高速缓冲存储器可以周期性地或者当满足某些预定条件时被整体清洗。而且,单根的高速缓冲存储器线可以作为置换算法的一部分被清洗。在包含高速缓冲存储器的系统中,高速缓冲存储器线是在高速缓冲存储器和主存储器之间交换的完整的数据部分。在所有情况下,废数据都被写入主存储器。废数据的定义为:高速缓冲存储器中或高速缓冲存储器线中要清洗的、尚未写入主存储器的数据。确定含有废数据的高速缓冲存储器线的数据块的页面重写标志位随后被清除。然后,经过清洗的高速缓冲存储器或高速缓冲存储器线就能储存新的数据块。
如果计划清洗高速缓冲存储器或如果满足高速缓冲存储器清洗的预定条件,高速缓冲存储器便被清洗。即,高速缓冲存储器中所有的废数据都被写入了主存储器。
例如,对于Intel家族中的P6微处理器(如PentiumII,Celeron),对于给定的高速缓冲存储器设置和方法,有一套微操作用来在指定的高速缓冲存储器水平清洗高速缓冲存储器线;但是对于给定的存储器地址,却没有这样的微操作来清洗高速缓冲存储器线。
要求高速数据存取的系统在数据无效时会连续地清洗数据。对于需要处理器和系统存储器之间的高速数据流的系统,如3-D和视频表演的高端图形象素处理时的情况,这种情况变得更加突出。当前系统存在的问题就是:需要高速缓冲存储器和系统存储器之间的高带宽来容纳写联合存储器和反写存储器的拷贝。
这样,所需要的就是一种允许处理器清洗与来自连续域中所有高速缓冲存储器的线性存储器地址相关的高速缓冲存储器线的方法和系统。发明内容
高速缓冲存储器线清洗(CLFLUSH)微结构执行过程和系统允许处理器清洗与来自连续域中所有高速缓冲存储器的线性存储器地址相关的高速缓冲存储器线。该处理器接收一个存储器地址。一旦该存储器地址被接收到,便确定该存储器地址是否储存在一个高速缓冲存储器中。如果该存储器地址是储存在高速缓冲存储器中,则该存储器地址被从高速缓冲存储器中清洗掉。附图说明
将结合附图对本文所介绍的发明做详细的说明,其中附图标记全文对应,其中:
图1描述了微处理器的结构;以及
图2用流程图描述了高速缓冲存储器线清洗过程。具体实施方式
根据定义,一条高速缓冲存储器线要么是完全有效,要么是完全无效。一条高速缓冲存储器线绝不会是部分有效的。例如,当处理器只想读一个字节时,一条可适用的高速缓冲存储器线的所有字节都必须被储存在高速缓冲存储器中;否则,高速缓冲存储器“遗漏”可能会发生。高速缓冲存储器线形成了实际的高速缓冲存储器。高速缓冲存储器目录只用于高速缓冲存储器管理。高速缓冲存储器线通常包含的数据比它在单个总线循环中可能要转换的数据更多。为此,绝大部分高速缓冲存储器控制器执行突发模式,其中预置的地址序列使得数据能够通过总线更快地被传送。这被用于高速缓冲存储器线填满,或被用于反写高速缓冲存储器线,因为这些高速缓冲存储器线代表一个连续且对齐的地址区域。
清洗高速缓冲存储器线的技术可以与线性存储器地址相关联。在执行时,该技术清洗与来自连续域中所有高速缓冲存储器的操作数相关的高速缓冲存储器线。例如,在多处理器环境下,根据处理器状态,指定的高速缓冲存储器线被从系统的所有微处理器中的所有高速缓冲存储器等级水平(即连续域)中清洗。MESI(修改,专用,共享,无效)协议,一种写无效协议,赋予每条高速缓冲存储器线四种状态中的一种,这些状态由两个MESI位来管理。这四种状态还标识了一条高速缓冲存储器线可能的四种状态。如果发现处理器处于“专用”或“共享”状态,清洗等同于被无效掉的高速缓冲存储器线。当发现处理器处于“修改”状态时,另一个实例也成立。如果高速缓冲存储器控制器执行反写方案并且高速缓冲存储器“命中”,只从处理器把数据写入它的高速缓冲存储器,这条高速缓冲存储器线的内容必须被传送给主存储器,而这条高速缓冲存储器线变得无效。
当与其他的存储器宏指令进行比较时,高速缓冲存储器线清洗(CLFLUSH)方法不是强排序,并不考虑与高速缓冲存储器线清洗宏指令相关的存储器的类型。相反,处理器的存储器子系统中的行为是弱排序。其它的宏指令可以用来在CLFLUSH之前或之后,立即对存储器存取的装入、储存、防护和其它的串行指令进行强排序并提供保证。
一种名为“clflush_micro_op”的微操作被用来执行CLFLUSH宏指令。
参看图1,结合数据的装入和储存的流程,展示了微处理器的存储器和总线子系统。在图1中,假设在微处理器中有两个高速缓冲存储器水平:一个芯片上(“L1”)的高速缓冲存储器,其水平为离处理器最近的高速缓冲存储器水平;以及一个第二级(“L2”)高速缓冲存储器,其水平为离处理器最远的高速缓冲存储器水平。一个指令获取单元102为指令解码单元104取得宏指令。解码单元104将宏指令解码为微指令流,该指令流被发送给保留站106、记录缓冲器和寄存器堆108。当一条指令进入存储器子系统时,它被分配给装入缓冲器112或存储缓冲器114,分别取决于它是读存储器宏指令还是写存储器宏指令。在这些缓冲器所在的存储器子系统的单元内,指令经过存储器排序单元110的存储器排序检查。如果不存在存储器相关性,经过物理地址翻译,该指令被分配给存储器子系统中的下一个单元。在L1高速缓冲存储器控制器120,确定是否命中或遗漏L1高速缓冲存储器。如果遗漏,该指令被分配给一组缓冲器,从这套缓冲器,该指令又被分配给微处理器的总线子系统140。如果可高速缓冲存储的装入遗漏,该指令被发送给读缓冲器122,或者如果可高速缓冲存储的储存遗漏,该指令则被发送给写缓冲器130。写缓冲器130可以是弱排序的写联合缓冲器132或非写联合缓冲器134。在总线控制器单元140中,读或写微操作被分配给一个无序队列144。如果微操作是可高速缓冲存储的,则检查L2高速缓冲存储器146命中/遗漏。如果遗漏,指令通过一个有序队列142被发送给前侧总线150,以便从主存储器中获得或刷新所需的数据。
图2也对经过处理器存储器子系统的“clflush_micro_op”的微操作流程进行了说明。开始时,指令获取单元102获得高速缓冲存储器线清洗指令,如方框202所示。在方框204中,高速缓冲存储器线清洗指令被指令解码单元104解码为“clflush_micro_op”微操作。该微操作随后被发送给一个保留站、一个记录缓冲器和寄存器堆108,如方框206所示。“clflush_micro_op”微操作在一个装入端口被分配给存储器子系统,如方框所示。在208存储器排序单元110内的装入缓冲器112内为其分配一个入口。为了在存储器排序单元110内将存取计算分离,为避免高速缓冲存储器线分离,微操作的数据大小被屏蔽成一个字节;但是,在执行时,整个高速缓冲存储器线将被清洗。
存储器排序单元110内的“clflush_micro_op”行为是虚拟的。简而言之,这意味着“clflush_micro_op”的执行可以不按照其它的CLFLUSH宏指令、装入和储存的顺序而无序地进行。除非存储器存取防护(简称为MFENCE)指令被适当地使用,(在CLFLUSH宏指令之前或之后即刻),只要没有地址相关性,“clflush_micro_op”的执行相对于其它的存储器装入和储存是不被保证为有序的。通过存储器子系统的CLFLUSH行为为弱排序。下表列出了CLFLUSH的排序条件。表1比较了后期存储器存取命令与早期CLFLUSH的排序条件的影响。表2则列出了与表1相反的情况,比较了早期存储器存取命令与后期CLFLUSH指令的排序条件的影响。列出的存储器存取类型为:不可高速缓冲存储(UC)存储器存取、反写(WB)存储器存取以及不可高速缓冲存储虚拟写联合(USWC)存储器存取。
表1:关于从前CLFLUSH的指令存储器排序 早期 存取 后期存取 UC存储器 WB存储器 USWC存储器 CLFLUSH MFENCE装入储存装入储存装入储存 CLFLUSH否否是是是是 是 否
表2关于后期CLFLUSH的指令存储器排序 早期存取 后期存取 UC存储器 装入 CLFLUSH 储存 是 WB存储器 装入 是 储存 是 USWC存储器 装入 是 储存 是 CLFLUSH 是 MFENCE 否
“clflush_micro_op”微操作被从存储器排序单元110发送给L1高速缓冲存储器控制器单元120,如方框210所示。“clflush_micro_op”微操作在装入端口上被发送;但是,如果该操作是一个储存操作,则在写联合缓冲器132内被发送。从L1高速缓冲存储器控制器单元之后,“clflush_micro_op”被从装入线转到储存线。
决定方框确定212是否没有可用的写联合缓冲器132。如果没有可用的写联合缓冲器,流程返回方框210。否则,流程继续进行到方框214。不论存储器类型以及它是否命中或遗漏了L1高速缓冲存储器,写联合缓冲器132被分配给引入的“clflush_micro_op”,如方框214所示。L1高速缓冲存储器控制器单元内的每个写联合缓冲器132被增加了一个控制字段来确定需要把哪个自查询属性发送给总线控制器140。这个名为”clflush_miss”的控制位是为遗漏了L1高速缓冲存储器的“clflush_micro_op”专门设定的。
在进入微处理器的存储器子系统时,使高速缓冲存储器线存取“clflush_micro_op”的地址的一些位被清零,如方框216所示。在微处理器的Pentrium pro家族中,这些位应该是地址中的较低的5位(地址[4:0])。在执行清洗命令时,这些工作在L1和L2高速缓冲存储器控制器单元120内完成。清零帮助确定高速缓冲存储器线命中或遗漏。由于只有标记匹配能确定命中还是遗漏,不需要能进行比较的字节。注意,根据定义,没有可能出现部分命中。命中或遗漏总是全线命中或遗漏。清零地址位[4:0]还为存储器排序单元110提供了另外一种机理以屏蔽线分离存取。在分离存取中,数据的大小被屏蔽为1个字节。
L1高速缓冲存储器控制器单元120中的每个写联合缓冲器132增加的另一个控制位被用来区分分配给“clflush_micro_op”的写联合缓冲器132和分配给写联合储存的另一个写联合缓冲器,如132方框218所示。这个名为”clflush_op”的控制位是为那些被分配给“clflush_micro_op”的写联合缓冲器专门设定的。该控制位被用来选择从L1高速缓冲存储器控制器120发送给总线控制器140的请求类型和清洗属性。
如果L1高速缓冲存储器命中,如方框222所确定的那样,一旦从L1高速缓冲存储器控制器单元120中发送出来,“清洗L1”和“清洗L2”属性被发送给总线控制器140,如方框224和226所示。总线控制器140既包含L2高速缓冲存储器146也包含外部总线控制器单元。
另外,如果L1高速缓冲存储器遗漏,如方框222所确定的那样,“clflush_miss”控制位被设定,并且只发送“清洗L2”属性,如方框228和232所示。这有助于通过省略内部对L1高速缓冲存储器的自查询而提高性能。
一旦从存储器排序单元110中被发送出来,如果没有可用的写联合缓冲器132,“clflush_micro_op”微操作被L1高速缓冲存储器控制器单元120阻断,如方框212所示。此时,它还清除写联合缓冲器132,如写联合循环分配指针所指的。这就保证不会出现由于缺乏空闲的写联合缓冲器132而导致死锁情况。如果被阻断,一旦阻断情况被消除,“clflush_micro_op”微操作被重新发送。可能引起“clflush_micro_op”指令发送的例子就是先前分配的写联合缓冲器132被完全清除。
一旦“clflush_micro_op”微操作被分配给L1高速缓冲存储器控制器120中的写联合缓冲器132,“clflush_micro_op”微操作即被存储器子系统收回。这就允许流水线输送:在完成“clflush_micro_op”微操作之前即可执行的后续指令。流水线输送提高了系统的整体性能。
有两种方法可以清除为“clflush_micro_op”微操作服务的写联合缓冲器。
通过与目前适用于Intel P6微处理器家族中的写联合缓冲器132的当前清除条件相同的条件来清除为“clflush_micro_op”微操作服务的写联合缓冲器132。而且,防护宏指令也清除为“clflush_micro_op”微操作服务的写联合缓冲器。
另外,一些实施例专门清除“clflush_micro_op”。这样做是要避免当程序员不想加强排序而没有使用防护指令时,使为“clflush_micro_op”微操作长时间服务的写联合缓冲器陷入进退两难(不知所措)的处境。名为“clflush_evict”的控制位与每个为“clflush_micro_op”微操作服务的写联合缓冲器相关。当写联合缓冲器被分配给“clflush_micro_op”时,该控制位被设定。一旦“clflush_evict”控制位被设定,相应的写联合缓冲器被标记为清除,而控制位被重新设定,如方框230所示。这种清除条件专门适用于为“clflush_micro_op”微操作服务的写联合缓冲器132。由于不允许“clflush_micro_op”微操作太长时间占据写联合缓冲器132的资源,并且由此将这些资源释放用于其它的写联合操作,用CLFLUSH提高了程序的性能。
表3用于CLFLUSH的存储器到总线的处理程序 Clflush_miss 控制位 clflush_op 控制位 请求类型 清洗L1 属性 清洗L2 属性 新的处理 程序 ‘0 ‘0 非CLFLUSH - - 否 ‘0 ‘1 CLFLUSH ‘1 ‘1 是 ‘1 ‘0 N/A N/A N/A 非法结合 ‘1 ‘1 CLFLUSH ‘0 ‘1 是
注意,如果“clflush_miss”=“clflush_op”=’0’,请求类型为微处理器的P6家族中已有的处理程序中的任何一种(但不是CLFLUSH),并且清洗属性将由此而被设定/清除。
表4列出了三个写联合缓冲器132控制位被设定和重新设定的条件。“clflush_evict”控制位只能在“clflush_micro_op”控制位被设定以后才能设定。“clflush_micro_op”控制位将会设定在虚拟的写联合缓冲器132配置上,而“clflush_evict”则为“clflush_op”专门设定在真实的写联合缓冲器132配置上。如果“clflush_micro_op”遗漏了L1高速缓冲存储器,“clflush_miss”控制位也设定在虚拟的写联合缓冲器132配置上。而且,一旦写联合缓冲器132虚拟配置为除“clflush_micro_op”之外的任何一条指令服务,“clflush_miss”和“clflush_op”的控制位都被清除。从功能上看,这与一旦释放为“clflush_micro_op”服务的写联合缓冲器就清除这样的控制位相似。在处理器的运行中,同样的写缓冲器130被写联合微操作和非写联合微操作共享。根据任何写缓冲器130的虚拟配置,而不只是根据写联合缓冲器132的虚拟配置,“clflush_miss”和“clflush_op”位被清除。这种行为确保绝不会为不给“clflush_micro_op”服务的写缓冲器130设定这三种控制位。在处理器的运行中,其中所有的L1高速缓冲存储器控制器缓冲器被读和写共享,象P6微处理器家族中那样,只有在缓冲器配置为存储服务时才清除“clflush_miss”和“clflush_op”控制位,如方框234所示。被分配来为装入服务的缓冲器忽略这三种新控制位的值。
表4设定/清除L1高速缓冲存储器控制器中写联合缓冲器的新控制位的条件 控制位 设定 清除 “Clflush_op” 一旦分配写联合缓冲器 为“clflush_micro_op”服 务 一旦分配写缓冲器用于 除“clflush_micro_op” 之外的业务 “Clflush_evict” 在分配写联合缓冲器为 “clflush_micro_op”服务 之后即刻(即分配的WC 缓冲器“in use”和 “clflush_ op”控制位被 设定) 一旦清除写联合缓冲器 (即“WC模式”控制 位被设定) “Clflush_miss ” 一旦把遗漏了L1高速缓 冲存储器“clflush_miss” 的“clflush_micro_op”在 写联合缓冲器内分配 一旦分配写缓冲器用于 除“clflush_micro_op” 之外的业务
注意所有的三种新WC缓冲器控制位也都按照“重新设定”的顺序被清除。
实施例还可以利用总线控制器140来实施。当为“clflush_micro_op”服务的写联合缓冲器132被标记为清除时,它被发送给总线控制器140,如方框236所示。所发送的请求和请求一次全线可高速缓冲存储的写联合处理程序一样,只是子查询属性不同。查询是用来确认某个具体的地址出现在适用的高速缓冲存储器中。对于“clflush_micro_op”清除,总线控制器140根据“清洗L1”和“清洗L2”请求属性自查询L1和L2高速缓冲存储器,如方框150所示。而且,总线控制器140在外部总线上发出一条“总线读无效线”,如方框236所示。例如,如果L1高速缓冲存储器控制器单元120确定L1高速缓冲存储器遗漏,则不发出“清洗L1”消息。“总线读无效线”处理程序清洗命中连续域中任何其它的高速缓冲存储器中的相同的线。在外部总线处理程序上,所有的字节赋值被重新给定,把该数据阶段从核心屏蔽。决定框238和252确定是否在连续域中的另一个高速缓冲存储器(即不是提出请求的微处理器中的L1或L2高速缓冲存储器)中是否命中经过修改的高速缓冲存储器线(HITM)。如果HITM出现,被命中的高速缓冲存储器对主存储器进行反写,并把数据返回提出请求的微处理器,如方框244和254所示。L1高速缓冲存储器控制器单元120中的写联合缓冲器132保持被分配,直到来自连续域中其它高速缓冲存储器的查询阶段和可能的数据回传完成,例如,外部总线上的HITM。作为查询过程或调查循环的结果,回到写联合缓冲器132的数据被忽略,如方框246和248所示。
然后所有的清洗完成,并且写联合缓冲器132也被重新分配,如方框260所示。
下面的表5列出了外部总线控制器140是如何处理所有的写联合清除的。来自L1高速缓冲存储器,到达总线控制器140的“clflush_micro_op”清除请求,如CLFLUSH宏指令,可能在与同样的请求全线可高速缓冲存储写联合清除的信号上超载;但是,自查询属性不同。
表5写联合清除的外部总线控制器处理程序 请求类型 外部总线处 理程序 处理程序 长度 字节赋值 清洗L1 清洗L2 新部分可高速缓冲存储写联合 读无效 32字节 所有字节赋值 被设定 否否 否全线可高速缓冲存储写联合 无效 32字节 所有字节赋值 被解除设定 否否 否部分不可高速缓冲存储写联合 存储器写 (写类型) 《=8字节 字节赋值从 L1高速缓冲 存储器控制器 单元发送 否只有遗漏了L1高速缓冲存储器的非临时储存 否全线不可高速缓冲存储写联合 存储器写 (反写类型) 32字节 所有字节赋值 被设定 否只有遗漏了L1高速缓冲存储器的非临时储存 否CLFLUSH 总线读无效 32字节 所有字节赋值 被解除设定 只L1命 中是 否
注意:USWC储存并非微处理器的P6家族的别名,因此,它们不被自查询。
为了可测试以及调试,可以增加一个非用户的可视模式位,以赋给/解除CLFLUSH宏指令。如果被解除,L1高速缓冲存储器控制器单元120把引入的“clflush_micro_op”微操作当作无操作操作码(NOP)来处理,而且它绝不会分配一个写联合缓冲器132。这种NOP行为可以在非高速缓冲存储数据预取上实现。
提供前面对本实施例的描述是为了使本领域内的任何技术人员能够制作或使用该系统和方法。本领域内的技术人员都了解,可以用硬件,固件,或在计算机可读的介质上编码的指令来实现上文所述的实施例。对于本领域内的技术人员而言,对这些实施例做不同的修改都是很显然的,并且此处所限定的普通原理在不使用发明性的才能条件下也能应用于其它实施例。因此,本发明并非仅限于本文所描述的实施例,它包含与本文所公开的原理和创新点相一致的最广泛的范围。