论文部分内容阅读
现代数字信号处理器(DSP)一般采取超长指令字或是超标量来实现指令级并行。超长指令字(VLIW)数字信号处理器将并行任务的识别和调度交给了编译器,因此在利用VLIW DSP的时候需要有一个功能更为强大的编译器。编译器代替硬件去进行指令调度的工作。BWDSP是中国电子集团某研究所自主研发的一款高性能数字信号处理器,它采用的是多簇结构的超长指令字架构。为了能利用C语言为BWDSP开发应用,我们将Open64编译基础设施移植到BWDSP上。并针对特定的架构和指令集,为BWDSP编译器做了优化。由于BWDSP采用的是多簇的结构,因此为了使得BWDSP编译器能充分利用处理器自身提供的资源,需要设计一个分簇算法。这个分簇算法能合理的将各个指令分配到相应的簇上面执行。由于多簇架构中,各个簇上的执行单元只能访问自身簇上的寄存器,因此如果一条指令需要利用到其他簇上指令的结果就必须利用簇间传输指令。分簇算法就需要解决并行度和簇间传输的平衡。本文提出基于SSA(静态单赋值,Static Single Assignment)数据流图的分簇算法。算法首先为基本块构建静态单赋值形式的数据流图,并自底向上遍历数据流图来计算各条指令分到某个簇上的资源得分和簇间传输的得分,通过比较这两者的得分并选择得分较高的簇作为该指令执行的簇。本文还通过多组实验验证了该算法编译器的编译性能确有提升。数字信号处理器上一类最常见的计算就是复数运算,例如FFT等都包含了大量的复数运算。而BWDSP在设计的时候就已经考虑到这一点,因此它的指令集中就包含了复数运算指令。然而Open64并没有对这类指令做进一步优化处理,因此我们需要对复数运算做进一步优化来获取更高的性能。添加复数运算的机器描述并通过编译制导来将识别复数运算之后合成复数指令。除此之外,我们还在分簇和寄存器分配模块为复数运算做了相应的修改。