论文部分内容阅读
在多核单机系统上,多个共享资源的线程或进程间的交错执行是不确定的,导致并行软件难以开发、调试,存在安全隐患。为保证线程或进程交错执行的确定性,课题组已提出确定性生产-消费虚拟内存模型SPMC,并封装SPMC内存区域建立确定性消息通道及其编程接口DetMP,实现DetMPI以支持MPI中语义确定的子集。DetMPI (?)能使MPI程序不经修改即可被编译和确定地执行,但是许多MPI程序在DetMPI上的性能相比不确定的MPI实现要差。实验分析表明,DetMPI性能差的原因之一是底层SPMC和消息通道是阻塞式的,DetMPI利用阻塞式通道和消息缓存机制实现MPI中的无阻塞通信接口。为此,本文扩展SPMC和DetMP以提供对无阻塞通信的支持,改进DetMPI中无阻塞通信函数的实现,在保证确定性的前提下提升性能。本文的主要贡献是:(1)在SPMC层和消息通道层引入支持无阻塞通信的原语和接口,并基于扩展后的DetMP改进DetMPI的实现。DetMPI中改进的通信函数实现包括语义确定的点对点无阻塞通信函数、1:N和N:1模式的集合通信函数。(2)在消息通道层,为扩展后的DetMP设计SelfMP和CothreadMP两种无阻塞实现模式。SelfMP下的每个进程,其通信和计算由该进程本身处理:而在CothreadMP下,每个进程会附加一个线程负责通信,使得通信和计算能重叠。在32核Linux机器上的实验表明,针对OSU Micro-BenchMarks中7个MPI程序,原阻塞式实现是SelfMP执行时间的0.98-2.21倍;针对1:N和N:1集合通信分别用DetMP程序comp-bcast和comp-gather评测,相比SelfMP, CothreadMP通过重叠通信和计算可以带来平均19%的性能提升。(3)设计基于传统共享内存的并发多播队列框架CMQue,并基于CMQue重新实现DetMP。该工作旨在评估内存模型(SPMC和传统共享内存)、数据的存储组织(顺序、链式)、同步机制(粗粒度锁、细粒度锁、比较交换原子指令)对DetMP程序的性能影响。6种CMQue实现是2种存储组织和3种同步的组合。对于beast程序,在32核下当广播给23个消费者时,使用粗粒度锁的总运行时间约是细粒度锁的4.5倍、无锁的8倍和SPMC通道的6.2倍。对于PARSEC dedup,使用SPMC通道有最好的可伸缩性,在32核时比其他6种快7倍左右。