实现具有串行语义的并行循环的制作方法

文档序号:6427003阅读:144来源:国知局
专利名称:实现具有串行语义的并行循环的制作方法
技术领域
本发明涉及计算机处理技术,尤其涉及实现具有串行语义的并行循环。
背景技术
1.背景和相关技术计算机系统和相关技术影响社会的许多方面。的确,计算机系统处理信息的能力已转变了人们生活和工作的方式。计算机系统现在通常执行在计算机系统出现以前手动执行的许多任务(例如,文字处理、日程安排和会计等)。最近,计算机系统彼此耦合并耦合到其他电子设备以形成计算机系统和其他电子设备可以在其上传输电子数据的有线和无线计算机网络。因此,许多计算任务的执行分布在多个不同的计算机系统和/或多个不同的计算环境上。许多计算任务并行地执行以提高性能。例如,当计算机具有多个处理器和/或多个处理器核时,程序的不同部分可以同时在不同的处理器/处理器核上执行,从而减小总执行时间。然而,许多并行处理实施方式具有不直观的语义。这些并行语义常常明显比较简单的串行语义更复杂。例如,用于并行语义的常见机制是将循环的本体提升到其自己的函数中并且无序地执行每个循环迭代。遗憾的是,这导致尤其是与副作用操作有关的非确定性行为。考虑下面的代码部分,该代码部分具有向用在循环之外的变量进行写入的副作用操作
t = 5
for i in N if f(i) { t= 10
}
ifg(i) { t = 20
}
End Read ⑴在该代码部分内,t用在该循环之外。另外,t不一定在循环本体的每个或甚至任何迭代内被赋值。而且,t被赋值时的迭代是在运行时间而不是静态地被确定的。每个迭代也可以具有赋不同值的多个赋值点。这些性质之中的一个或多个可能在并行执行循环迭代时导致非确定性的行为。

发明内容
本发明延及用于实现具有串行语义的并行循环的方法、系统和计算机程序产品。 本发明的实施例包括用于并行实现串行循环的迭代的方法。在一些实施例中确定循环的指定数目的循环迭代(例如N个)将被执行。该指定数目的循环迭代中的一个或多个迭代将多个值之一赋给串行循环中所使用的变量。向每个循环迭代提供该变量的临时副本。来自该指定数目的循环迭代中的一组或多组不同的多个循环迭代被并发地执行。从这一组或多组多个循环迭代中的每个中确定 对于多个循环迭代中的每个不同的循环迭代,是否有值以及何值被赋给该变量。针对至少一个循环迭代,这多个值之一被赋给为该迭代循环所提供的变量的临时副本。指示为该循环迭代所提供的变量的临时副本被赋值。基于每个循环迭代本来将在该循环的串行执行期间何时被串行执行,对为该循环迭代所提供的变量的临时副本进行排序。变量的临时副本根据归约运算符(reduction operator)被合并(merge)以标识与给自己的变量的临时副本赋值的最后循环迭代(基于该指定数目的循环迭代)最接近的循环迭代。被赋给最接近最后循环迭代的临时变量的值作为该变量的值被赋予。在其他实施例中确定循环的指定数目的循环迭代将被执行。该指定数目的迭代循环中的每个迭代都可以将值赋给至少一个变量。该指定数目的迭代循环中的一个或多个循环迭代致使循环中断执行。来自该指定数目的循环迭代中的一组或多组不同的多个循环迭代被并发地执行。对于每个循环迭代确定何值被赋给该至少一个变量。对于每个循环迭代确定 该循环迭代是否致使循环中断执行。检测在该指定数目的循环迭代之前的循环迭代致使循环中断执行。响应于循环执行的中断,否则将在串行执行期间在致使循环中断执行的循环迭代之后出现的迭代循环的任何赋予的值都被忽略。响应于循环执行的中断,循环迭代的另外的并发执行也被调节。该调节包括执行否则将在串行执行期间在致使循环中断执行的循环迭代以前出现的循环迭代。该调节还包括忽略否则将在串行执行期间在致使循环中断执行的循环迭代之后出现的任何剩余循环迭代。否则将在串行执行期间在致使循环中断执行的循环迭代以前被赋值的循环迭代的被赋予的值被提交。提供本发明内容是为了以简化的形式介绍将在以下具体实施方式
中进一步描述的一些概念。本发明内容并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。本发明的附加特征和优点将在以下描述中叙述,且其一部分根据本描述将是显而易见的,或可通过对本发明的实践来获知。本发明的特征和优点可通过在所附权利要求书中特别指出的工具和组合来实现和获得。本发明的这些和其他特征将通过以下描述和所附权利要求书变得更加显而易见,或可通过对下文中所述的本发明的实践来领会。


为了描述可获得本发明的上述和其它优点和特征的方式,将通过参考附图中示出的本发明的具体实施例来对以上简要描述的本发明进行更具体描述。可以理解,这些附图只描绘了本发明的各典型实施例,并且因此不被认为是对其范围的限制,将通过使用附图并利用附加特征和细节来描述和解释本发明,在附图中图1示出了使得易于实现具有串行语义的并行循环的示例性计算机架构。图2示出了用于并行实现串行循环的迭代的示例方法的流程图。图3示出了易于实现具有串行语义的并行循环的另一示例计算机架构。图4示出了用于并行实现串行循环的迭代的另一示例性方法的流程图。
具体实施例方式本发明延及用于实现具有串行语义的并行循环的方法、系统和计算机程序产品。 本发明的实施例包括用于并行实现串行循环的迭代的方法。在一些实施例中确定循环的指定数目的循环迭代(例如N个)将被执行。该指定数目的循环迭代中的一个或多个迭代将多个值之一赋给串行循环中所使用的变量。给每个循环迭代提供该变量的临时副本。来自该指定数目的循环迭代中的一组或多组不同的多个循环迭代被并发地执行。从所述一组或多组多个循环迭代中的每个中确定针对所述多个循环迭代中的每个不同的循环迭代,是否有值以及何值被赋给该变量。针对至少一个循环迭代,所述多个值之一被赋给为该循环迭代提供的变量的临时副本。指示为该循环迭代所提供的变量的临时副本被赋值。基于每个循环迭代本来将在该循环的串行执行期间何时被串行执行,来为该循环迭代所提供的变量的临时副本进行排序。变量的临时副本根据归约运算符被合并以标识与给自己的变量的临时副本赋值的最后循环迭代(基于该指定数目的循环迭代)最接近的循环迭代。被赋给与最后循环迭代最接近的迭代循环的临时变量的值作为该变量的值被赋予。在其他实施例中确定循环的指定数目的循环迭代将被执行。该指定数目的迭代循环中的每个迭代都可以将值赋给至少一个变量。该指定数目的迭代循环中的一个或多个循环迭代致使循环中断执行。来自该指定数目的循环迭代中的一组或多组不同的多个循环迭代被并发地执行。针对每个循环迭代确定何值被赋给所述至少一个变量。针对每个循环迭代确定 该循环迭代是否致使循环中断执行。检测在该指定数目的循环迭代之前的循环迭代致使循环中断执行。响应于循环执行的中断,否则将在串行执行期间在致使循环中断执行的循环迭代之后出现的循环迭代的任何赋予的值都被忽略。响应于循环执行的中断,循环迭代的另外的并发执行也被调节。该调节包括执行否则将在串行执行期间在致使循环中断执行的循环迭代以前出现的循环迭代。该调节还包括忽略否则将在串行执行期间在致使循环中断执行的循环迭代
7之后出现的任何剩余循环迭代。否则将在串行执行期间在致使循环中断执行的循环迭代以前被赋值的循环迭代的被赋予的值被提交。本发明的各实施例可以包括或利用包括诸如一个或多个处理器和系统存储器的计算机硬件的专用或通用计算机,这将在以下做出进一步讨论。本发明范围内的各实施例还包括用于承载或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。 这样的计算机可读介质可以是可由通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算机可读介质是物理存储介质。承载计算机可执行指令的计算机可读介质是传输介质。由此,作为示例而非限制,本发明的各实施例可包括至少两种完全不同的计算机可读介质计算机存储介质和传输介质。计算机存储介质包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储或其他磁存储设备、或可用于存储计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的任何其他介质。“网络”被定义为允许在计算机系统和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链路。当信息通过网络或另一通信连接(硬连线、无线、或硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为传输介质。传输介质可包括可用于承载计算机可执行指令或数据结构形式的所需程序代码装置并可由通用或专用计算机访问的网络和/或数据链路。上述的组合也应被包括在计算机可读介质的范围内。此外,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程序代码装置可从传输介质自动转移到计算机存储介质(或者相反)。例如,通过网络或数据链路接收到的计算机可执行指令或数据结构可被缓存在网络接口模块(例如,“NIC”)内的RAM中,然后最终被传送到计算机系统RAM和/或计算机系统处的较不易失性的计算机存储介质。由此,应当理解,计算机存储介质可被包括在同样(或甚至主要)利用传输介质的计算机系统组件中。计算机可执行指令例如包括,当在处理器处执行时使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。计算机可执行指令可以是例如二进制代码、诸如汇编语言等中间格式指令、或甚至源代码。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解的是,所附权利要求书中定义的主题不必限于上述特征或动作。相反,上述特征和动作是作为实现权利要求的示例形式而公开的。本领域的技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器的或可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机、路由器、交换机等等。本发明也可以在其中通过网络链接(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程计算机系统两者都执行任务的分布式系统环境中实践。在分布式系统环境中,程序模块可以位于本地和远程存储器存储设备二者中。本发明的各实施例提供语义变换和代码生成器模式,其提供具有串行循环语义的更高效的并行循环实施方式。本发明的各实施例支持for循环本体内的赋值,支持for循环本体内的中断(break)/返回(return)构造、以及运行用于将串行构造转换成并行构造的变换。图1示出了使得易于实现具有串行语义的并行循环的示例性计算机架构100。参考图1,计算机架构100包括迭代标识模块101、合并模块102、和代码106。所描绘的组件中的每一个都通过诸如例如局域网(“LAN”)、广域网(“WAN”)或甚至因特网之类的网络彼此连接(或者是网络的一部分)。因此,所描绘的组件中的每一个以及任何其他连接的计算机系统及其组件都可以创建消息相关数据并通过网络交换与消息相关数据(例如,网际协议(“IP”)数据报和利用IP数据报的其他更高层协议,诸如传输控制协议(“TCP”)、超文本传输协议(“HTTP”)、简单邮件传输协议(“SMTP”)等)。总的来说,迭代标识模块101被配置为在执行循环以前标识循环的迭代数目。迭代模块101还可以分配循环变量的临时私有副本以供与每个循环迭代一起使用。合并模块 102被配置为利用诸如例如合并之类的归约运算来将多个值(例如循环变量的多个临时私有副本的值)归约为单个值。该单个值表示循环内的变量在循环完成时的值。图2示出了用于并行实现串行循环的迭代的示例性方法200的流程图。方法200 将参考计算机架构100中的组件和数据来描述。方法200包括确定循环的指定数目的循环迭代将被执行的动作,该指定数目的循环迭代中的一个或多个迭代将多个值之一赋给串行循环中所使用的变量(动作201)。例如,迭代标识模块101可以确定循环121将被执行六次。迭代模块101可以在执行循环121 以前分析代码106以确定N = 6。循环121的一个或多个迭代可以将数值(例如整数)或其他某个值范围内的值赋给变量t。方法200包括将变量的临时副本提供给每个循环迭代的动作(动作202)。例如, 迭代标识模块将变量t的临时副本提供给循环121的每个迭代。在一些实施例中,数组被创建。该数组由循环计数器来索引,使得每个循环迭代设置数组内的不同值。迭代标识模块101可以改写代码以实现用于存储变量的临时副本的数组。例如,迭代标识模块101可以将代码106改写成经修改的代码106M。方法200包括并发地执行来自该指定数目的循环迭代中的一组或多组不同的多个循环迭代以确定针对每个不同的循环迭代是否有值以及何值被赋给该变量的动作(动作203)。例如,不同的多个循环迭代107可以被并发执行以确定针对循环107的迭代, 是否有值以及何值被赋给“t”。例如在循环121中,如果对于指定的循环,f(i)和g(i) 二者都为假(FALSE),则t未被赋值。例如诸如维护额外的标志位(例如类似于C#可空 (Nullable))或在变量的编码中使用前哨(sentinel) ‘未初始化,的值(例如IEEE双精度中的某些位模式)之类的额外代码生成器可以用于指示何时未赋值。对于至少一个循环迭代,方法200包括将多个值之一赋给为该迭代循环所提供的变量的临时副本的动作(动作204)。例如,迭代107A可以被并发执行以赋值t2[2] =3和 t2[4] =7。在之前或随后,迭代107B可以被并发执行以赋值t2[l] =5。方法200包括指示为该循环迭代所提供的变量的临时副本曾被赋值的动作(动作 205)。例如,可以确定t2 [1]、t2 [2]、和t2 [4]曾被赋值并且t2
、t2 [3]、和t2 [3]未曾被赋值。确定在循环本体中是否已经赋值可以通过参考额外的代码生成器或变量的编码中的前哨‘未初始化’的值来促进。因此,诸如例如boolHasValueO之类的函数可以用于确定变量是否已经被赋值。
9
方法200包括基于每个循环迭代本来将在该循环的串行执行期间何时被串行执行来对为该循环迭代所提供的变量的临时副本进行排序的动作(动作206)。例如,循环迭代107的t的临时副本的值(其被存储在数组t2中)可以根据排序108来排序。也就是说,t2
的值,跟在后面的是t2[l]的值,跟在后面的是t2[2]的值等等。方法200包括根据归约运算符来合并该变量的临时副本符以标识与给自己的变量的临时副本赋值的最后循环迭代(基于该指定数目的循环迭代)最接近的循环迭代的动作(动作207)。例如,合并模块102可以合并排序108中的值以标识对应于的迭代(即第五迭代)是循环121的与给t2赋予(例如非空)值7的第六迭代(对于N = 6) 最接近的迭代。合并操作基本上确定将在循环的串行执行期间将值赋给变量的最后循环迭代。在一些实施例中使用下面的合并函数,其中将当前值与有序列表中的下一值进行比较
Merge(ref t, newValue) { if (HasValue(newValue)) t — newValue;
}该合并函数是结合运算符。因此,改变排序108中的值被合并的顺序不会改变在赋值109处所赋予的值。方法200包括将由与最后循环迭代最接近的迭代循环赋给其变量的临时副本的值作为该变量的值来赋予的动作(动作208)。例如,合并模块102可以将7赋给t。因此, 即使循环121的不同迭代已经被并发且可能无序地执行,t仍然被赋予否则将在迭代107被串行执行的情况下被赋予的值。图3示出了易于实现具有串行语义的并行循环的示例计算机架构300。如所描绘的那样,计算机架构300包括迭代标识模块301和代码306。图4示出了用于并行实现串行循环的迭代的示例方法400的流程图。方法400将参考计算机架构300的组件和数据来描述。方法400包括确定循环的指定数目的循环迭代将被执行的动作,该指定数目的循环迭代中的每个迭代都将值赋给至少一个变量,该指定数目的循环迭代中的一个或多个循环迭代致使循环中断执行(动作401)。例如,循环迭代模块301可以确定循环321的循环迭代307将被执行。循环迭代307中的每个迭代都将值赋给数组A和数组B。其中f (i)为真(TRUE)的任何循环迭代中断循环321的执行。方法400包括并发地执行来自该指定数目的循环迭代中的一组或多组不同的多个循环迭代的动作(动作402)。例如,迭代307 (N = 2,3和6)可以被并发执行。在之前或随后,迭代307B可以(N = 0,1和4)被并发执行。对于每个循环迭代,方法400包括确定何值被赋给所述至少一个变量的动作(动作403)、以及确定该循环迭代是否致使循环中断执行的动作(动作404)。例如,对于循环迭代307,可以确定何值被赋给A[i]和B[i]以及循环迭代是否致使循环321中断。方法400包括检测在该指定数目的循环迭代之前的循环迭代致使循环中断执行的动作(动作405)。例如,可检测对于N = 4的迭代致使循环321中断。响应于循环执行的中断,方法400包括忽略否则将在串行执行期间在致使循环中断执行的循环迭代之后出现的迭代循环的任何赋予的值的动作(动作406)。例如,针对任何N > 4,包括N = 6的任何迭代的所赋予的值可以被忽略。在串行执行期间,这些值将从不会被赋予,因为循环321 将在其赋值以前中断。方法400包括调节循环迭代的另外的并发执行的动作以(a)执行否则将在串行执行期间在致使循环中断执行的循环迭代之前出现的迭代循环、以及(b)忽略否则将在串行执行期间在致使循环中断执行的循环迭代之后出现的任何剩余迭代循环(动作407)。因此,循环迭代307的另外的并发执行可以被调节以执RN < 4的循环迭代并且忽略N > 4的任何剩余循环迭代。例如,如果循环迭代307B在迭代307A以前并发执行,则N = 2、3的迭代被执行并且N = 6的迭代被忽略。在串行执行期间,将不到达迭代N > 4,因为循环321 将在这些迭代之前中断(即循环321将在N = 4时中断)。方法400包括提交否则将在串行执行期间在致使循环中断执行的循环迭代以前被赋值的循环迭代的被赋予的值的动作(动作408)。例如,所赋予的值308可以针对循环迭代307被提交。所赋予的值308是将在串行执行期间在循环321中断以前被赋予的值。在合适时,可以对所赋予的值308使用归约运算符(例如合并)。然而,替代在最接近N的迭代中所赋予的值,可以将在最接近中断的迭代中所赋予的值赋给变量(例如类似于计算机架构101的赋值109)。本发明的实施例可以以诸如例如群集或图形处理单元(“GPU”)之类的分布式存储器模型来实现,其中数据在并行循环本体之间和循环之外被编组。存储器可以在共享存储器系统上被建模。在一些实施例中,使用变换来将串行构造转换成并行构造。因此,尽管一些代码看上去具有需要串行语义的数据依赖性,但是存在可以应用于串行构造以允许这些构造被并行处理的变换。可能的是,使用语义上保留模式匹配的技术。例如,下面的构造具有阻止并行化的数据依赖性,因为a和b 二者都被读和写。if (a > b)b = a然而,该构造可以利用如下归约运算符来变换b = max (b, a) // 归约并且然后使用现有归约技术来并行化。也可使用其他优化。例如,可以减少到循环本体中和从循环本体中出发的数据通信的闲谈(chattiness)。在循环以后不被读取的副作用不一定需要被提交。不提交副作用可以节省从夸群集分布的循环本体传递回数据的带宽。另外,如果执行引擎支持异步通信(例如GPU或群集),则循环本体可以在传入变量已经被完全拷入以前开始执行。附加地,如果迭代绝不会访问一块数据,则可能合理的是不将数据发送给拥有该迭代的执行引擎。本发明可被具体化为其他具体形式而不背离其精神或本质特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。从而,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变被权利要求书的范围所涵盖。
权利要求
1.一种在包括一个或多个处理器和系统存储器的计算机系统处的用于并行实现串行循环的迭代的方法,该方法包括确定循环(121)的指定数目的循环迭代(107)将被执行的动作,所述指定数目的循环迭代中的一个或多个迭代将多个不同值之一赋给所述串行循环中所使用的变量; 将该变量的临时副本提供给每个循环迭代(107)的动作;并发地执行来自所述指定数目的循环迭代(107)中的一组或多组不同的多个循环迭代(107A,107B)以确定对于每个不同的循环迭代(107),包括对于至少一个循环迭代,是否有值以及何值被赋给所述变量的动作将所述多个不同值之一赋给为所述迭代循环所提供的变量的临时副本的动作;以及指示为所述循环迭代所提供的变量的临时副本被赋值的动作; 基于每个循环迭代本来将在所述循环的串行执行期间何时被串行执行来对为所述循环迭代(107)所提供的变量的临时副本进行排序(10 的动作;根据归约运算符来合并所述变量的临时副本符以标识与给自己的变量的临时副本赋予所述不同值之一的最后循环迭代最接近的循环迭代(107)的动作;将由与最后循环迭代最接近的迭代循环赋给其变量的临时副本的值作为所述变量的值来赋予(109)的动作。
2.如权利要求1所述的方法,其特征在于,进一步包括变换所述循环内的至少一个代码构造,使得所述循环迭代能够并行化。
3.如权利要求1所述的方法,其特征在于,将所述变量的临时副本提供给每个循环迭代的动作包括使用数组来为每个循环迭代存储所述变量的临时副本的动作。
4.如权利要求1所述的方法,其特征在于,并发地执行一组或多组不同的多个循环迭代的动作包括以相对于所述循环的串行执行不同的顺序执行一个或多个循环迭代的动作。
5.如权利要求1所述的方法,其特征在于,指示为该循环迭代所提供的变量的临时副本被赋值的动作包括为所述变量的每个临时副本维护额外位标志的动作。
6.如权利要求1所述的方法,其特征在于,指示为所述循环迭代所提供的变量的临时副本被赋值的动作包括为所述变量的每个临时副本使用编码中的前哨‘未初始化’的值的动作。
7.如权利要求1所述的方法,其特征在于,根据归约运算符来合并所述变量的临时副本符的动作包括使用结合合并运算符的动作。
8.—种在包括一个或多个处理器和系统存储器的计算机系统处的用于并行实现串行循环的迭代的方法,所述方法包括确定循环(321)的指定数目的循环迭代(307)将被执行的动作,所述指定数目的循环迭代中的每个迭代都将值赋给至少一个变量,所述指定数目的循环迭代中的一个或多个循环迭代致使循环中断执行;并发地执行来自所述指定数目的循环迭代中的一组或多组不同的多个循环迭代 (307A,308B)的动作,包括为每个循环迭代确定 确定何值被赋给所述至少一个变量的动作;以及确定所述循环迭代是否致使循环(321)中断执行的动作;检测在所述指定数目的循环迭代之前的循环迭代致使循环(321)中断执行的动作;响应于循环执行的中断忽略否则将在串行执行期间在致使循环中断执行的循环迭代之后出现的循环迭代的任何所赋予的值的动作;以及调节循环迭代的另外的并发执行的动作以(a)执行否则将在串行执行期间在致使循环中断执行的循环迭代之前出现的循环迭代;以及(b)忽略否则将在串行执行期间在致使循环中断执行的循环迭代之后出现的任何剩余循环迭代提交否则将在串行执行期间在致使循环中断执行的循环迭代之前出现的循环迭代的任何所赋予的值(308)的动作。
9.如权利要求8所述的方法,其特征在于,进一步包括变换所述循环内的至少一个代码构造,使得所述循环迭代能够并行化。
10.如权利要求8所述的方法,其特征在于,并发地执行来自所述指定数目的循环迭代中的一组或多组不同的多个循环迭代的动作包括以相对于所述循环的串行执行不同的顺序执行一个或多个循环迭代的动作。
11.如权利要求8所述的方法,其特征在于,并发地执行来自所述指定数目的循环迭代中的一组或多组不同的多个循环迭代的动作包括使用分布式存储器模型执行一组或多组不同的多个循环迭代的动作。
12.如权利要求8所述的方法,其特征在于,进一步包括基于每个循环迭代本来将在所述循环的串行执行期间何时被串行执行来对所赋予的值进行排序的动作;根据归约运算符来合并所赋予的值以标识与致使中断的循环迭代最接近的循环迭代的动作;将与致使中断的循环迭代最接近的循环迭代的所赋予的值作为所述变量的值来赋予的动作。
13.一种供在计算机系统处使用的计算机程序产品,所述计算机程序产品用于实现一种用于并行实现串行循环的迭代的方法,所述计算机程序产品包括上面存储有计算机可执行指令的一个或多个计算机存储介质,所述指令在处理器处执行时致使所述计算机系统执行该方法,所述方法包括以下动作确定循环(121)的指定数目的循环迭代(107)将被执行,所述指定数目的循环迭代中的一个或多个迭代将多个不同值之一赋给所述串行循环中所使用的变量;将所述变量的临时副本提供给每个循环迭代(107);并发地执行来自所述指定数目的循环迭代(107)中的一组或多组不同的多个循环迭代(107A,107B)以确定对于每个不同的循环迭代(107),包括对于至少一个循环迭代,是否有值以及何值被赋给所述变量将所述多个不同值之一赋给为所述迭代循环所提供的变量的临时副本;以及指示为所述循环迭代所提供的变量的临时副本被赋值;基于每个循环迭代本来将在所述循环的串行执行期间何时被串行执行来对为所述循环迭代(107)所提供的变量的临时副本进行排序(108);根据归约运算符来合并所述变量的临时副本符以标识与给自己的变量的临时副本赋予所述不同值之一的最后循环迭代最接近的循环迭代(107);以及将由与最后循环迭代最接近的迭代循环赋给其变量的临时副本的值作为所述变量的值来赋予(109)。
14.如权利要求13所述的计算机程序产品,其特征在于,在执行时致使计算机系统将所述变量的临时副本提供给每个循环迭代的计算机可执行指令包括在执行时致使计算机系统使用数组来为每个循环迭代存储所述变量的临时副本的计算机可执行指令。
15.如权利要求14所述的计算机程序产品,其特征在于,在执行时致使计算机系统使用数组来为每个循环迭代存储所述变量的临时副本的计算机可执行指令包括在执行时致使计算机系统修改所述循环以针对每个迭代将值赋给所述数组内的相应位置的计算机可执行指令。
全文摘要
本文描述了实现具有串行语义的并行循环。本发明延及用于实现具有串行语义的并行循环的方法、系统和计算机程序产品。本发明的各实施例提供语义变换和代码生成器模式,其提供具有串行循环语义的更高效的并行循环实施方式。本发明的各实施例支持for循环本体内的赋值,支持for循环本体内的中断/返回构造、以及将串行构造转换成并行构造的运行变换。
文档编号G06F9/38GK102289364SQ201110172658
公开日2011年12月21日 申请日期2011年6月16日 优先权日2010年6月17日
发明者C·O·哈根洛赫, J·B·梅瑟利, J·J·乌格宁, J·M·斯托尔 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1