并发程序设计中减少临界区保护机制开销的优化方法

文档序号:6538472阅读:168来源:国知局
并发程序设计中减少临界区保护机制开销的优化方法
【专利摘要】本发明公开了一种并发程序设计中减少临界区保护机制开销的优化方法,其特征在于:所述优化方法是:基于源代码的优化并发程序中,临界区里的代码在满足一定条件的情况下,访问共享资源时,省去CSenter和CSexit操作,减少了同步机制带来的不必要开销。作为一种优化的技术方案,所述临界区里的代码满足的一定条件包括条件1和条件2。本发明利用“至多一次”原则,来减少实现粗颗粒原子操作开销的并发程序设计中减少临界区保护机制开销的优化方法。
【专利说明】并发程序设计中减少临界区保护机制开销的优化方法
【技术领域】
[0001]本发明属于软件开发中并发程序的设计和优化领域,具体地说,涉及一种并发程序设计中减少临界区保护机制开销的优化方法。
【背景技术】
[0002]随着多核处理器技术的迅速发展,在软件开发领域,并发编程技术越来越成为人们关注的焦点。为了有效的利用具有强大处理功能的CPU,我们须要设计出可以并发执行的软件。在并发编程中,一个经常需要解决的问题就是资源竞争,也就是指多个线程对某个共享资源进行混乱的操作,导致整个系统处理过程进入混乱的状态。比如,系统中有2个线程匕和t2)可以对资源R进行访问,如果h在修改资源R的过程中被打断,接着t2开始执行,t2访问R,这时R的状态将不是A修改后,或者修改前的状态,而是一个混乱状态。这就是一个典型的资源竞争导致的系统紊乱情况。通常的解决方法是,在每个线程中,把对共享资源的访问的操作放在临界区里,确保最多只有一个线程访问共享资源,而且每个线程对共享资源的访问操作是粗粒原子操作。临界区的实现往往依靠一些同步机制,比如互斥锁、/[目号量等等。
[0003]用CSenter表示要求进入临界区,用CSexit表示退出临界区,贝U可以用CSenter和CSexit操作来避免资源竞争带来的问题。
[0004]这样的设计使得h对R的访问不会被t2对R的访问所干扰。临界区的设计确保了并发程序中,如果有若干个线程要求进入临界区的情况下,一次只允许一个线程进入。同时,也确保任何时候,进入临界区里的线程不能多于一个。
[0005]然而,实现进入和退出临界区的操作是有开销的。对CSenter和CSexit操作的实现,往往依靠互斥锁和信号量等同步机制,这些同步机制的开销与它们的具体实现情况相关,即使是使用了高效的实现方法,同步机制给并发程序带来的开销仍然是难以预计的,因为这里涉及了操作系统调度和线程上下文切换带来的开销。
[0006]目前的解决方法是在汇编指令中寻找实现细颗粒原子操作的方法。比如,依靠CAS原子操作,即Compare&Swap,来实现无锁的互斥。CAS操作是特殊的汇编指令,现在很多CPU都提供这样的原子操作。另一种方法是对需要互斥保护的汇编指令上锁,比如在x86平台上使用intel的lock前缀对一些特定的指令实现细粒的原子操作。这些优化技术的实现往往基于与平台相关的特殊汇编指令和机制,却无法从源代码本身来展开。并且,这些基于与平台相关汇编指令的操作,完全取决于硬件的实现,使用它们取代锁机制的“无锁方法”是有弊端的。在轻度和中度争用的情况下可以提高程序性能,但是如果线程频繁的执行这些操作,所引发的缓存失效,会使操作被延迟,从而不能达到优化的目的。简单概括的说,因为程序性能取决于执行的频率,使用平台相关的原子指令的“无锁方法”所带来的副作用严重破坏了并发程序的可伸缩性。

【发明内容】
[0007]本发明要解决的技术问题是克服上述缺陷,提供一种利用“至多一次”原则,来减少实现粗颗粒原子操作开销的并发程序设计中减少临界区保护机制开销的优化方法。
[0008]为解决上述问题,本发明所采用的技术方案是:
[0009]一种并发程序设计中减少临界区保护机制开销的优化方法,其特征在于:所述优化方法是:基于源代码的优化并发程序中,临界区里的代码在满足一定条件的情况下,访问共享资源时,省去CSenter和CSexit操作,减少了同步机制带来的不必要开销。
[0010]作为一种优化的技术方案,所述临界区里的代码满足的一定条件包括条件I和条件2 ;
[0011]条件1:对需要访问的共享资源的读和写的操作必须是硬件实现的原子操作,也就是说,执行对共享资源的读和写的操作的机器指令是原子指令;
[0012]条件2:在临界区里至多有一个临界引用。临界引用,也属于共享资源,是指表达式中引用的被其它线程修改的变量。
[0013]作为一种优化的技术方案,所述优化方法的具体实施步骤如下:
[0014]I)、确定并发程序中需要保护的临界区,比如η个临界区,用CS1,…,CSn来分别代表临界区1,…,临界区η,每个临界区由一个抽象语法树来表示;
[0015]2)、对临界区代码进行扫描,也就是遍历相应的抽象语法树,并且计算临界引用X的值在每个临界区的使用次数;
[0016]3)、如果CSl-CSn都满足条件2,并且这个临界引用X满足条件1,则可以省略CSl-CSn的临界区进入和退出操作,即CSenter和CSexit。
[0017]由于采用了上述技术方案,与现有技术相比,本发明是一种基于源代码的优化并发程序的方法,即临界区里的代码在满足一定条件的情况下,访问共享资源时可以省去CSenter和CSexit操作,因此减少了同步机制带来的不必要开销。
[0018]本发明利用“至多一次”原则,来减少实现粗颗粒原子操作开销的并发程序设计中减少临界区保护机制开销的优化方法。
【具体实施方式】
[0019]实施例:
[0020]一种并发程序设计中减少临界区保护机制开销的优化方法,具体实施步骤如下:
[0021]I)、确定并发程序中需要保护的临界区,比如η个临界区,用CS1,…,CSn来分别代表临界区1,…,临界区η,每个临界区由一个抽象语法树来表示;
[0022]2)、对临界区代码进行扫描,也就是遍历相应的抽象语法树,并且计算临界引用X的值在每个临界区的使用次数;
[0023]3)、如果CSP^CSn都满足条件2,并且这个临界引用X满足条件1,则可以省略CSl-CSn的临界区进入和退出操作,即CSenter和CSexit。
[0024]由于采用了 上述技术方案,与现有技术相比,本发明是一种基于源代码的优化并发程序的方法,即临界区里的代码在满足一定条件的情况下,访问共享资源时可以省去CSenter和CSexit操作,因此减少了同步机制带来的不必要开销。
[0025]本发明是利用“至多一次”原则,来减少并发程序中实现粗颗粒原子操作开销的优化方法。[0026]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种并发程序设计中减少临界区保护机制开销的优化方法,其特征在于:所述优化方法是:基于源代码的优化并发程序中,临界区里的代码在满足一定条件的情况下,访问共享资源时,省去CSenter和CSexit操作,减少了同步机制带来的不必要开销。
2.根据权利要求1中所述的并发程序设计中减少临界区保护机制开销的优化方法,其特征在于:所述临界区里的代码满足的一定条件包括条件I和条件2 ; 条件1:对需要访问的共享资源的读和写的操作必须是硬件实现的原子操作,也就是说,执行对共享资源的读和写的操作的机器指令是原子指令; 条件2:在临界区里至多有一个临界引用。
3.根据权利要求2中所述的并发程序设计中减少临界区保护机制开销的优化方法,其特征在于:所述优化方法的具体实施步骤如下: 1)、确定并发程序中需要保护的临界区,临界区的数目为η个,用CS1,…,CSn来分别代表临界区1,…,临界区η,每个临界区由一个抽象语法树来表示; 2)、对临界区代码进行扫描,也就是遍历相应的抽象语法树,并且计算临界引用X的值在每个临界区的使用次数; 3)、如果CSl-CSn都满足条件2,并且这个临界引用X满足条件1,则可以省略CS1...CSn的临界区进入和退出操作,即CSenter和CSexit。`
【文档编号】G06F9/44GK103853529SQ201410060571
【公开日】2014年6月11日 申请日期:2014年2月21日 优先权日:2014年2月21日
【发明者】崔小磊, 李尚杰, 刘姝, 刘大鹏, 陈星宇 申请人:北京神舟航天软件技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1