对无依赖性并行区优化的直写式高速缓存及性能改进方法

文档序号:6364510阅读:175来源:国知局
专利名称:对无依赖性并行区优化的直写式高速缓存及性能改进方法
技术领域
本申请总体上涉及并行计算系统。更特别地,本申请涉及在所述并行计算系统中运行的高速缓存一致性协议。
背景技术
传统的并行计算系统不允许多于一个的线程或处理器同时对同一高速缓存线地址进行更新。换句话说,如果处理器想更新所关联的本地高速缓存存储器设备中的高速缓存线,则传统的并行计算系统必须首先使其它本地高速缓存存储器设备中的对应高速缓存线无效。因此,在计算系统中实现高速缓存一致性机制,用以更新本地高速缓存存储器设备,例如使本地高速缓存存储器设备中的高速缓存线无效。因此,传统并行计算系统中的两个或更多个不同的线程和/或处理器不能跨本地高速缓存存储器设备同时更新运行高速缓存一致性操作的同一高速缓存线地址。为了防止在被两个或更多个不同线程或处理器访 问的时候对同一高速缓存线地址的同时更新,传统的并行计算系统需要本地高速缓存存储器设备之间更频繁的通信(例如,向其它的本地高速缓存存储器设备广播无效通知),并且频繁地使本地高速缓存存储器设备中的高速缓存线无效。

发明内容
本公开描述了用于改进包括多个处理器和至少一个共享高速缓存存储器设备的并行计算系统的性能的装置、方法与计算机程序产品。每个处理器都可以包括至少一个本地高速缓存存储器设备(例如,“第一级(LI) ”高速缓存存储器设备)。在一种实施方式中,提供了一种用于改进并行计算系统的性能的装置。该装置包括多个处理器。每个处理器都具有本地高速缓存存储器设备。每个处理器都运行无数据依赖性的软件程序区的程序代码。每个处理器的本地高速缓存存储器设备都与更新该本地高速缓存存储器设备中的高速缓存线的硬件本地高速缓存控制器相关联。与第一处理器的第一本地高速缓存存储器设备相关联的第一硬件本地高速缓存控制器检测由运行所述程序代码的第二处理器对第一高速缓存线的伪共享(false sharing)的发生,并允许该第二处理器对所述第一高速缓存线的伪共享。在所述第一硬件本地高速缓存控制器更新所述第一本地高速缓存存储器设备中的所述第一高速缓存线的第一部分并且随后第二硬件本地高速缓存控制器更新第二本地高速缓存存储器设备中的所述第一高速缓存线的第二部分时,发生对所述第一高速缓存线的伪共享。在另一种实施方式中,当所述第一硬件本地高速缓存控制器更新所述第一本地高速缓存存储器设备中的所述第一高速缓存线的第一部分时,其它硬件本地高速缓存控制器设置其它本地高速缓存存储器设备中对应于所述第一高速缓存线的伪共享位。在另一种实施方式中,当第二硬件本地高速缓存控制器更新所述第二本地高速缓存存储器设备中的所述第一高速缓存线的第二部分时,所述第一硬件本地高速缓存控制器设置所述第一本地高速缓存存储器设备中对应于所述第一高速缓存线的伪共享位,而且,当所述第一硬件本地高速缓存控制器更新所述第一本地高速缓存存储器设备中的所述第一高速缓存线的第一部分时,所述第二硬件本地高速缓存控制器设置所述第二本地高速缓存存储器设备中对应于所述第一高速缓存线的伪共享位。在另一种实施方式中,响应于所述多个处理器到达所述无数据依赖性的软件程序区的结尾,所述第一硬件本地高速缓存控制器和第二硬件本地高速缓存控制器使所述第一本地高速缓存存储器设备和第二本地高速缓存存储器设备中设置了伪共享位的高速缓存线无效。在另一种实施方式中,对本地高速缓存存储器的任何写入都直写到由所述多个处理器共享的高速缓存存储器设备。在另一种实施方式中,防止所述第一硬件本地高速缓存控制器设置所述第一本地高速缓存存储器设备的伪共享位,并防止其它硬件本地高速缓存控制器使本地高速缓存存储器设备中未设置伪共享位的高速缓存线无效。 在另一种实施方式中,当所述第一硬件本地高速缓存控制器更新所述第一本地高速缓存存储器设备中所述第一高速缓存线的第一部分时,所述第一硬件本地高速缓存控制器设置所述第一本地高速缓存存储器设备的伪共享位,其它硬件本地高速缓存控制器设置其它本地高速缓存存储器设备中对应的高速缓存线的伪共享位,而且当对所述对应的高速缓存线发生后续的伪共享时,在硬件本地高速缓存控制器之间没有进一步的通信。在另一种实施方式中,响应于处理器到达所述无数据依赖性的软件程序区的结尾,所述第一硬件本地高速缓存控制器在一个或多个其它硬件本地高速缓存控制器设置其它本地高速缓存存储器设备中对应的高速缓存线的伪共享位之前完成所述第一本地高速缓存存储器设备中高速缓存线的更新。在另一种实施方式中,响应于处理器到达所述无数据依赖性的软件程序区的结尾,所述第一硬件本地高速缓存控制器选择性地使设置了伪共享位的一些高速缓存线无效。在另一种实施方式中,响应于处理器到达所述无数据依赖性的软件程序区的结尾,所述第一硬件本地高速缓存控制器通过从共享的高速缓存存储器取得有效数据来选择性地更新设置了伪共享位的一些高速缓存线。在另一种实施方式中,为了检测伪共享的发生,所述第一硬件本地高速缓存控制器和第二硬件本地高速缓存控制器使用中央目录或者侦听(snoop)技术。


包括附图是为了提供对本发明的进一步理解,而且附图结合到本说明书中并构成
其一部分。图I例示了根据一种实施方式的示出用于改进并行计算系统的性能的方法步骤的流程图。图2例示了一种实施方式中不包括数据依赖性的示例软件程序区。图3A-3C例示了一种实施方式中允许伪共享的实例。图4例示了一种实施方式中允许伪共享的状态图。图5A-5B例示了一种实施方式中的示例状态转换。
图6是一种实施方式中概述状态转换的表。图7例示了根据一种实施方式的用于实现图I和图9-10中所示流程图的示例并行计算系统。图8例示了一种实施方式中的标志位。图9是例示了根据一种实施方式的用于改进并行计算系统的性能的方法步骤的流程图。图10是例示了根据另一种实施方式的用于改进并行计算系统的性能的方法步骤的流程图。
具体实施例方式
在一种实施方式中,图7例不了包括多个处理器705-715 (例如,IBM PowerPC 处理器,等等)和共享高速缓存存储器设备720的并行计算系统700(例如,181^@81116 06116@/0,等等)。每个处理器可以包括本地高速缓存存储器设备,例如,处理器705中的本地高速缓存存储器设备730、处理器710中的本地高速缓存存储器设备735及处理器715中的本地高速缓存存储器设备740,等等。每个处理器还可以包括每个本地高速缓存存储器设备一个硬件本地高速缓存控制器。硬件本地高速缓存控制器控制本地高速缓存存储器的读和写操作。例如,与处理器705相关联的硬件本地高速缓存控制器745控制本地高速缓存存储器设备730,例如,通过设置标志位来使本地高速缓存存储器设备730中的高速缓存线无效。类似地,硬件本地高速缓存控制器750控制本地高速缓存存储器设备735。硬件本地高速缓存控制器755控制本地高速缓存存储器设备740。任何本地高速缓存存储器中的任何更新都例如经总线或者网络725直写到共享的高速缓存存储器设备720中。共享的高速缓存存储器设备720也包括控制该共享高速缓存存储器设备720的硬件高速缓存控制器722。提供了编译器760,把高级编程代码转换成机器代码。并行计算系统700可以运行图I中的方法步骤,来改进其性能。在图I中的步骤100,一进入软件程序区(例如,图2中所示的软件“for”循环200),编译器760就确定该软件程序区是否包括数据依赖性。或者因为用户明确地要求软件程序的特定子集并行运行,或者因为编译器分析对应的程序代码并确定软件程序的特定子集可以并行运行,编译器知道该软件程序的哪些部分可以并行地运行。一旦编辑器知道了程序代码的一个(一些)部分可以并行运行,该编译器就插入对将处理并行任务创建的运行时库(即,由多个处理器并行运行的软件程序区)的功能调用。编译器可以在并行任务开始和结束的地方插入特殊指令。在一种实施方式中,编译器调用将使程序代码区并行运行的运行时库,使得该运行时库刚好在软件程序区并行运行之前调用所述特殊指令,以及刚好在软件程序区并行运行停止之后调用所述特殊指令。在另一种实施方式中,编译器指示程序代码并行运行,使得并行运行的软件程序区的第一个指令是一个特殊指令,而并行运行的软件程序区的最后一个指令是另一个特殊指令。例如,为了确定软件循环200是否包括数据依赖性,编译器可以评估前一软件程序行的输出是否用作软件循环200中后续软件程序行的输入。在图2的软件“for”循环200中,如果数组“b”中的两个不同元素不包括相同的数据值,则没有数据依赖性,这是因为前一循环迭代的输出没有用作后续循环迭代的输入。例如,基于图2中软件“for”循环200的循环退出条件,编译器760还确定无数据依赖性的软件程序区的起始和结束边界。在图I中的步骤110,在编译之后,响应于编译器确定该软件程序区没有数据依赖性,所有的或者一些处理器并行地运行无数据依赖性的软件程序区。例如,至少两个不同的处理器运行图2中所示的软件“for”循环200。如果在软件程序区中存在数据依赖性,则单个处理器可以运行具有数据依赖性的软件程序区。在并行运行无数据依赖性的软件程序区时,每个处理器可以在其本地高速缓存存储器设备中做出改变。然而,根据这种实施方式,在每个处理器到达屏障(例如,所有参与的处理器都需要到达的一个点,而且只有在到达这个点之后每个处理器才可以继续其后续的运行)之前,本地高速缓存存储器设备中的改变不需要被其它的本地高速缓存存储器设备看到。如图I中的步骤120所示,当所有的或者一些处理器开始并行运行无数据依赖性的软件程序区时,与每个处理器的本地高速缓存存储器设备相关联的硬件本地高速缓存控制器允许软件区中的伪共享。伪共享是指在至少两个不同的本地高速缓存存储器中更新同一高速缓存线地址的不同部分。关于图3A-3C具体地描述了允许伪共享的一种实施方式。一旦发生对本地高速缓 存存储器设备中高速缓存线的写操作,对应的硬件本地高速缓存控制器就在那个本地高速缓存存储器设备的对应高速缓存线330中设置伪共享位(图3A中的“伪共享位”300)。在一种实施方式中,所有的硬件本地高速缓存控制器都侦听(即,监视)所有的本地高速缓存存储器设备。因此,一旦发生对单个本地高速缓存存储器设备的写操作,其它硬件本地高速缓存控制器就通过例如侦听来检测该写操作的发生,并且设置其它本地高速缓存存储器设备中对应高速缓存线的对应伪共享位。因而,在一种实施方式中,本地高速缓存存储器设备中的更新不会使其它本地高速缓存存储器设备中的对应高速缓存线无效。由于并行计算系统700允许伪共享,因此另一个处理器可以随后写到同一高速缓存线的不同部分。这种对同一高速缓存线的后续写入也不会使其它本地高速缓存存储器设备中的一个或多个相同高速缓存线无效。通过允许伪共享,并行计算系统700减少了在发生对本地高速缓存存储器设备的写操作时本地高速缓存存储器设备之间使高速缓存线无效的通信开销。回到图1,在步骤130,编译器确定程序代码中每个处理器完成无数据依赖性的软件程序区的运行的位置。例如,在图2中,例如,通过评估与每个处理器相关联的循环退出条件,编译器可以确定每个处理器完成了软件程序区的运行。更具体而言,编译器确定程序代码中每个处理器完成并行区域的位置(例如,图2中的位置210)对应于每个处理器完成分配给其的原始循环迭代“0”至“N-1”的一个子段的计算之后紧接着的代码。在图I中的步骤140,一旦编译器760检测到处理器完成了无数据依赖性的软件程序区的运行,编译器就插入一个将指示与该处理器相关联的对应硬件本地高速缓存控制器使其关联的本地高速缓存存储器设备中设置了伪共享位的高速缓存线无效的特殊指令(或者特殊指令的序列)。因而,在一种实施方式中,一旦到达了屏障或者一旦退出了无数据依赖性的软件程序区,并行计算系统700就使本地高速缓存存储器设备中设置了伪共享位的高速缓存线无效。图3A-3C例示了一种实施方式中的示例伪共享。最初,本地高速缓存存储器设备305和另一个本地高速缓存存储器设备310具有相同的高速缓存线330。如图3A中所示,处理器0上的线程0修改本地高速缓存存储器设备305中的高速缓存线330的第一部分335。本地高速缓存存储器设备305中的修改还直写到共享的高速缓存存储器设备315。一旦通过例如侦听检测到本地高速缓存存储器设备305中的这种修改,本地高速缓存存储器设备310的硬件本地高速缓存控制器就设置本地高速缓存存储器设备310中的高速缓存线330的伪共享位350。伪共享位350表示其对应本地高速缓存存储器设备中对应的高速缓存线已经在处理器或者线程运行无数据依赖性的软件程序区时被修改了。在处理器或者线程运行无数据依赖性的软件程序区时,防止本地高速缓存存储器设备之间的一致性流量(例如,高速缓存一致性操作,等等)任何本地高速缓存存储器设备都可能没有最近的数据,但是每个本地高速缓存存储器设备可以具有其自己的值。稍后,在图3B中所示,处理器内核I上的线程I修改本地高速缓存存储器设备310中的高速缓存线330的第二部分340。这种修改包括设置本地高速缓存存储器设备305中的高速缓存线330的伪共享位300。本地高速缓存存储器设备310中的修改还直写到共享的高速缓存存储器设备315。这些在本地高速缓存存储器设备中执行的本地修改不会调用高速缓存一致性操作(例如,使高速缓存线330无效)。在处理器运行无数据依赖性的软件程序区时,没有本地高速缓存存储器设备有最近的数据。每个本地高速缓存存储器设备都有其自己的数据值。尽管包括硬件本地高速 缓存控制器的并行计算系统700允许伪共享(即,允许写到相同的高速缓存线中不同的部分),但是,例如,通过令编译器760检测在无数据依赖性的软件程序区中对相同高速缓存线中的相同部分的后续写入,并行计算系统700防止对相同部分的任何这种后续写入。在这种实施方式中,本地高速缓存存储器设备中每条高速缓存线都有一个伪共享位。伪共享位最初设置成零,但是在发生伪共享和/或本地写的时候设置成一。在另一种实施方式中,可以每条高速缓存线有多于一个伪共享位。例如,高速缓存线可以分成几个子段,而且每个子段可以与其自己的伪共享位关联。如图3C中所示,在一种实施方式中,一旦到达屏障,每个硬件本地高速缓存控制器就使其自己关联的本地高速缓存存储器设备中设置了伪共享位的高速缓存线无效。例如,诸如通过设置对应的无效位320,与本地高速缓存存储器设备305相关联的硬件本地高速缓存控制器使本地高速缓存存储器设备305中的高速缓存线330无效。类似地,例如,通过设置对应的无效位320,与本地高速缓存存储器设备310相关联的硬件本地高速缓存控制器使本地高速缓存存储器设备310中的高速缓存线330无效。在一种实施方式中,例如,通过从共享高速缓存存储器设备中取得数据,硬件本地高速缓存控制器可以使其关联的本地高速缓存存储器设备中的无效高速缓存线有效,因为,由于高速缓存“直写”策略,共享高速缓存存储器设备总是具有有效的数据。图4例示了一种实施方式中指示本地高速缓存存储器设备中高速缓存线的状态的状态转换图400。“R”指本地高速缓存存储器设备中的本地读事件。“W”指本地高速缓存存储器设备中的本地写事件。“oR”指其它读事件(其它线程请求读其它本地高速缓存存储器设备中的那条高速缓存线)。“oW”指其它写事件(其它线程请求写其他本地高速缓存存储器设备中的那条高速缓存线)。“E0P”指并行区域的结尾(即,不包括数据依赖性的软件程序区的结尾)。最初,本地高速缓存存储器中的高速缓存线可以处于“有效”状态410 (即,表示该高速缓存线中的数据全都有效的状态)。高速缓存线是否有效可以由有效位(例如,图3A中的有效位345)来表示,例如,这个位可以在从共享高速缓存存储器设备取出有效数据时由对应的硬件本地高速缓存控制器来设置。在本地高速缓存存储器设备中的高速缓存线处于有效状态时,尽管发生了本地读事件、远程读事件(“oR”)、本地写事件或者EOPJM是该本地高速缓存存储器设备中的高速缓存线不作任何状态转换。本地写事件总是在其它本地高速缓存存储器设备的相同高速缓存线中生成远程写事件(“oW”)。如果硬件本地高速缓存控制器通过例如侦听而检测到“oW”事件发生,则其对应的本地高速缓存存储器中对应的有效高速缓存线转换到伪共享状态415(即,设置了伪共享位的状态)。不像传统的并行计算系统,远程写事件(“oW”)不使其它本地高速缓存存储器设备中对应的高速缓存线变成无效。例如,通过设置伪共享位(见图3A),本地高速缓存存储器设备中高速缓存线的更新使其它本地高速缓存存储器设备中对应的高速缓存线转换到伪共享状态415。当本地高速缓存存储器设备中的高速缓存线处于伪共享状态415时,一旦发生本地读事件、也向其它本地高速缓存存储器设备生成“oW”事件的本地写事件、远程读事件(“oR”)或者远程写事件(“oW”),该本地高速缓存存储器设备中的那条高速缓存线仍然处于伪共享状态415。当本地高速缓存存储器设备中的高速缓存线处于伪共享状态415时,一旦发生“E0P”事件(例如,一旦到达屏障),该本地高速缓存存储器设备中的那条高速缓存线就转换到无效状态405(即,表示那条高速缓存线中的数据无效的状态)。当本地高速 缓存存储器设备中的高速缓存线处于无效状态405时,一旦发生远程读事件、远程写事件或者“E0P”事件,该本地高速缓存存储器设备中的那条高速缓存线仍然处于无效状态405。当本地高速缓存存储器设备中的高速缓存线处于无效状态405时,一旦发生还造成对其它本地高速缓存存储器设备的远程读事件的本地读事件或者一旦发生还造成对其它本地高速缓存存储器设备的远程写事件的本地写事件,该本地高速缓存存储器设备中的那条高速缓存线就转换到有效状态410,例如,通过从共享的高速缓存存储器设备取出有效数据。图5A-B例示了一种示例实施方式中允许伪共享的两个示例本地高速缓存存储器设备中的示例状态转换。在这种示例实施方式中,如阶段500中所示,对于给定的高速缓存线,第一本地高速缓存存储器设备520最初处于有效状态,而且第二本地高速缓存存储器设备525最初处于有效状态。然后,与第一本地高速缓存存储器设备520相关联的第一处理器写入505第一本地高速缓存存储器设备520中的高速缓存线。这种写入505还对其它的本地高速缓存存储器设备产生远程写事件。因而,当发生写入505时,如阶段510中所示,第一本地高速缓存存储器设备520仍然处于有效状态,但第二本地高速缓存存储器设备525转换到伪共享状态。应当指出,第二本地高速缓存存储器设备525在发生写入505时不转到无效状态。如图5B中的阶段515所示,当发生“E0P”事件530时,第一本地高速缓存存储器设备520仍然处于有效状态,但第二本地高速缓存存储器设备525转换到无效状态。图6例示了概述本地高速缓存存储器设备中的状态转换的表600。当与该本地高速缓存存储器设备相关联的处理器运行非并行的软件程序区时,其中处理器不并行地运行程序,该本地高速缓存存储器设备中的高速缓存线可以在例如发生本地读事件时从有效状态410转到有效状态410。该本地高速缓存存储器设备中的高速缓存线可以在例如非并行的软件程序区中发生远程写事件时从有效状态410转到无效状态405。该本地高速缓存存储器设备中的高速缓存线可以在例如发生本地读事件时从无效状态405转到有效状态。该本地高速缓存存储器设备中的高速缓存线可以在例如发生远程写事件时从无效状态405转到无效状态405。当与本地高速缓存存储器设备相关联的处理器运行无数据依赖性并且与其它处理器并行运行的软件程序区时,该本地高速缓存存储器设备中的高速缓存线可以在例如发生本地读事件时从有效状态410转换到有效状态410。该本地高速缓存存储器设备中的高速缓存线可以在例如非并行的软件程序区中发生远程写事件时从有效状态410转换到无效状态405。该本地高速缓存存储器设备中的高速缓存线可以在例如并行运行的软件程序区中发生远程写事件时从有效状态410转换到伪共享状态415。该本地高速缓存存储器设备中的高速缓存线可以在例如发生本地读事件时从无效状态405转换到有效状态。该本地高速缓存存储器设备中的高速缓存线可以在例如发生远程写事件时从无效状态405转换到无效状态405。该本地高速缓存存储器设备中的高速缓存线可以在例如发生本地读事件且随后发生远程写事件时从无效状态405转换到伪共享状态415。该本地高速缓存存储器设备中的高速缓存线可以通过例如从共享的高速缓存存储器设备取得有效数据来从伪共享状态415转换到有效状态410。该本地高速缓存存储器设备中的高速缓存线可以在例如并行运行的软件程序区中发生本地读事件时从伪共享状态415转换到伪共享状态415。该本地高速缓存存储器设备中的高速缓存线可以在例如并行运行的软件程序区中发生“EOP”事件时从伪共享状态415转换到无效状态405。

在一种实施方式中,在无数据依赖性且可以由多个处理器并行运行的软件程序区中,本地读失败(miss)造成对应的处理器从共享的高速缓存存储器设备取得有效数据,并且不降级(例如,使无效或者降级到伪共享状态)其它本地高速缓存存储器设备中的对应高速缓存线。在该软件程序区中,本地写失败造成对应的处理器从共享的高速缓存存储器设备拿有效数据,并且不使其它高速缓存存储器设备中的对应高速缓存线无效。在该软件程序区中,本地读事件造成处理器从对应的本地高速缓存存储器设备读数据。在该软件程序区中,本地写事件造成处理器把数据写到对应的本地高速缓存存储器设备并把相同的数据写到共享高速缓存存储器设备。在该软件程序区中,例如,基于已知的LRU(最近最少使用)算法或者其它的高速缓存线驱逐算法,硬件本地高速缓存控制器驱逐其本地高速缓存存储器设备中的高速缓存线。就在退出无数据依赖性且被多个处理器并行运行的软件程序区之前,每个硬件本地高速缓存控制器都使其高速缓存存储器设备中设置了伪共享位的高速缓存线无效。作为替代,硬件本地高速缓存控制器可以从共享的高速缓存存储器设备取得对应于该本地高速缓存存储器设备中设置了伪共享位的高速缓存线的有效数据。在一种实施方式中,并行计算系统700利用代表三种不同事件的三个不同的标志位(未示出)。第一标志位可以代表无数据依赖性且可以被多个处理器并行运行的软件程序区的开始。编译器可以在确定软件程序区无数据依赖性并可以并行运行时设置这个第一标志位。第二标志位可以代表无数据依赖性且可以被多个处理器并行运行的软件程序区的结尾。编译器可以在确定处理器或线程退出该软件程序区时设置这个第二标志位。第三标志位(即,伪共享位)可以代表到伪共享状态的转换。在本地高速缓存存储器设备中,可以每条高速缓存线有一个一位的伪共享位。一旦发生伪共享,硬件本地高速缓存控制器就可以设置其本地高速缓存存储器设备的对应高速缓存线的这个伪共享位。在一种实施方式中,硬件本地高速缓存控制器可能不使用专门的一位来表示其对应本地高速缓存存储器设备的一个状态,而是可以利用两个或者更多个位来代表几种状态。例如,图4指出了三种状态,其可以通过用一位指示高速缓存线的状态是否为无效、一位指示该高速缓存线的状态是否为有效且一位指示该高速缓存线的状态是否为伪共享来表示。作为替代,硬件本地高速缓存控制器可以例如通过利用两位来实现这三种状态,其中“00”指示高速缓存线的状态为无效、“01”指示该高速缓存线的状态为有效,而“10”指示该高速缓存线的状态为伪共享。因此,在一种实施方式中,对于有效/无效/伪共享状态可以有不同的位。在另一种实施方式中,这三种状态可以通过与本地高速缓存存储器设备中被跟踪的其它数据共享的位的组合来实现。在一种实施方式中,在无数据依赖性且被多个处理器并行运行的软件程序区中,一旦发生本地写事件,对应本地高速缓存存储器设备中的对应高速缓存线保持在有效状态。如果该高速缓存线没有发生伪共享,则在该软件程序区的结尾不需要使对应本地高速缓存存储器设备中的对应高速缓存线无效。然而,如果在对应的高速缓存线中发生了伪共享,例如,两个不同的处理器写其本地高速缓存存储器设备中相同高速缓存线的不同部分,则对应本地高速缓存存储器设备中的对应高速缓存线转换到伪共享状态。在另一种实施方式中,在无数据依赖性且被多个处理器并行运行的软件程序区 中,一旦发生对其它本地高速缓存存储器设备构成伪共享事件的本地写事件,对应本地高速缓存存储器设备中的对应高速缓存线就转换到伪共享状态。在这种实施方式中,当该高速缓存线中随后发生伪共享时,除本地写事件的第一次发生之外,不需要在本地高速缓存存储器设备之间传送这种随后发生的伪共享。在这种实施方式中,在软件程序区的结尾,硬件本地高速缓存控制器使其本地高速缓存存储器设备中设置了伪共享位的高速缓存线无效。在一种实施方式中,图9例示了描述用于设置伪共享位并使设置了伪共享位的高速缓存线无效的方法步骤的流程图。在步骤900,在处理器并行运行无数据依赖性的软件程序区时,第一硬件本地高速缓存控制器更新第一本地高速缓存存储器设备中的高速缓存线。在步骤910,在处理器并行运行无数据依赖性的软件程序区时,其它的硬件本地高速缓存控制器设置其它本地高速缓存存储器设备中对应高速缓存线的伪共享位。然而,如步骤920所示,在更新高速缓存线之后,在处理器并行运行无数据依赖性的软件程序区时,防止第一硬件本地高速缓存控制器设置第一本地高速缓存存储器设备的伪共享位。在步骤930,一旦编译器检测到对应的处理器到达了无数据依赖性的软件程序区的结尾,硬件本地高速缓存控制器就使本地高速缓存存储器设备中设置了伪共享位的高速缓存线无效。然而,如步骤940所示,一旦对应的处理器到达了无数据依赖性的软件程序区的结尾,硬件本地高速缓存控制器不使本地高速缓存存储器设备中未设置伪共享位的高速缓存线无效。在另一种实施方式中,图10例示了描述用于设置伪共享位并使设置了伪共享位的高速缓存线无效的方法步骤的流程图。在步骤1000,在处理器并行运行无数据依赖性的软件程序区时,第一硬件本地高速缓存控制器更新第一本地高速缓存存储器设备中的高速缓存线。在步骤1010,在处理器并行运行无数据依赖性的软件程序区时,其它的硬件本地高速缓存控制器设置其它本地高速缓存存储器设备中对应高速缓存线的伪共享位。在步骤1020,在更新高速缓存线之后,在处理器并行运行无数据依赖性的软件程序区时,第一硬件本地高速缓存控制器设置第一本地高速缓存存储器设备的伪共享位。然后,如在步骤1030中所示,在处理器并行运行无数据依赖性的软件程序区时,当在对应的高速缓存线上发生后续的伪共享时,在硬件本地高速缓存控制器之间不需要进一步的通信。
在一种实施方式中,一旦处理器到达无数据依赖性的软件程序区的结尾,通过从共享的高速缓存存储器取得有效数据,硬件本地高速缓存控制器选择性地更新设置了伪共享位的一些(例如,一条或两条或三条,等等)高速缓存线。一旦编译器检测到对应的处理器到达了无数据依赖性的软件程序区的结尾,硬件本地高速缓存控制器就选择性地使设置了伪共享位的一些(例如,剩余)高速缓存线无效。例如,通过采用已知的LRU(最近最少使用)算法,对于设置了伪共享位的最常使用的高速缓存线,硬件本地高速缓存控制器把有效数据从共享的高速缓存存储器设备取到本地高速缓存存储器设备。硬件本地高速缓存控制器使设置了伪共享位的剩余高速缓存线无效。对于那些剩余的高速缓存线,硬件本地高速缓存控制器不需要采取任何动作,而且当对那些剩余的高速缓存线发生本地读事件或本地写事件时可以从共享的高速缓存存储器设备取得有效数据。在具有数据依赖性或者不能并行运行的软件程序区中,对本地高速缓存存储器设备中有效高速缓存线的本地写被直写到共享的高速缓存存储器设备。在这种软件程序区中,当直写到共享的高速缓存存储器设备时,其它的硬件本地高速缓存控制器使其它本地高速缓存存储器设备中的相同高速缓存线无效。一旦完成了无效化并发出了直写操作,这 种本地写就完成了。在没有数据依赖性且可以并行运行的软件程序区中,对本地高速缓存存储器设备中有效高速缓存线的本地写被直写到共享的高速缓存存储器设备。在该软件程序区中,当直写到共享的高速缓存存储器设备时,其它的硬件本地高速缓存控制器使其它本地高速缓存存储器设备中的相同高速缓存线移到伪共享状态。一旦完成了到伪共享的移动并发出了直写操作,这种本地写就完成了。作为替代,本地写可以在完成到伪共享的移动或者直写之前完成。换句话说,如果第一硬件本地高速缓存控制器更新第一本地高速缓存存储器设备中的高速缓存线,则第一硬件本地高速缓存控制器在一些(例如,一个或两个,等等)其它硬件本地高速缓存控制器设置其它本地高速缓存存储器中对应的高速缓存线的伪共享位之前完成对第一本地高速缓存存储器设备中的高速缓存线的更新。其它的硬件本地高速缓存控制器在退出无数据依赖性的软件程序区之前完成对其它本地高速缓存存储器中对应的高速缓存线的伪共享位的设置。为了实现这种策略,执行具体的步骤序列其中每个线程(I)启动无数据依赖性的软件程序区,(2)执行计算,其中其本地高速缓存可以在一些其它本地高速缓存控制器设置对应高速缓存线的伪共享位之前更新其高速缓存线,(3)完成并行区域的计算,(4)确保源自其本地高速缓存控制器的所有伪共享通知都已经完成(即,所有的其它高速缓存控制器都已经得到了所有其中由于这种线程的计算而发生伪共享的对应高速缓存线的通知),
(5)当参与这个软件程序区的所有线程都已经到达该软件程序区的结尾时执行同步屏障,及(6)执行并行区域结束操作。利用操作(1)-(6)的这种序列,确保在执行并行结束操作时没有被参与该无数据依赖性的并行区域的任何线程挂起的伪共享通知。为了实现操作(4),本地高速缓存控制器跟踪由该本地高速缓存控制器对努力设置与对应高速缓存线相关联的伪共享位的任何其它高速缓存控制器的任何挂起通知。在一种实施方式中,并行计算系统700操作中央目录或侦听技术,来控制所有的本地高速缓存存储器设备和共享高速缓存存储器设备。侦听技术指一种实现的系统,其中每个硬件本地高速缓存控制器监视与所有各处理器相关联的每个本地高速缓存存储器设备。因此,一旦发生本地写事件,通过采用所述侦听技术,硬件本地高速缓存控制器就可以检测到每个本地写事件的发生。中央目录可以具有对应于其数据有效的一个高速缓存ID的一个标记字段在该标记字段中描述的本地高速缓存存储器设备具有有效数据,而且其它本地高速缓存存储器设备中对应的高速缓存线可以处于伪共享状态。一旦对所述对应的高速缓存线发生后续的伪共享,并行计算系统700就可以使用该标记字段把有效高速缓存线移到伪共享状态,例如,通过设置该高速缓存线的伪共享位。换句话说,并行计算系统700只对基于该标记字段的有效高速缓存线做出改变。作为替代,每个本地高速缓存存储器设备中的每条高速缓存线都可以具有指示其数据是否有效的有效位。一旦发生伪共享事件,并行计算系统700就可以只对设置了有效位的高速缓存线做出改变。例如,并行计算系统700关掉那些高速缓存线的有效位并设置那些高速缓存线的伪共享位。如本领域技术人员将认识到的,本发明的各方面可以实现为系统、方法或者计算机程序产品。相应地,本发明的各方面可以采取完全硬件实施方式、完全软件实施方式(包括固件、驻留软件、微代码,等等)或者结合软件与硬件方面的实施方式的形式,所有这些 在这里都可以统称为“电路”、“模块”或“系统”。此外,本发明的各方面可以采取包含在一个或多个其上具有计算机可读程序代码的计算机可读介质中的计算机程序产品的形式。可以利用一种或多种计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质可以是例如,但不限于,电、磁、光、电磁、红外或者半导体系统、装置或设备,或者以上所述的任意合适组合。计算机可读存储介质的更具体例子(非穷尽列表)将包括以下具有一条或多条电线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦可编程只读存储器(EPR0M或者闪速存储器)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光学存储设备、磁存储设备或者以上所述的任意合适组合。在本文档的背景下,计算机可读存储介质可以是任何可以包含或存储由运行指令的系统、装置或设备使用或者与其结合使用的程序的有形介质。计算机可读信号介质可以包括其中包含计算机可读程序代码的、例如在基带中或者作为载波的一部分的传播数据信号。这种传播信号可以采取多种形式中的任何一种,包括但不限于,电磁、光或者其任意合适组合。计算机可读信号介质可以是任何非计算机可读存储介质且可以传送、传播或运输由运行指令的系统、装置或设备使用或者与其结合使用的程序的计算机可读介质。包含在计算机可读介质上的程序代码可以利用任何合适的介质发送,包括但不限于无线、有线、光纤电缆、RF等或者以上所述的任意合适组合。用于执行本发明各方面的操作的计算机程序代码可以用一种或多种编程语言的任何组合来写,包括诸如Java、Smalltalk、C++等的面向对象的编程语言和诸如“C”编程语言或类似编程语言的传统过程性编程语言。程序代码可以完全在用户的计算机上、部分在用户的计算机上、作为独立的软件包、部分在用户的计算机上且部分在远程计算机上或者完全在远程计算机或服务器上运行。在后一种场景下,远程计算机可以通过任何类型的网络连接到用户的计算机,包括局域网(LAN)或广域网(WAN),或者可以连接到外部计算机(例如,通过利用互联网服务提供商的互联网)。以下参考根据本发明实施方式的方法、装置(系统)和计算机程序产品的流程图例示和/或框图描述本发明的各方面。将理解,流程图例示和/或框图中的每个块以及流程图例示和/或框图中块的组合可以由计算机程序指令来实现。这些计算机程序指令可以提供给通用计算机、专用计算机或者其它可编程数据处理装置的处理器,来产生机器,使得经计算机或者其它可编程数据处理装置的处理器运行的指令产生用于实现在流程图和/或框图的一个或多个块中所指定功能/动作的装置。这些计算机程序指令还可以存储在计算机可读介质中,其可以指示计算机、其它可编程数据处理装置或者其它设备以特定方式起作用,使得存储在该计算机可读介质中的指令产生包括指令的制造品,所述指令实现在流程图和/或框图的一个或多个块中所指定的功能/动作。计算机程序指令还可以加载到计算机、其它可编程数据处理装置或者其它设备上,使得在计算机、其它可编程装置或者其它设备上执行一系列操作步骤,以产生计算机实现处理,使得在计算机或其它可编程装置上运行的指令提供用于实现在流程图和/或框图的一个或多个块中所指定的功能/动作的处理。

附图中的流程图和框图例示了根据本发明各种实施方式的系统、方法和计算机程序产品的可能实现的体系结构、功能性和操作。就此而言,流程图或框图中的每一块都可以代表一个模块、片段或者代码部分,这可以包括用于实现指定逻辑功能的一个或多个可操作指令。应当指出,在有些备选实现中,块中所指出的功能可以不以附图中所指出的次序发生。例如,依赖于所涉及的功能性,依次示出的两个块实际上可以基本同时运行,或者这些块有时候可以按颠倒的次序运行。还应当指出,框图和/或流程图例示的每个块及框图和/或流程图例示中块的组合可以由执行指定功能或动作的基于硬件的专用系统来实现,或者由专用硬件与计算机指令的组合来实现。
权利要求
1.一种用于改进并行计算系统的性能的装置,该装置包括 多个处理器,每个处理器都具有本地高速缓存存储器设备,且每个处理器都运行无数据依赖性的软件程序区的程序代码,每个处理器的本地高速缓存存储器设备与更新该本地高速缓存存储器设备中的高速缓存线的硬件本地高速缓存控制器相关联;及 第一硬件本地高速缓存控制器,该第一硬件本地高速缓存控制器与第一处理器的第一本地高速缓存存储器设备相关联,用于检测由运行所述程序代码的第二处理器对第一高速缓存线的伪共享的发生并且允许该第二处理器对所述第一高速缓存线的伪共享,当所述第一硬件本地高速缓存控制器更新所述第一本地高速缓存存储器设备中的第一高速缓存线的第一部分且第二硬件本地高速缓存控制器随后更新第二本地高速缓存存储器设备中的所述第一高速缓存线的第二部分时,发生对所述第一高速缓存线的伪共享。
2.如权利要求I所述的装置,其中,当所述第一硬件本地高速缓存控制器更新所述第一本地高速缓存存储器设备中的第一高速缓存线的第一部分时,其它硬件本地高速缓存控制器设置其它本地高速缓存存储器设备中对应于所述第一高速缓存线的伪共享位。
3.如权利要求I所述的装置,其中,当所述第二硬件本地高速缓存控制器更新所述第二本地高速缓存存储器设备中的第一高速缓存线的第二部分时,所述第一硬件本地高速缓存控制器设置所述第一本地高速缓存存储器设备中对应于所述第一高速缓存线的伪共享位,而且,当所述第一硬件本地高速缓存控制器更新所述第一本地高速缓存存储器设备中的第一高速缓存线的第一部分时,所述第二硬件本地高速缓存控制器设置所述第二本地高速缓存存储器设备中对应于所述第一高速缓存线的伪共享位。
4.如权利要求3所述的装置,其中,响应于所述多个处理器到达所述无数据依赖性的软件程序区的结尾,所述第一硬件本地高速缓存控制器和所述第二硬件本地高速缓存控制器使所述第一本地高速缓存存储器设备和所述第二本地高速缓存存储器设备中设置了伪共享位的高速缓存线无效。
5.如权利要求I所述的装置,其中,不包括数据依赖性的软件程序区包括至少一个无数据依赖性的循环。
6.如权利要求I所述的装置,其中,为了确定循环是否没有依赖性,编译器评估前一次迭代的输出是否用作后续迭代的输入。
7.如权利要求I所述的装置,其中,对本地高速缓存存储器设备的任何写入都直写到由所述多个处理器共享的高速缓存存储器设备。
8.如权利要求I所述的装置,其中,所述第一硬件本地高速缓存控制器被防止用来设置所述第一本地高速缓存存储器设备的伪共享位,而且其它硬件本地高速缓存控制器被防止用来使本地高速缓存存储器设备中未设置伪共享位的高速缓存线无效。
9.如权利要求I所述的装置,其中,当所述第一硬件本地高速缓存控制器更新所述第一本地高速缓存存储器设备中的第一高速缓存线的第一部分时,所述第一硬件本地高速缓存控制器设置所述第一本地高速缓存存储器设备中所述第一高速缓存线的伪共享位,其它硬件本地高速缓存控制器设置其它本地高速缓存存储器设备中的对应高速缓存线的伪共享位,而且当随后发生对所述对应高速缓存线的伪共享时,硬件本地高速缓存控制器之间不存在进一步的通信。
10.如权利要求I所述的装置,其中,所述第一硬件本地高速缓存控制器在一个或多个其它硬件本地高速缓存控制器设置其它本地高速缓存存储器设备中的对应高速缓存线的伪共享位之前完成所述第一本地高速缓存存储器设备中的第一高速缓存线的更新,而且所述一个或多个其它硬件本地高速缓存控制器在到达所述无数据依赖性的软件程序区的结尾之前设置其它本地高速缓存存储器设备中的对应高速缓存线的伪共享位。
11.如权利要求4所述的装置,其中,响应于两个或更多个处理器到达所述无数据依赖性的软件程序区的结尾,所述第一硬件本地高速缓存控制器选择性地使设置了伪共享位的一条或多条高速缓存线无效。
12.如权利要求4所述的装置,其中,响应于两个或更多个处理器到达所述无数据依赖性的软件程序区的结尾,所述第一硬件本地高速缓存控制器通过从共享的高速缓存存储器设备取得有效数据来选择性地更新设置了伪共享位的一条或多条高速缓存线。
13.如权利要求I所述的装置,其中,为了检测伪共享的发生,所述第一硬件本地高速缓存控制器和所述第二硬件本地高速缓存控制器使用中央目录或者侦听技术。
14.一种用于改进并行计算系统的性能的方法,该方法包括 提供多个处理器,每个处理器都具有本地高速缓存存储器设备,且每个处理器都运行无数据依赖性的软件程序区的程序代码,每个处理器的本地高速缓存存储器设备与更新该本地高速缓存存储器设备中的高速缓存线的硬件本地高速缓存控制器相关联;及 由与第一处理器的第一本地高速缓存存储器设备相关联的第一硬件本地高速缓存控制器检测由运行所述程序代码的第二处理器对第一高速缓存线的伪共享的发生,并且允许所述第二处理器对所述第一高速缓存线的伪共享,当所述第一硬件本地高速缓存控制器更新所述第一本地高速缓存存储器设备中的第一高速缓存线的第一部分且第二硬件本地高速缓存控制器随后更新第二本地高速缓存存储器设备中的所述第一高速缓存线的第二部分时,发生对所述第一高速缓存线的伪共享。
15.如权利要求14所述的方法,其中,当所述第一硬件本地高速缓存控制器更新所述第一本地高速缓存存储器设备中的第一高速缓存线的第一部分时,其它硬件本地高速缓存控制器设置其它本地高速缓存存储器设备中对应于所述第一高速缓存线的伪共享位。
16.如权利要求14所述的方法,其中,当所述第二硬件本地高速缓存控制器更新所述第二本地高速缓存存储器设备中的第一高速缓存线的第二部分时,所述第一硬件本地高速缓存控制器设置所述第一本地高速缓存存储器设备中对应于所述第一高速缓存线的伪共享位,而且,当所述第一硬件本地高速缓存控制器更新所述第一本地高速缓存存储器设备中的第一高速缓存线的第一部分时,所述第二硬件本地高速缓存控制器设置所述第二本地高速缓存存储器设备中对应于所述第一高速缓存线的伪共享位。
17.如权利要求16所述的方法,其中,响应于所述多个处理器到达所述无数据依赖性的软件程序区的结尾,所述第一硬件本地高速缓存控制器和所述第二硬件本地高速缓存控制器使所述第一本地高速缓存存储器设备和所述第二本地高速缓存存储器设备中设置了伪共享位的高速缓存线无效。
18.如权利要求14所述的方法,其中,对本地高速缓存存储器设备的任何写入都直写到由所述多个处理器共享的高速缓存存储器设备。
19.如权利要求14所述的方法,其中,防止所述第一硬件本地高速缓存控制器设置所述第一本地高速缓存存储器设备的伪共享位,而且防止其它硬件本地高速缓存控制器使本地高速缓存存储器设备中未设置伪共享位的高速缓存线无效。
20.如权利要求14所述的方法,其中,当所述第一硬件本地高速缓存控制器更新所述第一本地高速缓存存储器设备中的第一高速缓存线的第一部分时,所述第一硬件本地高速缓存控制器设置所述第一本地高速缓存存储器设备中所述第一高速缓存线的伪共享位,其它硬件本地高速缓存控制器设置其它本地高速缓存存储器设备中的对应高速缓存线的伪共享位,而且当随后发生对所述对应高速缓存线的伪共享时,硬件本地高速缓存控制器之间不存在进一步的通信。
21.如权利要求14所述的方法,其中,所述第一硬件本地高速缓存控制器在一个或多个其它硬件本地高速缓存控制器设置其它本地高速缓存存储器设备中的对应高速缓存线的伪共享位之前完成所述第一本地高速缓存存储器设备中的第一高速缓存线的更新,而且所述一个或多个其它硬件本地高速缓存控制器在到达所述无数据依赖性的软件程序区的结尾之前设置其它本地高速缓存存储器设备中的对应高速缓存线的伪共享位。
22.如权利要求17所述的方法,其中,响应于两个或更多个处理器到达所述无数据依赖性的软件程序区的结尾,所述第一硬件本地高速缓存控制器选择性地使设置了伪共享位的一条或多条高速缓存线无效。
23.如权利要求17所述的方法,其中,响应于两个或更多个处理器到达所述无数据依赖性的软件程序区的结尾,所述第一硬件本地高速缓存控制器通过从共享的高速缓存存储器设备取得有效数据来选择性地更新设置了伪共享位的一条或多条高速缓存线。
24.如权利要求14所述的方法,其中,为了检测伪共享的发生,所述第一硬件本地高速缓存控制器和所述第二硬件本地高速缓存控制器使用中央目录或者侦听技术。
全文摘要
公开了用于改进并行计算机系统的性能的装置、方法与计算机程序产品。与第一处理器的第一本地高速缓存存储器设备相关联的第一硬件本地高速缓存控制器检测由运行程序代码的第二处理器对第一高速缓存线的伪共享的发生,并且允许该第二处理器对所述第一高速缓存线的伪共享。当第一硬件本地高速缓存控制器更新第一本地高速缓存存储器设备中的第一高速缓存线的第一部分且第二硬件本地高速缓存控制器随后更新第二本地高速缓存存储器设备中的所述第一高速缓存线的第二部分时,发生对所述第一高速缓存线的伪共享。
文档编号G06F12/08GK102681948SQ20121002954
公开日2012年9月19日 申请日期2012年2月10日 优先权日2011年2月11日
发明者A·E·艾臣博格, A·加拉, M·欧玛克特, V·斯里尼发桑 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1