王昊,王向前
(中国电子科技集团公司第三十八研究所,合肥230088)
BWDSP SIMD编译的寄存器分配优化技术研究※
王昊,王向前
(中国电子科技集团公司第三十八研究所,合肥230088)
BWDSP是一款自主设计的国产VLIW(超长指令字)数字信号处理器,支持SIMD技术,其SIMD指令可以在4个宏上同时执行4个32位计算,对寄存器使用有特殊规则,Open64编译器的寄存器分配策略并不适用于这种规则。本文对BWDSP SIMD指令的寄存器分配优化技术进行了研究,并在BWDSP的编译器OCC上得以实现。
DSP;SIMD;寄存器分配
BWDSP[1]是一款32位静态超标量浮点数字处理器,采用超长指令字(Very Long Instruction Word,VLIW)架构,支持SIMD技术。BWDSP核内包含4个基本执行宏,代号是X、Y、Z、T,每个宏由算术逻辑单元(ALU)、乘法器(MUL)、移位器(SHF)、超算器(SPU)和一个通用寄存器组成。
BWDSP最多可以同时执行16条指令,其SIMD指令有其特殊性,本质上就是多条相同的指令并发执行,下面将对其特性进行分析,说明BWDSP编译器的寄存器分配需要特殊的优化技术来满足SIMD指令的要求。
BWDSP计算指令的通用格式如下:
[Macro]Rm=Rnop Rs
Macro是执行宏的代号,op是操作,符号“||”连接多个可并行指令,比如:xRm=Rn+Rs是Scalar指令,表示在X宏上执行整数加法操作;xyztRm=Rn+Rs是SIMD指令,表示在X、Y、Z、T四个宏上同时执行整数加法操作,等同于xRm=Rn+Rs||yRm=Rn+Rs||zRm=Rn+Rs||tRm=Rn+ Rs。图1是BWDSP SIMD add指令的执行示意图。

图1 BWDSP SIMD add指令执行示意图
Intel x86-64 CPU[2]也有SIMD加法指令:
paddd xmmi,xmmk
表示xmmk=xmmi+xmmk,形式很像BWDSP的Scalar加法指令。图2是Intel x86-64的paddd指令执行示意图。
比较以上两种类型的SIMD加法指令,总结4点区别如下:
① x86-64的 paddd指令只需要一个核执行;而BWDSP SIMD add指令需要多个宏同时执行。
②x86-64的paddd指令只需要使用一个加法器;……