论文部分内容阅读
为满足日益复杂的信息处理需求,多核、众核组成的并行体系架构已经获得了大量的研究和应用。为了实现不同的功能目标,架构各具特色、优势各不相同的并行体系架构不断涌现。开发并行程序是利用这些并行体系架构的主要手段。并行体系架构带来处理能力的提升同时也使得开发程序变得复杂。相比于体系架构的快速发展,面向新型体系架构的程序编译和移植技术研究相对落后。研究跨架构的程序移植技术对于遗产代码升级、促进软件生态完善具有重要意义。本文从无源程序移植中二进制代码并行化、面向申威架构的无源和有源并行程序移植三个方面展开研究,主要研究内容和创新点如下:1.提出一种动静结合二进制翻译框架LLPEMU。动态二进制翻译技术是实现跨指令集架构无源程序移植的关键技术,对代码进行高级优化将引入运行时开销,影响整体性能提升。设计了动静结合机制,使得LLPEMU能够对代码进行静态分析优化且不引入运行时开销。采用二进制代码超级块生成技术和LLVM中间表示,使得LLPEMU能够利用多种代码优化方法提高生成代码的质量。实验结果表明,与测试基准QEMU相比,LLPEMU的翻译运行性能得到有效提高。2.提出一种面向二进制翻译的串行代码并行化方法并基于LLPEMU框架实现。本文将源代码自动并行化技术应用至二进制翻译系统中,在翻译串行程序时将其变换为等价并行程序以利用多核资源。设计了一种二进制翻译中代码并行化机制,提出了一种代码优化和重构方法来解决二进制代码并行化时存在的障碍。实验结果表明,本文提出的面向二进制翻译的代码并行化方法是可行的,并行化后目标代码的运行性能得到了有效提升。3.提出一种基于地址重用的本地代码替换方法。面向申威处理器的MPI并行程序移植通过MPI库函数本地代码替换实现。本文发现现有本地代码替换方法无法识别基于跳转指令的函数调用从而导致程序运行出错。针对这一问题,提出一种基于地址重用的本地代码替换方法,通过复用程序的代码地址空间实现库函数本地代码替换。实验结果表明,该方法能够成功识别基于跳转指令的函数调用并且降低了引入的运行时开销。4.为加速OpenMP程序向申威众核架构的程序移植,提出一种面向申威众核架构的OpenMP程序翻译机制并实现了一套运行支撑库。与申威异构众核架构不同,OpenMP是一种面向共享存储架构的编程标准。根据OpenMP程序语义,翻译机制使用源代码自动变换技术将OpenMP程序变换为申威athread程序。运行支撑库中OpenMP线程控制机制基于申威处理器提供的互斥锁实现。在激烈锁竞争情况下,该锁机制面临访存拥塞问题。提出一种面向申威众核架构的分布式传递锁机制HDT-LOCK,利用单指令多数据指令和众核间寄存器通信机制实现了锁传递,解决了原锁机制的访存拥塞问题并使锁机制的吞吐量提升最大可达5.6倍。