论文部分内容阅读
多核处理器成为主流的通用处理器,具有计算能力强、功耗低和设计复杂度低等优点。不规则应用程序中含有大量复杂的控制流和数据流,难以充分利用多核处理器带来的宝贵资源。自动并行化技术可有效地解决这一问题,将串行程序转换为可以并发执行的多线程程序,发挥多核潜能。投机并行是自动并行化技术的一个研究热点。研究人员通过在程序中加入投机因素,增加并行的机会。然而,投机并行需要花费额外的代价处理误投机。因此,非投机并行成为新的研究热点。目前,非投机并行可以从不规则应用程序中提取独立多线程、流水线多线程以及环型多线程。但是,当前技术经常面临处理器负载不均衡、扩展性差以及线程间通信延迟敏感等问题。而且,非投机并行主要采用静态分析(编译器),应用程序中由指针别名引起的问题难以解决影响并行程序的执行效率。为了解决上述问题,提出一系列新的措施和解决方案:针对传统环型多线程技术对线程间通信延迟敏感的问题,提出一个自动并行化算法DOcyclial。DOcyclial利用基于优先权的动态调度策略降低线程间通信频率,避免通信延迟出现在并行程序执行的关键路径,增强程序对通信延迟的抵抗性。此外,DOcyclial将基于优先权的动态调度与节点融合策略相结合还可以保持处理器负载尽可能均衡。为了验证DOcyclical算法的有效性,利用两套标准测试程序(SPECCPU2006和StreamIt)分别在二、四、六核处理器进行测试,实验结果表明DOcyclical算法对线程间通信延迟极不敏感。而且,DOcyclical算法可以超过当前经典算法,如DSWP、PS-DSWP和HELIX,平均21-50%、1-27%、15-25%的性能。针对静态分析不能消除程序中冗余的依赖关系且难以对程序执行重用性分析的问题,提出一个动态分析框架DSspirit。DSspirit利用基于哈希的策略消除程序中冗余的数据依赖关系,利用基于值的策略分析程序的重用性,确定经常引起缓存缺失(cache misses)的指令,并向编译器提供可预取的对象。为了验证DSspirit的有效性,利用三套标准测试应用程序(SPEC CPU2006、MPI2007和OMP2012)在Intel i7-4700处理器进行测试。实验结果表明DSspirif可以克服静态分析的缺陷,消除程序中冗余的依赖关系,并提供有预取价值的对象。而且,自动并行化技术中利用动态分析框架DSspirit可以获取平均20%的性能提升。针对缓存缺失(cache misses)总是影响并行程序执行效率的问题,提出一个基于动态分析的预取算法,该算法利用运行时环境确定经常引起缓存缺失的指令,并根据指令的访问特征制定不同的预取方案。为了验证预取算法的有效性,利用两套标准测试程序(SPEC CPU2006和MPI2007)在Intel i7-4700处理器进行测试。实验结果表明预取算法可以明显地提升并行程序的缓存命中率,缩短程序的总体执行时间。为了保证多线程程序对通信延迟不敏感且具有较高的缓存命中率,设计一个自动并行化系统HSparallel,该系统首先利用动态分析框架DSspirit确定具有预取价值的对象,然后利用自动并行化算法DOcyclical避免通信延迟出现在并行程序执行的关键路径,同时利用预取算法提高程序的缓存命中率。为了验证HSparallel的有效性,利用两套标准测试程序(SPEC CPU2006和MPI2007)在Intel i7-4700处理器进行测试。实验结果表明HSparallel可以带来显著的性能提升。而且,HSparallel超过当前主流算法,如Paralax和文献[1,2],平均19%、21%和17%的性能。最后,以上所有算法、框架和系统都完全开发于LLVM编译器,并写入到该编译器的后端。