论文部分内容阅读
随着多核/众核处理器的出现,如何在多核/众核平台上进行并行程序开发,以充分发掘多核/众核处理器的性能,成为计算机软件发展的重要影响因素。1)用户在使用更高层的任务并行编程工具的过程中,遇到的编程错误不同于传统的多线程编程,这一方面是因为并行编程本身的复杂性,另一方面也因为这些任务并行编程工具本身存在编程抽象及接口设计上的不合理。2)不同的任务并行编程工具面向不同的并行模式,因此提供不同的编程抽象及编程接口,这导致开发人员在复杂的并行应用中,通常需要选择多个不同的并行编程工具,这进一步增加了并行编程的复杂性,并间接提高了并行程序性能优化的难度。3)任务并行编程的执行模型在使用并行任务取代线程后,需要在应用层面引入新的调度机制以保证并行任务的高效执行,然而,这一调度机制在并行任务中的数据需要进行同步时容易引入新的性能瓶颈。因此,多核处理器上的任务并行编程依然充满挑战。围绕开发人员使用现有任务并行编程工具中所遇到的诸多问题,“多核环境下任务并行编程关键技术研究”课题提出了新的面向多核环境的任务并行编程工具,Function Flow。主要包括以下三个方面:在编程工具的易用性方面,对典型的并行编程工具的真实使用情况进行了用户案例研究,并基于该研究结果,对任务并行编程模型的编程接口提出了改进。具体来说,该用户案例研究包含了107个用户在使用Intel TBB及Microsoft PPL中所遇到的问题,通过对这些案例的统计、分类和总结,案例研究表明用户对编程工具存在着广泛的误用,这些误用问题导致开发人员在使用任务并行编程工具的过程中,其开发效率受到严重影响。更进一步的,这些误用问题主要包括类型不匹配带来的编译错误、以及开发人员对多任务并行编程工具所涉及的概念理解偏差所带来的运行时错误。基于案例研究的发现,提出定制编译错误信息、并将任务并行编程所涉及的概念转化为编译器的检查,从而减少开发人员对任务并行编程工具的误用。在对多种并行模式的支持方面,提出统一的任务协调机制,从而为复杂的任务并行应用提供优化空间。任务协调原语用于描述两种任务等待关系1)等待多个任务全部完成,2)等待多个任务中任意任务的完成;基于这两种原语,一个统一的任务协调机制能够支持多种主流并行编程模式。同时,在该并行编程框架的实现中,引入了统一的、轻量的任务等待关系,为面向复杂任务并行应用提供了良好的基础。实验结果表明,基于该统一的并行编程模型框架的实现,其性能与Intel TBB相当。在对任务并行的执行模型方面,在应用层引入任务的调度机制,SSLink,解决了在存在等待关系的任务中的数据同步导致的性能瓶颈问题。其核心思想如下:首先,通过静态程序分析手段获取并行程序中的数据同步信息;其次,通过改写并行程序,将数据同步信息暴露给运行时系统;最后,运行时系统通过预先判定可能存在的数据同步,从而优先调度不存在数据同步的任务,以降低因数据同步带来的线程挂起。实验结果表明,通过将SSLink与现有的任务窃取调度方法集成,SSLink的性能显著优于Intel TBB。综上所述,围绕多核环境下的任务并行编程这一问题,从认识问题(即任务并行编程工具的易用性研究),提出方案(即基于任务协调原语的统一并行编程框架)和优化方法(即在任务并行的执行模型的研究)三个方面并结合实践对任务并行编程进行了全面、深入的系统研究。这些研究为多核环境下的任务并行编程提供了新的编程抽象,为程序设计人员的并行程序开发提供了强有力的工具。