论文部分内容阅读
随着多核处理器和分布式集群的流行,并行编程在高性能计算领域和互联网软件开发中的作用越来越大。但是到目前为止,并行编程的开发环境还较为落后,传统的并行编程技术以及科学计算库难以充分利用如今计算机体系架构下的多核机和分布式集群的性能,造成计算资源的浪费,难以达到优秀的性能提升效果。 MPI作为分布式内存下并行编程的标准已经有二十多年的历史,它有很多明显的缺点:需要通过显示的消息传递实现控制流的并行执行,使用难度较高,而且不能充分利用单机中的多核,往往需要结合多线程编程技术如pthread和OpenMP等,这样的话又要考虑共享内存环境下线程安全等问题。使用MPI和OpenMP在多核节点构成的分布式集群进行并行编程,不仅编程复杂,而且调试困难,将给开发人员带来极大的挑战。如何代替开发人员在多核和分布式环境下进行并行优化,提高计算资源的利用率和程序的性能,是亟待解决的问题。 从并行计算模型上来看,BSP计算模型简化了并行算法的设计和分析,但是牺牲了运行时间,因为整体同步会导致同一超步内的所有控制流必须等待最慢的执行单元结束后才能继续推进。当分布式节点或节点不同核心的计算时间差异较大时,会造成更多的运行时间的浪费。相比之下,数据流模型则克服了这个缺点。数据流模型是一种天然的并行模型,不需要集中控制,对于任何一个任务,只要它的输入就绪,当运行时有可用资源就可以开始运行,这样就大大提高了计算资源的利用效率,可以实现超大规模的并行。 从并行编程模型上来看,OpenMP是当今科学计算领域最重要的共享内并行编程模型,共享内存具有统一的地址空间,可以直接访问数据,易于编程,但是要考虑线程安全等问题;MPI是当今面向分布式内存计算的最重要的并行编程模型,分布式内存的地址空间是分散的,数据的共享要用过消息传递来实现,编程比较复杂,但是可以获得更好的可扩展性。而分区全局地址空间(PGAS,Partitioned Global Address Space)编程模型则结合了共享内存和分布式内存的优点,同时具备了共享内存编程模型的高效率、易编程性和分布式内存编程模型的可扩展性。 本文分析了目前并行编程技术的发展和面临的挑战,从并行计算模型和并行编程模型两个方面找到了构建更加高效、易用的并行优化工具的方向:采用数据流计算模型解决传统BSP模型全局同步造成的计算资源浪费的问题,采用PGAS并行编程模型来结合共享内存并行编程模型的易编程性和分布式内存并行编程模型的可扩展性。之后按照这个思路分别实现了共享内存下基于线程池和数据流计算模型的并行优化工具star_tp和分布式内存下基于PGAS和数据流计算模型的star-d,并对它们进行了性能测试。