论文部分内容阅读
随着新兴并行体系结构的普及,主流应用程序由单线程向多线程转变的趋势越来越明显。但是,生成高效健壮安全可靠的并行程序并非易事,其中以多线程间同步策略的设计和实现最为关键。实现多线程间同步的一种主要方式是对共享数据加锁,锁能安全、简单、有效地实现对共享数据的保护,但锁操作本身的开销非常大,而且由于其过于悲观保守,在实际应用中会出现大量冗余的锁操作,这样对整个程序的运行效率会产生极大的负面影响。为了弥补锁同步的不足之处,本文介绍了多种锁同步的优化策略,重点提出两种基于锁粗化的同步优化算法,并在开源的JavaSE项目Harmony上实现这两种算法。围绕锁同步的优化,本文主要探讨并完成以下工作:1、在实际的Java虚拟机Harmony中设计实现一个插桩取样系统设计开发这样的插桩取样系统,旨在收集运行时信息,例如,各种同步操作在运行过程中实际执行的次数等,帮助调试、分析和评估各类同步优化算法。2、在Harmony中实现Stoodley等提出的基于锁粗化的同步优化算法[21]Stoodley等提出的算法能删除过程内的嵌套同步操作中的内层同步操作以及合并过程内的相邻同步操作,以减少同步操作的数量。通过在Harmony中设计实现它,可以为提出并实现新的同步优化算法提供思路。3、提出并实现一种利用即时编译器外提循环内同步操作的过程内同步优化算法该算法能将循环中的部分同步操作外提至循环外,大量减少运行时实际执行的同步操作数,充分挖掘了过程内的同步优化机会。笔者在Harmony的即时编译器中以高级中间表示上的优化遍形式实现该算法,实验结果表明它对specjbb2005吞吐量的提高可达到1%~3%。4、提出并实现一种过程间的同步方法优化框架该优化框架旨在分析出无须同步的同步方法调用点并将其改成对相应同步方法的非同步版本的调用。笔者在Harmony中实现了基于该框架的一个算法,实验结果表明使用该算法对specjbb2005吞吐量的提高可达到2%~4%。