随着领域定制化硬件和异构多核处理器的兴起,软件开发成本越来越成为这类系统发挥性能和进行商业推广的瓶颈。本文工作是基于一款应用于通信领域的异构多核高性能处理器MaPU,其同时具有一个主控ARM核和两个加速核,分别为标量加速核SPU和向量加速核MPU。其中SPU是一个具有四发射VLIW结构的32位标量加速核,MPU是一个具有十七发射VLIW结构、无指令互锁、硬件流水线暴露的512位向量加速核。不但如此,向量加速核MPU中十七个功能单元之间复杂的互联关系也给MPU的开发带来了不少复杂性。以上MaPU的所有硬件特点一起构成了MaPU处理器的软件开发难题,本文为了解决MaPU处理器的软件开发难题做了如下工作: 设计了具有两层抽象层次的Maple(MaPU Assembly Program Language Ex-tension)编程语言。Maple编程语言是本文提出一门专门为MaPU处理器向量加速核MPU设计的领域定制化语言。Maple是MPU向量加速核微码汇编语言的一种扩展形式,拥有比微码更高的抽象层次,而且是两层。在Maple语言的较低抽象层次上进行MPU应用程序的开发时,Maple为程序员隐藏了MPU硬件流水、无指令互锁、十七发射VLIW结构和复杂的硬件互联端口,同时这个层次的Maple还为程序员保留着功能单元和物理寄存器的控制权;对于Maple语言的较高抽象层次,程序员甚至都不用时刻保持对功能单元和物理寄存器使用的担忧,可以把跟多的精力放在算法的设计和实现上。除此之外,Maple语言还具有C语言一样的预处理器和高级语法糖,给程序设计人员的开发带来了极大的便利,经过统计可以平均减少程序员4.02倍的编码量,并且针对MaPU典型应用算法,Maple语言编译器平均可以达到手工微码性能的70.44%。 设计和实现了MaPU处理器的编译器。由于MaPU处理器异构多核的特点,其编译器的设计和实现任务本质上是两个几乎独立的编译器的设计和实现,分别是标量处理器SPU编译器和Maple语言编译器的设计和实现。SPU编译器前端对接的是高级语言C语言,后端对接的SPU标量加速核;而Maple语言编译器前端对接的Maple语言,后端对接的是MPU向量加速核。但两者在实现上都是使用的Clang提供的预处理器和LLVM提供的编译器基础设施,包括中间语言机器无关的分析和优化,Pass管理机制和TableGen后端信息描述工具等。除此之外,我们还在MaPU编译器中实现了很多机器相关优化,例如硬件循环、VLIW打包、指令调度、端口分配等等,保证了MaPU处理器编译器的高效性。SPU编译器可以取得1.66倍的执行时间优化和1.11倍的代码大小优化。
暂无评论