使用事务来并行化顺序框架的制作方法

文档序号:6477468阅读:184来源:国知局
专利名称:使用事务来并行化顺序框架的制作方法
使用事务来并行化顺序框架 背景
软件事务存储器(STM)是类似于数据库事务的、用于在并发计算中 控制对共享存储器的访问的并发控制机制。事务存储器的上下文中的事务 是执行对共享存储器的一系列读取和写入的一段代码。STM用作传统锁定 机制的替换。程序员在代码块周围放置声明性注释(例如,原子的)以指 示这些代码块所需要的安全特性,并且系统自动保证该块相对于其它受保 护的代码区域原子地执行。软件事务存储器编程模型防止了基于锁的优先 级倒置和死锁问题。
虽然典型的STM系统具有许多优点,但它们仍然需要程序员仔细地避 免非预期的存储器访问排序。例如,在典型的STM环境中提交事务(即, 提交处理)的次序是不受约束的。各事务彼此竞争提交,这意味着事务1 是在事务2之前还是之后提交通常是程序的动态调度的产物(并且通常也 由程序专用逻辑来调度)。此外,如果两个事务冲突,诸如通过试图向同 一段存储器写入等,则它们的提交次序可基于多个可能的争用管理策略中 的一个来任意决定。在这两种情况下,不保证任何特定提交次序;因此确 保程序员的程序按任一次序都正确地运作的负担就落在程序员身上。这使 得并行编程非常困难。
其中执行次序可能很重要并且其中并行性很有吸引力的一个场景是在 并行地执行一循环的多次迭代时。以典型的"for...each"循环为例,如下 所示
ForEach (string s in List<string>)
在该循环的每一迭代期间,都将执行该循环主体中的语句s。这一循
环被编写来顺序地执行,其中该循环的第一次迭代在第二次迭代开始之前结束,以此类推。如果在没有处理可能的副作用或次序依赖性的额外预防 措施的情况下并行地执行这一顺序循环,则可能发生意外结果。
概述
公开了用于对事务存储器系统中的事务应用排序的各种技术和方法。 事务存储器系统具备允许为多个事务指定预定提交次序的特征。在运行时 使用该预定提交次序来帮助确定提交事务存储器系统中的事务的次序。在 一个实现中,预定提交次序可以或者是总体排序或者是部分排序。在总体
排序的情况下,迫使事务以线性次序来提交。在部分排序的情况下,允许 在多个可接受场景中的一个中提交事务。在一个实现中,提交仲裁器跟踪
表示应被允许接下来提交的事务的下一个提交(next-to-commit)值,并且
当特定事务准备好提交时,该事务在其提交序号匹配提交仲裁器的下一个 提交值的情况下被允许提交。
当在第一事务和第二事务之间发生冲突时调用争用管理过程。在争用 管理过程中使用预定提交次序来帮助确定第一事务还是第二事务应当赢得 冲突并被允许继续。
公开了用于将顺序循环转换成并行循环以与事务存储器系统一起使用 的技术。提供了一种基于事务存储器的系统。将包含原始顺序循环的第一 部分代码转换成包含使用事务来保留原始的输入到输出映射的并行循环的 第二部分代码。例如,可以通过取原始顺序循环的每一迭代并生成遵循预 定提交次序过程的单独事务,并随后将这些事务分配到不同的线程以使它 们并行执行,来将原始顺序循环转换成并行循环。万一在执行并行循环时 从特定事务中检测到未经处理的异常,则提交该特定事务和任何前导事务 所作出的状态修改并丢弃任何后续事务所作出的状态修改。否则,所有事 务提交。
在一个实现中,可以将开放和/或封闭顺序循环转换成并行循环。例如, 分析包含原始顺序循环的一部分代码以确定该原始顺序循环的固定迭代次 数。将原始顺序循环转换成可生成数量等于固定迭代次数的事务的并行循 环。作为另一示例,可以将开放顺序循环转换成生成包含推测流水线的每
6一迭代的相应工作项的单独事务的并行循环。将这些事务分配到不同的线 程以允许并行循环的至少一部分并行执行。并行循环随后在使用预定提交 排序的好处的事务存储器系统的保护之下执行。
在一个实现中,提供了一种用于执行从开放顺序循环生成的并行循环 的方法。生成估计在并行循环中执行的迭代次数的推测流水线,该并行循 环是从开放顺序循环中生成的。系统取推测流水线的每一迭代并生成包含 相应工作项的单独事务。随后将这些单独事务分配到不同的线程以使它们 最终可以并行执行。对每一相应工作项评估终止条件。在相应工作项中的 特定一个确定到达了终止并行循环的时间时,提交前导事务并丢弃后续事 务。
提供本概述以便以简化形式介绍将在以下详细描述中进一步描述的一 些概念。本概述不旨在标识所要求保护的主题的关键特征或必要特征,也 不旨在用于帮助确定所要求保护的主题的范围。
附图简述


图1是一个实现的计算机系统的图示。
图2是在图1的计算机系统上操作的一个实现的事务存储器应用程序 的图示。
图3是图1的系统的一个实现的高级处理流程图。
图4是图1的系统的一个实现的处理流程图,其示出在使用提交仲裁 器来强制实施预定提交次序时所涉及的各阶段。
图5是图1的系统的一个实现的处理流程图,其示出在使用提交仲裁 器来强制实施对多个事务的总体排序时所涉及的各阶段。
图6是图1的系统的一个实现的处理流程图,其示出在使用提交仲裁 器来强制实施对多个事务的部分排序时所涉及的各阶段。
图7是图1的系统的一个实现的处理流程图,其示出在提供使用预定 提交次序信息来管理冲突的争用管理过程时所涉及的各阶段。
图8是图1的系统的一个实现的处理流程图,其示出在提供使用预定 提交次序信息来管理关于嵌套事务的冲突的争用管理过程时所涉及的各阶段。
图9是示出顶层先辈具有公共先辈的示例性先辈树的逻辑图。
图IO是示出顶层先辈不具有公共先辈的示例性先辈树的逻辑图。
图11是图1的系统的一个实现的处理流程图,其示出在通过在事务存
储器系统中使用提交仲裁器来减少浪费的工作量时所涉及的各阶段。
图12是图1的系统的一个实现的处理流程图,其示出在争用管理过程
中分析整个先辈链以确定适当的冲突解决方案时所涉及的各阶段。
图13是在图1的计算机系统上操作的一个实现的事务存储器应用程序
的图示。
图14是图1的系统的一个实现的处理流程图,其示出在将原始顺序循
环转换成并行循环时所涉及的各阶段。
图15是图1的一个实现的处理流程图,其示出在使用预定提交次序过 程来确保并行循环中的事务以正确次序提交时所涉及的各阶段。
图16是图1的系统的一个实现的处理流程图,其示出在使用提交仲裁 器来检测并处理执行并行循环时所发生的冲突时所涉及的各阶段。
图17是图1的系统的一个实现的处理流程图,其示出在检测并处理执 行并行循环时所发生的未经处理的异常时所涉及的各阶段。
图18A-18B示出从原始顺序循环到并行循环的示例性转换的假想源代码。
图19是图1的系统的一个实现的处理流程图,其示出在将封闭顺序循 环转换成并行循环时所涉及的各阶段。
图20是图1的系统的一个实现的处理流程图,其示出在使用推测流水 线将开放顺序循环转换成并行循环时所涉及的各阶段。
图21是图1的系统的一个实现的处理流程图,其示出在执行从开放顺 序循环生成的并行循环时所涉及的各阶段。
图22是图1的系统的一个实现的处理流程图,其示出在确保从开放顺 序循环生成的并行循环中的每一工作项以正确次序提交时所涉及的各阶 段。
图23是图1的系统的一个实现的处理流程图,其示出在计算推测流水线以确定要在并行循环中包括多少次迭代时所涉及的各阶段。
图24A-24B示出从原始开放顺序循环到并行循环的示例性转换的假想 源代码。
详细描述
为促进对本发明的原理的理解,现将对附图中所示的各实施例加以参 考,同时也将用具体语言描述它们。不过,需要理解的是,并无意由此作 出范围上的限制。对所述实施例的任何改变和进一步更改,以及在此所述 的原理的进一步应用都可以预期将是本领域技术人员通常能想到的。
本系统可以在一般上下文中被描述为事务存储器系统,但是本系统还 用于除此之外的其它目的。在一个实现中,此处所描述的一个或多个技术 可被实现为诸如微软⑧.NET框架等框架程序内的、或来自为开发者提供开 发软件应用程序的平台任何其它类型的程序或服务的特征。在另一实现中, 此处所描述的一个或多个技术被实现为涉及开发在并发环境中执行的应用 程序的其它应用程序的特征。
在一个实现中,在事务存储器系统中提供允许为多个事务指定预定提 交次序的特征。该预定提交次序用于帮助确定提交事务的次序。在一个实 现中,当在第一事务和第二事务之间发生冲突时调用争用管理过程。然后 在争用管理过程中使用该预定提交次序来帮助确定第一事务还是第二事务 应当赢得冲突并被允许继续。
在另一实现中,在事务存储器系统中提供将原始顺序循环转换成并行 循环的特征。原始顺序循环以确保原始的输入到输出映射得到保留的方式 来转换成并行循环。此处使用的术语"原始的输入到输出映射得到保留" 意味着在执行并行化循环之后程序的状态是相同的,如同改为运行了顺序 循环一样。在一个实现中,通过将原始顺序循环的每一次迭代置于事务中 并随后使用此处描述的预定提交次序过程来确保以正确次序提交事务,来 在并行循环中保留原始的输入到输出映射。
尽管此处讨论的多个示例是在软件事务存储器系统的上下文中描述 的,但可以理解,在其它实现中,此处所描述的特征/技术中的一些、全部、或附加特征和/或技术可以用硬件事务存储器系统来与软件事务存储器系统 分开或相结合地实现。
如图1所示,用于实现本系统的一个或多个部分的示例性计算机系统 包括诸如计算设备100等计算设备。在其最基本的配置中,计算设备100
通常包括至少一个处理单元102和存储器104。取决于计算设备的确切配置 和类型,存储器104可以是易失性的(如RAM)、非易失性的(如ROM、 闪存等)或是两者的某种组合。该最基本配置在图1中由虚线106来示出。
另外,设备100还可具有附加特征/功能。例如,设备100还可包含附 加存储(可移动和/或不可移动),包括但不限于磁盘、光盘或磁带。这样 的附加存储在图1中由可移动存储108和不可移动存储110示出。计算机 存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其 它数据等信息的任何方法或技术来实现的易失性和非易失性、可移动和不 可移动介质。存储器104、可移动存储108和不可移动存储IIO都是计算机 存储介质的示例。计算机存储介质包括但不限于,RAM、 ROM、 EEPROM、 闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光存储、 磁带盒、磁带、磁盘存储或其它磁存储设备、或者可用于存储所需信息并 且可由设备100访问的任何其它介质。任何这样的计算机存储介质都可以 是设备100的一部分。
计算设备100包括允许计算设备100与其它计算机/应用程序114进行 通信的一个或多个通信连接115。设备100还可以具有诸如键盘、鼠标、笔、 语音输入设备、触摸输入设备等输入设备112。还可以包括诸如显示器、扬 声器、打印机等输出设备111。这些设备在本领域中公知且无需在此处详细 讨论。在一个实现中,计算设备100包括事务存储器应用程序200。事务存 储器应用程序200将在图2中更详细地描述。
现在转向图2并继续参考图1,示出了在计算设备100上操作的事务 存储器应用程序200。事务存储器应用程序200是驻留在计算设备100上的 应用程序中的一个。然而,可以理解,事务存储器应用程序200可另选地 或另外地被具体化为一个或多个计算机上的计算机可执行指令和/或与图1 所示的不同的变型。另选地或另外地,事务存储器应用程序200的一个或多个部分可以是系统存储器104的一部分、可以在其它计算机和/或应用程
序115上、或可以是计算机软件领域的技术人员能想到的其它此类变型。
事务存储器应用程序200包括负责执行在此描述的技术中的一些或全 部的程序逻辑204。程序逻辑204包括用于提供事务存储器(STM)系统的 逻辑206;用于提供允许为STM系统中的多个事务静态或动态地指定预定 提交次序的提交仲裁器的逻辑208;用于允许提交仲裁器在运行时使用预定 提交次序来帮助确定提交事务存储器系统中的多个事务的次序的逻辑210; 用于提供当在第一事务和第二事务之间发生冲突时调用的争用管理过程的 逻辑212;用于在争用管理过程中使用预定提交次序来帮助确定第一事务还 是第二事务应当赢得冲突并被允许继续(例如,取决于同一事务组中的两
个事务中的哪个事务具有较低提交序号)的逻辑214;用于允许提交仲裁器
可操作来使用预定提交排序来跟踪一个或多个排序值(例如,在总体排序 中,表示多个事务中应被允许提交的下一事务的下一个提交字段)以及用 于将该一个或多个排序值与给定事务的特定提交序号进行比较以査看该给
定事务的提交是否是适当的(给定应强制实施的排序)的逻辑216;以及用
于操作该应用程序的其它逻辑220。在一个实现中,程序逻辑204可操作来 通过编程,如使用对程序逻辑204中的一个过程的单一调用而从另一程序 调用。
现在转向图3-10并继续参考图1-2,更详细地描述了用于实现事务存 储器应用程序200的一个或多个实现的各阶段。图3是事务存储器应用程 序200的高级处理流程图。在一种形式中,图3的过程至少部分地在计算 设备100的操作逻辑中实现。该过程在起始点240处开始,在那里提供事 务存储器系统(例如,软件事务存储器系统)(阶段242)。提供允许为多 个事务指定(例如,动态或静态地分配)预定提交次序(例如,总体排序 或部分排序)的特征(阶段244)。此处所使用的术语"预定提交次序"旨 在包括在事务开始运行之前的任何时刻所确定的特定相关事务组应被提交 的特定次序。此处所使用的术语事务"组"包括由同一个提交仲裁器管理 的特定的一组(例如,多个)事务,以及这些事务的嵌套子事务。
在运行时使用预定提交次序来帮助确定提交事务存储器系统中的多个
11事务的次序(阶段246)。使用预定提交次序来帮助解决在多个事务中的两
个或多个之间发生的冲突(阶段248)。该过程在结束点250处结束。
图4示出了在使用提交仲裁器来强制实施预定提交次序时所涉及的各 阶段的一个实现。在一种形式中,图4的过程至少部分地在计算设备100 的操作逻辑中实现。该过程在起始点270处开始,在那里为事务存储器系 统提供一个或多个提交仲裁器,该提交仲裁器可操作来允许为多个事务指 定预定提交次序(阶段272)。此处所使用的术语"提交仲裁器"旨在包括 负责管理应当相对于彼此来排序的一个或多个事务组的任何类型的程序、 特征或进程。在一个实现中,在任何给定时刻可能存在在程序中活动的一 个或多个提交仲裁器。例如,可创建如所需要的那样多的提交仲裁器以管 理不同的事务组。提交仲裁器跟踪并更新用于确定事务相对于彼此的正确 排序的一个或多个排序值(阶段274)。在总体排序的情况下,可使用下一 个提交字段来表示多个事务中应被下一个提交的下一事务(阶段274)。在 部分排序的情况下,使用排序值来跟踪不同的可能次序的有向图。在适当 时,提交仲裁器使用预定提交次序来为多个事务中的每一个提供提交序号 (阶段276)。
当多个事务中的一特定事务准备提交时,如果该特定事务的提交序号 在与一个或多个排序值进行比较时揭示该提交是适当的,则提交仲裁器允
许该事务提交(阶段278)。在总体排序的情况下,该情况在下一个提交字 段与该特定事务的提交序号具有相同的值时发生。在这种情况下,提交仲 裁器允许该事务提交并且然后在提交成功的情况下将下一个提交字段递增 至序列中的下一个数字(例如,下一个较高的数字)(阶段278)。当该多 个事务中的特定事务准备提交时,如果该特定事务的提交序号在与排序值 进行比较时揭示该提交不是适当的,则将该特定事务置于挂起模式中直到 其在前导事务提交后的稍后时刻被唤醒(阶段280)。在总体排序的情况下, 当下一个提交字段和该特定事务的序号不具有相同的值时进入该挂起模 式。
在一个实现中,系统可在一事务的直接前导者被提交后唤醒该事务, 在这种情况下该事务可尝试立即提交。或者,系统可选择在某一非直接前导者被提交后唤醒事务,即使该事务的直接前导者可能尚未提交。在被唤 醒之后,系统检查以査看对于该事务而言真正提交是否适当。如果是,则 提交该事务。该过程在结束点282处结束。
图5示出了在使用提交仲裁器来强制实施对多个事务的总体排序时所 涉及的各阶段的一个实现。在一种形式中,图5的过程至少部分地在计算 设备100的操作逻辑中实现。该过程在起始点290处开始,在那里提供可 操作来允许为多个事务指定预定总体排序的一个或多个提交仲裁器(例如, 指定应提交多个事务的确切次序的提交仲裁器)(阶段292)。当多个事务 中的一特定事务到达其提交点时,为了强制实施提交次序,将该特定事务 的提交次序与提交仲裁器的下一个提交字段进行比较(阶段296)。在一个 实现中,如果系统确定总体排序的强制实施不是必要的(例如,诸如因为 肯定不存在冲突),则可在适当时违反总体排序要求(阶段294),然后该 过程在结束点302处结束。
如果要强制实施提交排序,并且如果该特定事务的提交次序具有与提 交仲裁器的下一个提交字段相同的值(判定点296),则提交该特定事务, 并且如果提交成功,则递增该下一个提交字段并唤醒下一后继者(如果有 的话)(阶段298)。如果该特定事务的提交次序不具有与提交仲裁器的下 一个提交字段相同的值(判定点296),则将该特定事务置于挂起/休眠模 式中直到其在前导事务提交后的稍后时刻被唤醒(阶段300)。在一个实现 中,在稍后时刻,如果与前导者发生冲突,则可要求该特定事务中止并回 退以使得前导者可向前进。否则,如果未发生这样的冲突,则一旦满足此 处所描述的提交次序要求,该特定事务就应能够提交。该过程在结束点302 处结束。
图6示出了在使用提交仲裁器来强制实施对多个事务的部分排序时所 涉及的各阶段的一个实现。在一种形式中,图6的过程至少部分地在计算 设备IOO的操作逻辑中实现。该过程在起始点310处开始,在那里提供可 操作来允许为多个事务指定预定部分排序的一个或多个提交仲裁器(例如, 指定应提交多个事务的多个可接受次序(例如,以有向图的形式)的提交 仲裁器)(阶段312)。当该多个事务中的一特定事务到达其提交点时,为
13了强制实施提交次序,参考前导事务的状态(例如, 一个或多个排序值) 来寻找特定提交事务(例如,由提交仲裁器来跟踪的)(阶段314)。如果
该特定事务的所有前导者都已提交(判定点316),则提交该特定事务(阶 段318)。如果提交成功,则在适当时更新由提交仲裁器跟踪的一个或多个 值,并且唤醒所有可能的下一后继者(如果有的话)(阶段318)。
如果该特定事务的所有前导者尚未提交(判定点316),则将该特定 事务置于挂起/休眠模式中直到其在前导事务提交后的稍后时刻被唤醒(阶 段320)。该过程在结束点322处结束。
图7示出了在提供使用预定提交次序信息来管理冲突的争用管理过程 时所涉及的各阶段的一个实现。在一种形式中,图7的过程至少部分地在 计算设备100的操作逻辑中实现。该过程在起始点340处开始,在那里提 供支持用于一个或多个事务组的预定提交次序的事务存储器系统(阶段 342)。提供当在第一事务和第二事务之间发生冲突时调用的争用管理过程 (阶段344)。在争用管理过程中使用预定提交次序来帮助确定第一事务还 是第二事务应当赢得冲突并被允许继续(阶段346)。如果第一事务和第二 事务不是同一事务组的一部分(判定点348),则在这两个事务之间不强制 实施预定提交次序(因为不存在冲突)(阶段350)。在这种情况下,因为 这两个事务不在同一事务组中,所以不使用排序因素来帮助解决冲突(阶 段350)。
如果第一事务和第二事务是同一事务组的一部分(判定点348),则 系统将第一事务的第一序号与第二事务的第二序号进行比较(阶段352)。 允许具有较低序号的事务继续(或用另一合适的优先级排序)(阶段354)。
该过程在结束点356处结束。
图8示出了在提供使用预定提交次序信息来管理关于嵌套事务的冲突 的争用管理过程时所涉及的各阶段的一个实现。在一种形式中,图8的过 程至少部分地在计算设备100的操作逻辑中实现。在一个实现中,在提交 每一个事务之前对于该特定事务考虑整个先辈链,以便强制实施存在于该 链中的任何排序。该过程在起始点370处开始,在那里提供当在第一事务 和第二事务之间发生冲突时调用的争用管理过程(阶段372)。在争用管理过程中使用预定提交次序来帮助确定第一事务还是第二事务应当赢得冲突
并被允许继续(阶段374)。如果第一和第二事务不是同一事务组的一部分 (判定点376),则在这两个事务之间不强制实施预定提交次序(因为不存 在冲突)(阶段378)并且该过程在结束点388处结束。如果第一和第二事 务是同一事务组的一部分(判定点376),则系统检査以查看是否涉及嵌套 事务(判定点380)。
如果不涉及嵌套事务(判定点380),则将第一事务的序号(或其它 排序指示符)与第二事务的序号(或其它排序指示符)进行比较(阶段384)。 允许具有较低序号的事务继续(或者通过使用其它合适的排序准则被确定 为按次序的下一个的事务)(阶段386)。
如果涉及嵌套事务(判定点380),则将第一事务的顶层先辈的序号 (或其它排序指示符)与第二事务的顶层先辈的序号(或其它排序指示符) 进行比较(阶段382)。此处所使用的术语"顶层先辈"在涉及公共先辈的 情况下旨在包括公共先辈的直接子事务,而在不涉及公共先辈的情况下旨 在包括每一个事务的顶层先辈。涉及公共和非公共先辈的这些情况在图9 和IO中更详细地示出。允许具有较低序号的事务继续(例如,与具有较低 序号的先辈相关的事务或其它合适的准则)(阶段386)。该过程在结束点 388处结束。
图9是示出顶层先辈具有公共先辈的示例性先辈树的逻辑图。在所示 示例中,事务A是D和E的公共先辈。当在D和E之间发生冲突时,分 析事务B和C (公共先辈A的直接子事务)的序号以确定哪个事务,艮P, 是D还是E应被允许继续(图8中的阶段382)。
图10是示出顶层先辈不具有公共先辈的示例性先辈树的逻辑图。在所 示示例中,事务A是事务C的先辈。事务D是事务F的先辈。当在事务C 和F之间发生冲突时,则将事务A和D (各自的顶层先辈)的序号进行比 较以确定哪个事务,即,是C还是F应被允许继续(图8中的阶段382)。
图11示出了在事务存储器系统中通过使用提交仲裁器来减少浪费的 工作量时所涉及的各阶段的一个实现。在一种形式中,图11的过程至少部 分地在计算设备100的操作逻辑中实现。该过程在起始点400处开始,在那里为事务存储器系统提供一个或多个提交仲裁器,该提交仲裁器可操作
来允许为多个事务指定预定提交次序(阶段402)。提交仲裁器可操作来将
事务置于休眠/挂起模式中以便阻塞该事务在前导事务仍在执行时重新执行
(例如,通过分析预定提交次序来确定正确次序)(阶段404)。提交仲裁器还可操作来一旦前导事务完成则唤醒被置于挂起模式的事务(例如,通过再次分析预定提交次序来确定正确次序)(阶段406)。通过提供这些阻塞和唤醒机制,提交仲裁器通过阻止将在稍后不得不撤销的操作的执行而帮助减少浪费的工作量(阶段408)。该过程在结束点410处结束。
图12示出了在争用管理过程中分析整个先辈链以确定适当的冲突解决方案时所涉及的各阶段的一个实现。在一种形式中,图12的过程至少部分地在计算设备IOO的操作逻辑中实现。该过程在起始点430处开始,在那里提供当在第一事务和第二事务之间发生冲突时调用的争用管理过程(阶段432)。在争用管理过程中使用预定提交次序来帮助确定第一事务还是第二事务应当赢得冲突并被允许继续(阶段434)。分析预定提交次序的整个先辈链以帮助确定适当的冲突管理(阶段436)。例如,如果存在四个事务,两个父事务和两个子事务,其中B嵌套在A中而D嵌套在C中。假设在A和C之间存在A应在C之前提交的排序关系。如果B和D冲突,则争用管理过程应偏向B,因为在给定A必须在C之前提交的情况下偏向D是无用的(阶段436)。该过程在结束点438处结束。
现在转向图13并继续参考图1,示出了在计算设备IOO上操作的具有并行循环支持的事务存储器应用程序500。在一个实现中,具有并行循环支持的事务存储器应用程序500是驻留在计算设备100上的应用程序之一。然而,可以理解,具有并行循环支持的事务存储器应用程序500可另选地或另外地被具体化为一个或多个计算机上的计算机可执行指令和/或与图1所示的不同的变型。另选地或另外地,具有并行循环支持的事务存储器应用程序500的一个或多个部分可以是系统存储器104的一部分、可以在其它计算机和/或应用程序115上、或可以是计算机软件领域的技术人员能想到的其它此类变型。
具有并行循环支持的事务存储器应用程序500包括负责执行在此描述
16的技术中的一些或全部的程序逻辑504。程序逻辑504包括用于提供事务存储器系统的逻辑506;用于将包含原始顺序循环的第一部分代码转换成包含
使用事务来保留原始的输入到输出映射并提高安全性的并行循环的第二部
分代码的逻辑508;用于将原始顺序循环的迭代中的一个或多个置于并行循
环中的各事务中的单独事务中的逻辑510;用于通过使用与原始顺序循环的
执行次序相一致的预定提交次序来提交事务以保留原始的输入到输出映射
的逻辑512;用于在原始顺序循环包含修改数据的操作的情况下使用提交仲裁器来检测并处理并行循环中的冲突的逻辑514;用于在不执行对原始顺序循环的编译器分析的情况下生成第二部分代码的逻辑515;用于在确定原始
顺序循环对重新排序(使用试探法、第一部分代码中的用户定义的注释等)免疫的情况下以允许各事务按不取决于原始顺序循环的执行次序的次序来
提交的方式来创建第二部分代码的逻辑516;用于生成第二部分代码以便并行地执行事务中的至少某一些的逻辑517;用于以各单独事务中的至少某一
些在不同的线程上执行的状态来使用事务存储器系统来执行第二部分代码
的逻辑518;以及用于操作该应用程序的其它逻辑520。在一个实现中,程序逻辑504可操作来通过编程,如使用对程序逻辑504中的过程的单一调
用而从另一程序调用。
现在转向图14,示出在将原始顺序循环转换成并行循环时所涉及的高级阶段的一个实现。在一种形式中,图14的过程至少部分地在计算设备100的操作逻辑中实现。该过程在起始点550处开始,在那里通过取原始顺序循环的每一迭代并生成遵循预定提交次序过程的单独事务(例如,包括相应的工作项),来将顺序循环转换成并行循环,从而尊重与原始顺序循环的原始执行相一致的提交次序(阶段552)。在另一实现中,在认为每一迭代创建一个事务代价过大的情况下,可以将邻接的迭代带(例如相邻的迭代) 一起分组在一事务中(阶段552)。系统在不执行对原始顺序循环的编译器分析的情况下生成并行循环(阶段554)。随后执行并行循环,其中各单独事务中的至少某一些被分配到不同的线程以使它们并行执行(阶段556)。该过程在结束点558处结束。
图15示出在使用预定提交次序过程来确保并行循环中的事务以正确次序提交时所涉及的各阶段的一个实现。在一种形式中,图15的过程至少部分地在计算设备100的操作逻辑中实现。该过程在起始点570处开始,
在那里将原始顺序循环转换成遵循预定提交次序过程的并行循环(阶段
572)。系统向并行循环中的每一事务分配提交序号(或使用跟踪提交事务的次序的另一合适的方式)(阶段574)。在执行并行循环时,系统使用预定提交次序过程来确保每一相应事务只可以在并行循环的在前迭代成功完成之后才能完成(例如,使事务等待直到其提交次序揭示它可以提交)(阶段576)。该过程在结束点578处结束。
图16示出在使用提交仲裁器来检测并处理在执行并行循环时所发生的冲突时所涉及的各阶段的一个实现。在一种形式中,图16的过程至少部分地在计算设备100的操作逻辑中实现。该过程在起始点600处开始,在那里将原始顺序循环转换成使用预定提交次序过程来确保正确排序的并行循环(阶段602)。系统执行并行循环(阶段604)。系统随后检测并行循环包含超过一个将修改同一数据元素(例如,因为缺少线程安全性,因为排序要求等)的单独事务(例如,循环迭代)(阶段606)。使用提交仲裁器来检测并处理在执行并行循环时所发生的冲突,如通过检测后续事务的乱序执行并且一旦前导事务完成则安排后续事务的重新执行(阶段608)。该过程在结束点610处结束。
图17示出在检测并处理在执行并行循环时所发生的未经处理的异常时所涉及的各阶段的一个实现。在一种形式中,图17的过程至少部分地在计算设备100的操作逻辑中实现。该过程在起始点630处开始,在那里将原始顺序循环转换成使用事务来保留原始的输入到输出映射并提高安全性的并行循环(阶段632)。系统执行并行循环(阶段634)并检测在执行并行循环时特定事务中所发生的未经处理的异常(阶段636)。提交特定事务以及该特定事务的任何前导事务所作出的状态修改(阶段638)。通过回退它们的事务来丢弃任何后续事务对该特定事务所作出的推测性状态修改(阶段640)。该过程在结束点642处结束。
图18A-18B示出从原始顺序循环到并行循环的示例性转换的假想源代码。尽管图18A示出包含"for...each"循环652的原始顺序循环650,但可以理解,也可以使用其它形式的循环构造。对于该循环中的每一迭代,
执行一个或多个语句654。图18B示出在使用此处讨论的技术中的某一种将顺序循环转换成并行循环660之后其看来如何的假想示例。在所示示例中,通过对原始顺序循环664的每一迭代生成单独事务来创建并行循环。在另一实现中,在认为每一迭代创建一个事务代价过大的情况下,可以将邻接的迭代带(例如相邻的迭代) 一起分组在一事务中。每一单独事务随后创建新工作项以执行作为原始循环中的语句667来包括的工作。可使用单独的类662来声明工作项迭代。随后将各单独事务分配到不同的线程以使它们可以并行执行。
图19示出将封闭顺序循环转换成并行循环时所涉及的各阶段的一个实现。在一种形式中,图19的过程至少部分地在计算设备100的操作逻辑中实现。该过程在起始点670处开始,在那里提供事务存储器系统(阶段672)。系统分析包含原始顺序循环的第一部分代码以确定原始顺序循环将执行的固定迭代次数(例如,通过检索用于确定循环终点的常数值)(阶段674)。将包含原始顺序循环的第一部分代码转换成包含可以生成等于固定迭代次数的事务的并行循环的第二部分代码(阶段674)。系统使用事务存储器系统来执行第二部分代码,其中将这些事务中的至少某一些分配到不同的线程以使它们可以并行执行(阶段678)。系统使用预定提交次序过程来以正确次序提交事务(例如,其中每一事务使用相应的归纳变量计数器作为提交顺序号)(阶段680)。该过程在结束点682处结束。
在一个实现中,图19中描述的事务过程只用于在循环主体本身中从不对归纳变量进行写入的循环。换言之,可通过在循环主体中对归纳变量进行写入或通过取归纳变量的地址并对其进行可导致写如的某些操作(将其传递给函数、生成它的别名、等等)来使循环无法执行。
图20示出使用推测流水线来将开放顺序循环转换成并行循环时所涉及的各阶段的一个实现。在一种形式中,图20的过程至少部分地在计算设备100的操作逻辑中实现。该过程在起始点700处开始,在那里提供事务存储器系统(阶段702)。系统将包含开放顺序循环的第一部分代码转换成包含可操作来生成单独事务的并行循环的第二部分代码(例如,使得至少某些事务并行执行),其中该单独事务包含推测流水线的每一迭代的相应工作项(阶段704)。在不执行对开放顺序循环的编译器分析的情况下生成
第二部分代码(阶段706)。系统使用事务存储器系统来执行第二部分代码,
其中将这些单独事务中的至少某一些分配到不同的线程以使它们并行执行
(阶段708)。通过以预定提交次序(例如,与开放顺序循环的执行次序相一致)提交事务来保留原始的输入到输出映射(阶段710)。该过程在结束点712处结束。
图21示出在执行从开放顺序循环生成的并行循环时所涉及的各阶段的一个实现。在一种形式中,图21的过程至少部分地在计算设备100的操作逻辑中实现。该过程在起始点730处开始,在那里生成估计要在从开放顺序循环(例如,"while"循环、"do while"循环、"for"循环等)生成的并行循环中执行的迭代次数的推测流水线(阶段732)。在一个实现中,系统取推测流水线的每一迭代并生成包含相应工作项的单独事务(阶段
734) 。在另一实现中,如在认为每一迭代创建一个事务代价过大的情况下,系统取邻接的迭代带(例如相邻的迭代)并将它们一起分组在一事务中(阶段734)。系统将各单独事务分配到不同的线程以使它们并行执行(阶段
735) 。系统对每一相应工作项评估终止条件(阶段736)。在相应工作项中的特定一个确定到达了终止并行循环的时间时,提交前导事务并丢弃后续事务(阶段738)。该过程在结束点740处结束。
图22示出在确保从开放顺序循环生成的并行循环中的每一工作项都以正确次序提交时所涉及的各阶段的一个实现。在一种形式中,图22的过程至少部分地在计算设备100的操作逻辑中实现。该过程在起始点760处开始,在那里当相应事务中的每一相应工作项执行时检索当前迭代值(阶段762)。在一个实现中,当前迭代值是通过对可由每一相应工作项访问的值执行原子递增来检索的(阶段762)。系统使用每一相应工作项的当前迭代值作为预定提交次序过程中的提交顺序号(阶段764)。系统实现与开放顺序循环的原始执行相一致的提交次序(阶段766)。该过程在结束点768处结束。
图23示出在计算推测流水线以确定并行循环中要包括多少循环时所
20涉及的各阶段的一个实现。在一种形式中,图23的过程至少部分地在计算
设备100的操作逻辑中实现。该过程在起始点790处开始,在那里系统至 少部分地基于执行并行循环的计算机上的可用处理器的数量来生成推测流 水线的初始值(阶段792)。在一个实现中,推测流水线的初始值是基于处 理器的数量除以工作负载花费在进行绑定CPU (CPU-bound)的工作的时 间百分比来计算的(阶段792)。也可使用多种其它计算。使用初始值来确 定要为并行循环的特定执行创建并行循环的多少迭代(阶段794)。系统可 以使用自适应统计量来调整推测流水线以供并行循环的稍后执行(例如使 用历史来更好地确定循环的预期持续时间,自适应地调整何时阻塞工作项, 等等)(阶段796)。该过程在结束点798处结束。
图24A-24B示出从原始开放顺序循环到并行循环的示例性转换的假想 源代码。术语"开放顺序循环"旨在包括其迭代次数未知的顺序循环。如 图24A所示,示出了原始开放顺序循环810。该循环是在条件为真时(例 如,在所示示例中在P二true (真)时)执行某些语句的"while"循环。图 24B示出原始开放顺序循环如何被转换成并行循环820。如在图24B的假 想代码中所示,对于推测流水线的每一迭代,生成可以并行运行的工作项。 在一个实现中,可以针对这一点来使用标准工作窃用队列。称为 currentlteration (当前迭代)的共享变量可由每一工作项访问。在每一工作 项执行时,其对currentlteration执行原子递增,如通过标准比较并交换硬件 指令或另一机制,来读取其自己的迭代值。这确保任何一个迭代只由单个 工作者处理并且可以确定事务开始执行循环的各迭代中的一个的次序。这 随后成为事务的提交顺序号,并确保该迭代能以正确次序在前导事务和后 续事务之间串行。每一工作项在该工作之前或之后评估P或适用的任何其 它终止条件,视循环构造而定(例如在图24B所示的"while"的情况中是 之前,但在"do-while"的情况中是"之后")。在工作者中的一个认识到 到达了终止时间时,所有前导事务必须提交并且随后所有后续事务必须丢 弃。
尽管此处所讨论的各示例探讨了使用各种技术和方法来强制实施提交 排序,但应当注意,事务可能根本不具有提交仲裁器。在事务不具有提交仲裁器的情况下,普通的无序提交将会发生。
尽管用对结构特征和/或方法动作专用的语言描述了本主题,但可以理 解,所附权利要求书中定义的主题不必限于上述具体特征或动作。相反, 上述具体特征和动作是作为实现权利要求的示例形式公开的。落入在此所 述和/或所附权利要求所描述的实现的精神的范围内的所有等效方案、更改 和修正都期望受到保护。
例如,计算机软件领域普通技术人员会认识到在此讨论的示例中所述 的客户机和/或服务器布置、用户界面屏幕内容、和/或数据布局可在一台或 多台计算机上不同地组织,以包括比示例中所描绘的更少或更多的选项或特征。
权利要求
1.一种具有用于使得计算机执行以下步骤的计算机可执行指令的计算机可读介质,所述步骤包括提供事务存储器系统(506);将包含原始顺序循环的第一部分代码转换成包含使用多个事务来保留原始的输入到输出映射的并行循环的第二部分代码(508);以及使用所述事务存储器系统执行所述第二部分代码,其中所述多个事务中的至少某一些在不同的线程上执行(518)。
2. 如权利要求1所述的计算机可读介质,其特征在于,所述原始顺序 循环中的每一迭代被置于所述并行循环中的各事务中的一单独事务中的工 作项中(510)。
3. 如权利要求1所述的计算机可读介质,其特征在于,所述原始顺序 循环中的相邻迭代带被置于所述并行循环中的各事务中的一单独事务中的 工作项中(552)。
4. 如权利要求1所述的计算机可读介质,其特征在于,生成所述第二 部分代码以使所述事务中的至少某一些并行执行(517)。
5. 如权利要求1所述的计算机可读介质,其特征在于,在不执行对所 述原始顺序循环的编译器分析的情况下生成所述第二部分代码(554)。
6. 如权利要求1所述的计算机可读介质,其特征在于,通过以预定提 交次序提交所述事务来保留所述原始的输入到输出映射(632)。
7. 如权利要求6所述的计算机可读介质,其特征在于,所述预定提交 次序与所述原始顺序循环的执行次序相一致(552)。
8. 如权利要求1所述的计算机可读介质,其特征在于,如果所述原始 顺序循环包含修改数据的操作,则使用提交仲裁器来检测并处理所述并行 循环中的冲突(608)。
9. 如权利要求1所述的计算机可读介质,其特征在于,如果确定所述 原始顺序循环对重新排序免疫,则以允许所述事务中的每一个按不取决于 所述原始顺序循环的执行次序的次序来提交的方式来创建所述第二部分代 码(516)。
10. 如权利要求9所述的计算机可读介质,其特征在于,所述对重新排序的免疫性是使用试探法来确定的(516)。
11. 如权利要求9所述的计算机可读介质,其特征在于,所述对重新 排序的免疫性是在分析所述第一部分代码中的用户定义的注释之后确定的(516)。
12. —种用于将原始顺序循环转换成并行循环的方法,所述方法包括 以下步骤通过取原始顺序循环的每一迭代并生成遵循预定提交次序过程的单独 事务来将所述原始顺序循环转换成并行循环,从而尊重与该原始顺序循环的原始执行相一致的提交次序(552);以及执行所述并行循环,其中所述单独事务中的至少某一些在不同的线程 上执行(556)。
13. 如权利要求12所述的方法,其特征在于,所述并行循环是在不 执行对所述原始顺序循环的编译器分析的情况下生成的(554)。
14. 如权利要求12所述的方法,其特征在于,如果检测到所述并行 循环包含超过一个将修改同一数据元素的单独事务(606),则使用提交仲 裁器来检测并处理在所述并行循环执行时所发生的冲突(608)。
15. 如权利要求12所述的方法,其特征在于,为所述原始顺序循环 的每一迭代生成的所述单独事务包括相应工作项(552)。
16. 如权利要求12所述的方法,其特征在于,所述预定提交次序过 程确保每一相应事务只有在所述并行循环的前导迭代成功完成之后才能完 成(576)。
17. 如权利要求12所述的方法,其特征在于,所述预定提交次序过 程向所述单独事务中的每一个分配提交序号(574)。
18. —种具有用于使得计算机执行如权利要求12所述的步骤的计算 机可执行指令的计算机可读介质(500)。
19. 一种用于适当地处理在从原始顺序循环生成的并行循环中所发 生的异常的方法,所述方法包括以下步骤将原始顺序循环转换成使用事务来保留原始的输入到输出映射的并行循环(632);执行所述并行循环,其中所述事务中的至少某一些在分开的线程上执行(634);在所述并行循环执行时检测在特定事务中发生的未经处理的异常(636);提交所述特定事务以及该特定事务的任何前导事务所作出的状态修改(638);以及丢弃所述特定事务的任何后续事务所作出的状态修改(640)。
20.—种具有用于使得计算机执行如权利要求19所述的步骤的计算 机可执行指令的计算机可读介质(500)。
全文摘要
公开了用于将顺序循环转换成并行循环以与事务存储器系统一起使用的各种技术和方法。提供了一种事务存储器系统。将包含原始顺序循环的第一部分代码转换成包含使用事务来保留原始的输入到输出映射的并行循环的第二部分代码。例如,可以通过取原始顺序循环的每一迭代并生成遵循预定提交次序过程的单独事务来将原始顺序循环转换成并行循环。各单独事务中的至少某一些在不同的线程中执行。当在执行并行循环时检测到在特定事务中发生了未经处理的异常时,则提交该特定事务和前导事务所作出的状态修改并丢弃后续事务所作出的状态修改。
文档编号G06F9/46GK101681272SQ200880018922
公开日2010年3月24日 申请日期2008年5月30日 优先权日2007年6月4日
发明者J·J·达菲, J·格雷, Y·莱瓦诺尼 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1