论文部分内容阅读
高端计算发展到今天,已经从单一地追求高性能转向致力于实现系统的高效能,包括提高系统的性能、可编程性、可移植性和健壮性,同时降低系统的开发、运行以及维护成本。高效能计算机系统离不开高效能的程序设计环境,尤其是未来的百万亿次、千万亿次计算机系统所面向的应用是多学科和多尺度的,这些应用的复杂性要求各学科的科学家和软件专家一起设计、管理和维护应用程序。各学科专家的参与对程序设计环境的性能、可编程性、可移植性以及容错性提出了更高的要求。OpenMP具有易编程、支持增量式程序设计模式、可维护性好以及可移植性高等特点,在未来很长一段时间仍将是主流的并行程序设计语言。论文紧紧围绕如何为大规模并行系统开发高效能OpenMP程序设计环境这一主题,对大规模分布共享存储(Distributed Shared Memory,DSM)系统上OpenMP实现的关键技术、面向DSM系统的OpenMP语言扩展、编译指导的数据预取、OpenMP的检查点/续算技术以及面向OpenMP的低功耗优化展开研究,取得了以下创新性成果:1、针对大规模并行计算机体系结构,设计实现了OpenMP并行编译器CCRGOpenMP。提出了编译时和链接时协同的OpenMP共享数据放置策略,不仅克服了在分布操作系统上需要显式分配共享内存的缺点,而且为检查点的数据局部性优化提供了有力支持。在OpenMP实现上,采用了大量的源级优化策略以提高程序性能。对于科学计算和模拟程序,在我们的SCCMP系统上,CCRG OpenMP性能与采用最新的Intel 9.1编译器的SGI Altix相当。2、提出了两个新的OpenMP指导命令BARRIER(thread_id)和ALLREDUCTION,降低了OpenMP并行程序在障碍同步和归约等全局操作上的开销:给出了新指导命令的实现算法。对于实际科学计算程序粒子云,在64个线程时,性能提高了76%。3、提出了面向OpenMP的编译指导的两阶段数据预取算法,克服了DSM系统上远程访存与本地访存延迟不一致引起的预取不准确的问题。建立了一个静态的性能分析模型,对预取算法进行了评估。在SCCMP系统上,采用本文的两阶段数据预取算法后,在32个线程时,SPEC OMP2001中swim程序在我们的系统上性能提高了14%;在64个线程时,性能提高了9%。4、建立了系统级和应用级协同的OpenMP检查点/续算机制,设计了阻塞的OpenMP检查点协议。基于该机制实现了一个CCRG OpenMP检查点/续算系统。该系统完全支持OpenMP 2.0 API,具有良好的可扩展性和实用价值。5、研究了面向OpenMP的功耗优化技术。在结点具有动态电压调整(DynamicVoltage Scaling,DVS)能力的并行系统上提出了三种低功耗优化方法及其实现算法。在基于最差执行时间的功耗优化中,提出了基于同步段的OpenMP程序最差执行时间分析与DVS方法。该方法将同步段作为分析和电压调整单位,有效避免了障碍同步引起的负载不平衡对程序执行和功耗的影响。建立了一个能量消耗分析模型,模拟分析显示,针对OpenMP并行应用的功耗优化技术能有效地减少并行系统运行OpenMP程序时的能量消耗。