用于将在多线程上工作的程序的程序代码变换为锁冲突少的程序代码的方法及其计算机程序和计算机系统技术方案

技术编号:7127733 阅读:257 留言:0更新日期:2012-04-11 18:40
需要自动确定将要发生由锁冲突引起的性能下降的问题的位置,自动修正该位置的方法。本发明专利技术提供将在多线程上工作的程序的程序代码变换为锁冲突少的程序代码的方法。该方法包括:检索步骤,向存储器内读出上述程序代码,从该读出的程序代码检索在同步块内且向对该同步块没有副作用的路径分支的第一条件句;复制步骤,向上述同步块外复制通过上述检索出的第一条件句分支的没有副作用的路径;追加步骤,与上述复制相应地向上述程序代码内追加第二条件句,上述第二条件句是向上述复制的没有副作用的路径分支的条件句。

【技术实现步骤摘要】
【国外来华专利技术】
本专利技术涉及用于将在多线程上工作的程序的程序代码变换为锁冲突少的程序代码的方法及其计算机程序和计算机系统
技术介绍
近几年,在处理器设计中,正在转向将多个CPU核封入一个中央运算处理装置(下面称CPU :central Processing Unit)的内部的所谓多核。多核被认为是在外部有一个 CPU,但在内部有两个CPU。通过多核,在主要进行并行处理的环境下,能够提高CPU核整体的处理能力,实现系统性能提高。多核使处理器能够同时执行的硬件线程数量飞跃增加。例如,SUN (商标)Niagara〗(商标)能够在一个CPU上执行64个线程。在能够同时执行多个线程的处理器上执行以往的程序的情况下,由于锁冲突引起的处理器的性能降低成为问题。在此,所谓锁冲突是在某一线程为了进入需要排他执行的临界区而获得锁的情况下,在其他线程中在上述锁解除之前不执行下一步骤的状态。典型而言,不执行下一步骤的线程成为自旋环(spin loop)或休眠(sl^p)状态。发生锁冲突的原因多种多样。例如,考虑从队列取出数据的处理在多个线程频繁执行的程序的情况。此外,考虑在上述程序的程序代码中,在用于记载需要排他执行的处理的同步块中记载有关于上述取出处理的语句。在执行时,上述程序每次调出上述取出处理时都获得锁。因此,频繁地发生锁冲突。所以,由于频繁地发生的锁冲突,可能引起系统性能上的问题。在SUN(商标)BUG DateBase中报告了在能够执行32个硬件线程的计算机系统中, 与上述程序代码相似的构造的程序代码的程序成为系统性能上的瓶颈(http://bugS. sun. com/bugdatabase/view_bug. do ? bug_id = 6525425)。通过该报告,具有上述类似构造的程序代码的 SUN JDK1. 5. 013 的 java. lang. ref. RereferenceQueue 类中确认了上述问题。上述类的方法即与上述取出处理对应的pollO方法在SUNJDK1. 5. 014中修正。在该修正中,在polio方法的安装中,在关于获得锁的处理的语句之前插入关于判断队列是否为空并在判断为空时退出方法的处理的语句。下述非专利文献1记载向程序代码附加marked bit,利用该附加的marked bit 和compareAndSwap (CAQ命令,由此程序代码能够变形为同时并行性(concurrency)高的程序代码。在下述非专利文献1中,手动进行上述marked bit的附加。非专利文献1 Martin Vechev, Eran Yahav, Deriving Linearizable Fine-Grained Concurrent Objects,PLDI,08,ACM 978-1-59593-860-2/08/06,2008 年 6 月 7 日 13 日
技术实现思路
每次发生由锁冲突引起的性能降低的问题时,需要确定其原因,通过人工修正程序代码的作业。但是,从现有的程序代码的量考虑,该作业需要大量工作负荷所以不可能接近。因此,需要自动确定上述问题将要发生的位置,自动修正该位置的方法。本专利技术提供将在多线程上工作程序的程序代码变换为锁冲突少的程序代码的方法。该方法使计算机系统执行下述步骤。所述步骤包括检索步骤,向存储器内读出上述程序代码,从该读出的程序代码检索在同步块内且向对该同步块没有副作用的路径分支的第一条件句,没有上述副作用是指基于上述同步块内的语句处理中的值无法由上述同步块外的语句参照;复制步骤,向上述同步块外复制由上述检索出的第一条件句分支的没有副作用的路径;追加步骤,与上述复制相应地在上述程序代码内追加第二条件句,上述第二条件句是向上述复制的没有副作用的路径分支的条件句。通过上述方法,在向没有副作用的路径分支时,不执行同步块内的第一条件句。因此,锁冲突减少。上述方法特别在有一个条件句两个分支的情况下有效。在本专利技术的一个实施方式中,上述第一条件句包含第一条件式。该第一条件式定义为基于第一变量的读出、常量或这些的组合选择路径。所述第一变量不是仅调用包含所述第一条件句的子例程的例程中为有效范围的变量。本专利技术的一个实施方式中,上述第二条件句包含基于用于存储上述第一条件式的结果的变量根据上述第一条件式的结果选择路径的第二条件式。本专利技术的一个实施方式中,上述检索的步骤包含从上述读出的程序代码进一步检索更新句的步骤,上述更新句在上述同步块内且更新上述第一变量,上述追加的步骤包括如下步骤向从紧接上述检索出的更新句之后到上述同步块结束句为止之间,还追加包含用于存储上述第一条件式的结果的变量和向该变量代入的上述第一条件式的结果的语句。在本专利技术的一个实施方式中,上述检索步骤包括如下步骤从上述读出的程序代码和其他程序代码的至少一个进一步检索更新句,上述更新句在与上述同步块同步的其他同步块内且更新上述第一变量,上述追加的步骤包括如下步骤向从紧接上述检索出的更新句之后到上述同步块结束句为止之间,还追加包含用于存储上述第一条件式的结果的变量和向该相同变量代入的上述第一条件式的结果的语句。在本专利技术的一个实施方式中,上述追加步骤包括如下步骤在用于存储上述第一条件式的结果的变量首次被参照的语句之前,还追加初始化变量的语句,该变量用于使用上述第二条件句执行包含上述同步块的路径的值或使用上述第一条件式的结果存储上述第一条件式的结果。在本专利技术的一个实施方式中,上述副作用是不容易取消执行结果的处理。在本专利技术的一个实施方式中,上述副作用是执行线程间的同步的处理、向实例变量代入值的处理、向类变量代入值的处理、执行输入输出的处理、调用本地代码的处理或向表示排列要素的位置的编号代入值的处理。在本专利技术的一个实施方式中,在上述第一条件式的数量为2以上的情况下,上述2 以上的第一条件式的结果通过上述2以上的第一条件式的组合求出。在本专利技术的一个实施方式中,在通过上述第一条件式选择的路径的数量为3条以上的情况下,用于存储上述第一条件式的结果的变量与上述3条以上的路径中没有副作用的路径分别对应。在本专利技术的一个实施方式中,用于存储上述第一条件式的结果的变量是保证原子性的数据型的变量。在本专利技术的一个实施方式中,上述检索步骤包括如下步骤从上述程序代码和其他程序代码的至少一个进一步检索与上述同步块同步的其他同步块,随着上述检索的结束,执行上述复制步骤。在本专利技术的一个实施方式中,上述检索步骤包括如下步骤还检索包含于上述程序代码和其他程序代码的至少一个且从上述同步块外的语句参照上述第一变量的语句,随着上述检索的结束,执行上述复制步骤。在本专利技术的一个实施方式中,在上述同步块内包含启动线程的语句的情况下,上述检索步骤包括如下步骤还从包含于上述程序代码和其他程序代码的至少一个且记载上述线程的安装的语句检索与上述同步块内的语句同步地执行的语句,上述方法还使计算机系统执行如下步骤根据检索上述同步地执行的语句,将包含启动上述线程的语句判定为具有副作用的路径。在本专利技术的一个实施方式中,在上述同步块内包含启动线程的语句的情况下,上述检索步骤还包括如下步骤要求用户判断包含启动上述线程的语句的路径是否是没有副作用的路径。在本专利技术的一个实施方式中,在用于确定执行上述同步块的线程的本文档来自技高网
...

【技术保护点】
1.一种将在多线程上工作的程序的程序代码变换为锁冲突少的程序代码的方法,上述方法包括:检索步骤,向存储器内读出上述程序代码,从该读出的程序代码检索在同步块内且向对该同步块没有副作用的路径分支的第一条件句,没有上述副作用是指基于上述同步块内的语句处理中的值无法由上述同步块外的语句参照;复制步骤,向上述同步块外复制通过上述检索出的第一条件句分支的没有副作用的路径;追加步骤,与上述复制相应地在上述程序代码内追加第二条件句,上述第二条件句是向上述复制的没有副作用的路径分支的条件句。

【技术特征摘要】
【国外来华专利技术】...

【专利技术属性】
技术研发人员:石崎一明
申请(专利权)人:国际商业机器公司
类型:发明
国别省市:US

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

1