论文部分内容阅读
近年来,随着多核处理器的快速发展,人们广泛的使用并行技术来满足对程序性能提升的需求。由此,带来了诸多并行编程问题,本文就是研究其中之一,确定性问题。它给并行程序的编写,调试,测试带来诸多不便,同时降低了程序的可靠性。本文针对国产飞腾平台上的共享内存多线程程序,提出了一种确定性执行技术,并设计实现了确定性执行系统DetRT以代替Pthread运行时库。首先,本文研究了确定性问题的来源,将其分为数据竞争和同步竞争。在论证弱内存一致性对确定性执行系统性能提升价值的基础上,使用TSO弱内存一致性。本文提出了一种基于弱内存一致性的确定性执行技术,该技术采用串行阶段和并行阶段交替执行的方式,以同步操作为阶段分割的依据。并行阶段时线程间内存隔离,串行阶段时同步各线程的内存修改。本文针对飞腾平台应用程序特征提出了两点改进技术,一是提出串行阶段部分并行化技术,将使用不同同步操作的线程划分到不同的相关线程组中,线程组内串行,组间并行,解决因同步操作串行执行导致的性能下降问题;二是提出一种性能指导标记技术,让长并行距离线程跳过指定串行阶段,解决并行阶段的负载不均衡问题,给编程阶段性能优化带来了新方法。本文采用了内存隔离提交技术实现TSO弱内存一致性,该技术使用了进程代替线程技术和页面保护机制,实现共享内存在并行阶段的隔离和串行阶段的提交。同时,采用了令牌队列方式,给串行阶段顺序的执行提供了确定性保证。最后,本文在飞腾平台上设计实现了确定性执行系统DetRT,它与Pthread线程库接口完全兼容。功能测试表明,其在同步竞争和数据竞争出现时能够保证多线程程序执行的确定性。性能测试表明,DetRT在通用测试集下,与Dthreads性能不相上下;在飞腾平台性能测试程序下,平均运行时间为Pthread的2.25倍,在经过性能指导标记调优后甚至达到1.79倍,远好于Dthreads的平均3.58倍运行时间。