|
计算机科学 2013
面向dswp并行的openmp任务调度机制的扩展与实现Keywords: 自动并行化,openmp,dswp,任务调度机制,gcc中图法分类号tp314文献标识码a Abstract: 多核处理器能够提升多线程程序的性能,但早已存在的诸多单线程程序无法从中获益,程序员也习惯于编写单线程程序。自动并行化技术是将单线程程序移植到多核上的重要手段,但是当循环中存在无法确定的数据依赖或复杂的控制流时,传统的自动并行化技术无法取得良好效果。ottoni等人针对传统自动并行失败的循环提出了decoupledsoftwarepipelining(dswp)算法用以实现指令级的细粒度并行,但其需要对处理器体系结构的深入了解以及对核间通信队列和专用指令的硬件支持,并行性能和应用广泛性受到限制。基于openmp应用编程接口实现的dswp并行不依赖于硬件上对核间通信队列和专用指令的支持,且不受平台的限制,但现有的openmp任务调度机制无法满足dswp并行中对任务调度的需求。对现有的openmp任务调度机制进行扩展,增加了任务与线程绑定的属性,保证了基于openmp的dswp并行程序的正确执行。在gcc的openmp运行库libgomp中扩展了任务绑定属性子句的功能,扩展后的gcc作为openmpdswp程序的基础编译器,为自动并行提供支持。通过对基准测试集npb3.3.1的测试表明,传统自动并行失败的循环,经openmpdswp自动并行后在双核处理器上平均加速比达到1.23以上;使用添加了openmpdswp算法的open64编译器生成的并行程序,与仅使用传统自动并行方法的intel编译器和open64编译器所得程序相比,平均加速比分别高出22%和26%。
|