论文部分内容阅读
当前的处理器设计方向已经从传统的提高单处理器的性能转向多核多线程的可扩展架构发展.然而如何找到合适的面向多核多线程处理器的程序设计模型以发掘应用中的并行性,充分利用硬件提供的并行处理能力,从而加速软件运行,是一个亟需解决的问题.因此,面向新体系结构的程序设计模型、语言特征和语言扩展,成为现今工业界和学术界的研究热点.这些新的模型和语言,要能够自然的表达各种问题领域应用的并行性,并对程序员隐藏体系结构细节,有助于快速开发可移植的应用程序,并且给编译器和运行时系统提供更多的优化机会.本文提出了一种具有流式特征的并行程序设计模型,探索和研究了在运行时系统中支持和优化该并行程序设计模型所需的关键技术.通过程序设计模型与底层运行时系统的协同设计,使得编译器和运行时系统能够针对程序模型的运行时特征进行自适应优化,同时对程序员隐藏体系结构的细节,使得在该模型上开发的应用程序具有很好的可移植性.
本文的主要贡献如下:
1.提出了一个适用于多核多线程体系结构的具有流式特征的数据流Java并行程序设计模型.在传统数据流模型的基础上,对程序设计模型的语义和语言特征进行了扩展,并引入了数据流多态的语言特征,提高数据流Java应用程序代码的模块化程度和可重用性.探讨了程序员利用数据流并行性编写程序时,为保证程序正确性所需要符合的数据流内依赖性和数据流间依赖性条件.
2.设计并实现了一个支持数据流Java并行程序设计模型的运行时环境框架.对现代运行时环境支持新型程序设计模型所需要的功能体系和各种运行时支持技术进行全面的探索.
3.提出了保持流顺序性的Split-Merge并发非阻塞通信队列算法.该算法通过保持通信通道内的流顺序性来满足数据流内和数据流间依赖性的要求.探讨了数据流通信在现代运行时环境中与线程调度和动态内存管理的相互影响.
4.提出了用于运行时自动加速数据流程序运行的自适应组件复制优化技术.根据系统资源信息和各种运行时反馈信息,通过自适应的复制数据流程序的瓶颈组件,提高系统的吞吐量,加速程序运行.
5.提出了基于部分调用图的线程敏感Proffling技术.线程的访存序列等时间相关的profile信息是程序优化的重要信息,然而在运行时环境中收集这些信息的开销十分巨大.该技术可以用于收集特定线程的时间相关profile信息,能够有效的减少收集时的开销.通过动态构建线程的方法间调用关系及运行时重编译,可以控制插桩代码的分布范围,极大的减少运行时开销,适合在运行时系统中使用.6. 针对数据流Java程序的内在特点,提出了两种高度优化的基于分代策略的并发垃圾收集算法.基于拷贝的垃圾收集算法在数据流组件传递数据时拷贝对象,消除了组件之间垃圾收集的依赖性,使得每个组件可以独立并发的进行垃圾收集.基于流标记的垃圾收集算法在数据流程序的通信通道上设置流标记,记录通过的对象,消除了组件之间进行垃圾收集的依赖性,同时也避免了拷贝算法的复制对象开销.两种垃圾收集算法适用于各种流式程序设计模型,能够极大的提升程序性能,效率远远优于通用垃圾收集算法.