当前位置: 首页 > 专利查询>微软公司专利>正文

软件事务性存储器操作的优化制造技术

技术编号:5760831 阅读:205 留言:0更新日期:2012-04-11 18:40
描述了对软件事务性存储器指令执行优化以实现高效性能的软件事务性存储器系统。软件事务性存储器块由软件事务性存储器指令来替换,这些指令随后被分解成分解的软件事务性存储器指令。分解的指令允许了解指令语义的编译器执行在传统的事务性存储器系统上不可用的优化。执行高级软件事务性存储器优化,诸如过程调用周围的代码移动、添加提供强原子性的操作、移除不必要的读取-更新升级、以及移除对新分配的对象的操作。

【技术实现步骤摘要】
【国外来华专利技术】软件事务性存储器操作的优化的制作方法软件事务性存储器操作的优化 相关申请的交叉引用本申请要求2006年3月23日提交的美国专利申请第11/389,451号的优先 权,后者要求2005年12月7日提交的美国临时申请第60/748,386号的优先权。背景多线程进程的多个线程在并发执行期间共享公共存储器是常见的。因此, 多线程化进程的两个不同线程必须读取和更新可由程序访问的同一存储器位 置。然而,必须小心确保当一个线程正处于依赖于共享存储器位置的值的操纵 序列中间时另 一个线程不会修改该值。例如,假定一程序正在访问两个不同软件对象的内容,其中每一对象表示 一不同银行帐户中的金钱数额。最初,第一帐户的数额是$10,其存储在存储 器地址A1处,而第二帐户的数额是$200,其存储在存储器地址A2处。银行 程序的第一线程被编码为将$100从A2转移到Al,而第二线程被编码为计算 两个帐户中的资金的总额。第一线程可通过向Al的内容增加$100而开始,从 而将其更新为$110,然后继续从A2的内容中减去S100,从而将其更新为$100。 然而,如果第二线程在这两个操作之间执行,则第二线程可对这两个帐户计算 出不正确的总额$310而非正确的总额$210。软件事务性存储器提供了一编程抽象,通过该编程抽象,线程可安全地执 行一系列共享存储器访问,从而允许线程在没有来自另一线程的干扰的情况下 完成其事务。因此,事务性存储器可在软件中用于确保包括第一线程的示例性 加法和减法操作的事务关于存储器位置Al和A2是原子的,且因此第二 线程将计算两个帐户的正确的总额。然而,用于以软件来实现事务性存储器的现有方法遭受到性能问题。例如, 在一种现有方法中,当一线程在一事务内访问一系列存储器位置时,该线程维 护它希望在该事务期间读取和更新(即,写入)的存储器位置和值的单独列表,然后在该事务结束时,该线程更新实际共享存储器位置处的所有这些值。如果 在该事务期间,该线程希望重新读取或重新写入其列表中的任何存储器位置, 则该线程必须在列表中搜索该存储器位置的条目以访问该条目,这在程序上是 很慢的事情。因此,这一用软件实现事务性存储器的间接方法遭受较差的性能。 另外,用软件实现事务性存储器的现有方法引入了大量的开销,包括对事 务性存储器和记录保持指令的不必要的调用,导致程序的执行受损,尤其是在 这些指令以低效的方式执行的情况下。另外,某些事务性存储器方案中固有的 记录保持活动不能有效地限制它们所创建的记录的创建和维护,这会浪费存储 器以及盘空间和其它系统资源。概述描述了一种软件事务性存储器系统(STM)。此处所描述的系统和技 术对软件事务性存储器指令执行优化以达到高效的性能。描述了一种编译器, 它用软件事务性存储器指令来替换软件事务性存储器块,并且进一步将这些指 令分解成分解的软件事务性存储器指令。该编译器利用关于指令语义的知识来 执行在传统的软件事务性存储器系统上不可得的优化。该编译器另外对STM 代码执行高级优化。执行这些优化中的某一些以便利用较低级优化。这些高级 优化包括不必要的读一更新升级的移除、过程调用周围的STM操作的移动、 以及对新分配的对象的不必要的操作的移除。另外,优化STM代码以便为在 事务外部写的存储器访问提供强原子性。在一个示例中,在包括处理单元和用关于软件事务性存储器操作的知识来 配置的编译器的计算机系统中描述了一种编译包括软件事务性存储器块的方 法。该方法包括优化程序以创建包含软件事务性存储器指令的经优化的程序, 以及编译该经优化的程序。提供本概述以便用简化的形式介绍将在以下详细描述中进一步描述的一 些概念。本概述并不旨在确定所要求保护的主题的关键特征或必要特征,也不 旨在用于帮助确定所要求保护的主题的范围。参考附图,从以下各实施例的详细描述中,将清楚其它特征和优点。附图简述附图说明图1是用于编译构成原子存储器事务块的源代码的编译器的框图。 图2是图1的编译器的组件的框图。图3是示出使用事务性存储器来编译和执行程序的示例进程的流程图。 图4是示出由图1的编译器执行的用于用事务性存储器来编译程序的示例 进程的流程图。图5是示出由图1的编译器执行的用于执行高级软件事务性存储器优化的示例进程的流程图。图6是示出由图1的编译器执行的用于在编译期间优化分解的软件事务性存储器指令的示例进程的流程图。图7是示出由图1的编译器执行的用于引入实现强原子性的操作的示例进 程的流程图。图8是示出由图1的编译器执行的用于移除读一更新升级的示例过程的流 程图。图9是示出由图1的编译器执行的用于移除读一更新升级的另一示例进程 的流程图。图IO是示出由图1的编译器执行的用于移动过程调用周围的操作的示例 进程的流程图。图11是示出由图1的编译器执行的用于移除对新分配的对象的日志记录操作的示例进程的流程图。图12是示出由图1的编译器执行的用于移除对新分配的对象的日志记录操作的另一示例进程的流程图。图13是包括在软件事务性存储器系统的运行时环境中在运行时期间使用的软件模块的框图。图14a和14b是示出使用多用途首部字的示例性对象的框图。图15a和15b是示出具有改变的快照的示例性对象的框图。图16是示出图6的运行时环境的用于使用快照来确定对象的示例进程的流程图。图17是示出图6的运行时环境的用于使用扩大的首部字来修改对象的快照的示例进程的流程图。图18a和18b是示出事务执行的示例的框图。 图19a-19c是示出事务执行的其它示例的框图。图20是示出在图6的运行时环境中用于日志过滤的示例结合表的框图。图21是示出图6的运行时环境的用于使用图13的结合表来过滤日志条目 的示例进程的流程图。图22是示出图6的运行时环境的用于使用图13的结合表来过滤日志条目 的另一示例进程的流程图。图23是示出图6的运行时环境所执行的用于在无用信息收集期间压縮日 志的示例进程的流程图。图24是示出图6的运行时环境所执行的用于在无用信息收集期间压縮日 志的另一示例进程的流程图。图25是示出图6的运行时环境所执行的用于在无用信息收集期间压缩日 志的又一示例进程的流程图。图26是用于实现此处的技术的合适的计算环境的框图。详细描述此处所示的示例描述了基于软件和硬件的事务性存储器系统,以及对这些 系统的性能改进。具体地,以下的实现示例描述了分解的软件事务操作;使 用编译器中间表示(IR)中的STM原语来允许代码优化(其术语在以下 解释);用于改进这些原语的性能的编译器改进;使用结合表的运行时日志过 滤;以及高效的运行时按对象操作。尽管此处所提供的描述是作为对特定软件 事务性存储器操作实现的优化来提供的,但是可以认识到,此处所描述的技术 和系统可对各种实现操作,并且不一定暗示对此处所描述的技术的实现、性能 或要求的任何限制。1.软件事务性存储器系统的示例原子块提供了对编写并发程序的问题的有希望的简化。在此处所描述的系 统中, 一代码块被标记为原子的,并且编译器和运行时系统在该块内提供那些表现为原子的操作,包括函数调用。程序员不再需要担心手动锁定、低级竞争 条件或死锁。原子块也可提供异常恢复,由此如果异常终止一个块,则该块的 副作用被回退。这甚至在单线程化应用中也是有价值的出错本文档来自技高网...

【技术保护点】
一种计算机系统中的方法,所述计算机系统包括处理单元和编译器,所述编译器是用关于软件事务性存储器操作的知识来配置的,所述方法被执行来编译程序,所述程序包括软件事务性存储器块,所述方法包括: 优化(460)所述程序以创建包含软件事务性存储 器指令的经优化的程序;以及 编译(340)所述经优化的程序。

【技术特征摘要】
【国外来华专利技术】US 2005-12-7 60/748,386;US 2006-3-23 11/389,4511.一种计算机系统中的方法,所述计算机系统包括处理单元和编译器,所述编译器是用关于软件事务性存储器操作的知识来配置的,所述方法被执行来编译程序,所述程序包括软件事务性存储器块,所述方法包括优化(460)所述程序以创建包含软件事务性存储器指令的经优化的程序;以及编译(340)所述经优化的程序。2. 如权利要求1所述的方法,其特征在于,优化所述程序包括将直接访问软件事务性存储器指令在所述软件事务性存储器块处插入到所述程序中;以及对包括所述软件事务性存储器指令的所述程序执行优化,以创建一经优化的程序,使得所述优化的至少某一些被配置成特别地对所述直接访问软件事务性存储器指令操作。3. 如权利要求2所述的方法,其特征在于,执行优化包括执行公共子表达式消除过程,该过程被修改为对分解的软件事务性存储器指令操作。4. 如权利要求3所述的方法,其特征在于,所述公共子表达式消除过程被修改成使得打开一对象来读取的指令在所述同一事务内的打开一对象来更新的指令之后被消除。5. 如权利要求3所述的方法,其特征在于,所述公共子表达式消除过程被修改成使得一事务内对从存储器地址的冗余读和写以及对存储器地址的冗余日志被移除。6. 如权利要求5所述的方法,其特征在于,所述公共子表达式消除过程还被修改成使得如果第一事务中的读和写被第二事务中的读和写变得冗余,则消除所述第一事务中的读和写,其中所述第一事务嵌套在所述第二事务内。7. 如权利要求2所述的方法,其特征在于,执行优化包括执行代码运动优化。8. 如权利要求2所述的方法,其特征在于,执行优化包括用确保对一存储器事务外部的对象的事务性存储器访问与访问该对象的至少一个非事务性存储器操作之间的原子性的一个或多个事务性存储器操作来扩充所述至少一个非事务性存储器操作。9. 如权利要求8所述的方法,其特征在于,扩充非事务性存储器操作包括在所述非事务性存储器操作之前插入一打开操作,所述打开操作打开所述对象以供所述非事务性存储器操作访问;以及在所述非事务性存储器操作之后插入一提交操作,所述提交操作确定在所述非事务性存储器操作的执行期间是否有对所述对象的冲突访问。10. 如权利要求9所述的方法,其特征在于-所述非事务性存储器操作是读取操作;所述打开操作被配置成在所述非事务性存储器操作的执行之前检索所述对象的状态的指示;以及所述提交操作被配置成在所述非事务性存储器操作的执行之后检索所述对象的状态的指示;以及如果所述对象的状态指示冲突的访问,则使得所述打开、读取和提交操作循环,直到读取变为可能。11. 如权利要求9所述的方法,其特征在于所述非事务性存储器操作是写入操作;所述打开操作被配置成获得对所述对象的写访问;以及所述提交操作被配置成提交对所述对象所作的写入。12. 如权利要求9所述的方法,其特征在于,所述打开和提交命令利用了所述对象的同步来确保所述非事务性存储器操作原子地执行。13. 如权利要求9所述的方法,其特征在于,所述打开命令阻断,直到它能够打开所述对象来访问。14. 如权利要求8所述的方法,其特征在于,还包括标识访问存储器事务外部的对象的一个或多个存储器操作。15. 如权利要求14所述的方法,其特征在于,标识一个或多个存储器操作包括分析事务性存储器访问以确定可在所述软件的执行期间被事务性存储器操作访问的字段;标识访问可被事务性存储器操作访问的字段的一个或多个非事务性存储器操作。16. 如权利要求15所述的方法,其特征在于,对确保不被事务性存储器操作访问的任何字段,避免对访问该字段的非事务性存储器操作的扩充。17. 如权利要求16所述的方法,其特征在于,用一个或多个事务性存储器操作来扩充访问存储器事务外部的对象的非事务性存储器操作包括在所述非事务性存储器操作周围插入原子存储器事务块。18. 如权利要求2所述的方法,其特征在于,执行优化包括在一组程序点处标识对总是绑定到事务中新分配的对象的对象的引用;以及防止对象上的软件事务性存储器操作通过所标识的弓I用到达,其中所述操作在所述事务外部没有效果。19. 如权利要求18所述的方法,其特征在于,在一组程序点处标识对总是绑定到新分配的对象的对象的引用跨过程调用而发生。20. 如权利要求19所述的方法,其特征在于,在一组程序点处标识对总是绑定到新分配的对象的对象的引用包括对所述程序执行前向数据流分析。21. 如权利要求20所述的方法,其特征在于,所述前向数据流分析包括对每一基本块维护一数据结构,所述数据结构表示,在所述基本块中的一位置处,对所述基本块中的每一变量,如果所述变量或者已知为总是被赋值给新分配的对象,则所述变量可能被赋值给在所述事务外部分配的对象,或者对所述变量信息是未知的。22. 如权利要求21所述的方法,其特征在于,所述数据结构包括从每一引用到对每一引用保持的数据的映射,其中对每一引用保持的数据包括包含一点阵值和引用之间的依赖性的可更新单元。23. 如权利要求22所述的方法,其特征在于,维护所述数据结构包括使用所述引用之间...

【专利技术属性】
技术研发人员:TL哈里斯MR佩里斯科AE肖纳DR小泰迪蒂
申请(专利权)人:微软公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1