论文部分内容阅读
TI公司研发的TMS320C6000系列DSP是一款针对实时数字信号处理的DSP。此类DSP采用VLIW体系结构,每个时钟周期可以发射八条指令,对于指令级别并行处理有着很好的支持,并广泛的应用于军用和民用方面。但VLIW体系结构的DSP在指令并行的发挥方面严重依赖于编译器对于机器指令的静态调度。现有的GCC编译器是一款面向多种体系结构的通用型编译器。针对特定的C6000体系架构,GCC编译器在后端体系架构相关的优化方面存在着许多的不足之处。直接采用GCC编译器来编译生成对应的C6000可执行程序,不仅会造成C6000硬件资源的浪费,还将影响到C6000的实时响应能力。如果采用GCC编译器就需要在编译器前端的基础上,紧密结合相关C6000体系架构的特点使编译器后端针对具体的架构进行指令的调度。这样才能编译出针对于C6000VLIW体系架构的程序,保证硬件资源的利用率以及C6000的实时响应能力。论文通过深入研究GCC编译器在体系结构相关优化的技术应用,在分析GCC前端和后端现有的优化基础上,紧密结合C6000体系结构的特点,改进了 GCC编译器后端优化的指令调度技术。在原有指令调度优化算法基础之上,通过引入关键字,让编程人员标识出源程序分支结构的关键路径,并以此为依据,划分出新的调度区域。针对新的调度区域进行踪迹的划分和调度。对于分支中执行频率高的踪迹,首先忽略分支处判断的结果,优先执行此条频率高的踪迹,将执行频率高的基本块与分支前的基本块归并在一块调度。当分支判断判断执行完毕,并且结果为其它路径时,再对相应的踪迹进行相关的补偿,然后再进行相关的调度工作。论文采用这样的算法不仅扩大了调度区域,使得可并行指令发掘的范围和可能性都增大,而且超前调度了分支后最可能执行的代码。论文中针对C6000在指令调度优化过程中采用了新的区域划分和踪迹调度方法。在GCC编译器前端分析的基础上,针对GCC后端的中间语言对后端的指令调度方法进行改进。在新的调度区域内对指令进行了进一步的并行性发掘,增加了指令在VLIW体系结构上每周期的执行的数目。采用针对于划分出的区域进行踪迹调度不仅避免了由于全局性的踪迹调度引起的代码量过大在具体的嵌入式设备中难以容纳的问题,而且扩大了指令并行性发掘的区域,减少了指令分支处的延迟间隙,提高了程序中每周期指令的并行数目以及C6000的资源利用率和实时能力。