文献标识码:A
文章编号: 0258-7998(2013)10-0008-03
数字信号处理器DSP(Digital Signal Processor)在3G通信、雷达信号处理、图像处理、视频处理、网络等领域被广泛应用,DSP性能和复杂性在不断地增加[1]。DSP处理器的功能日益强大,软件程序的复杂程度也在不断增大,软件的代码量迅速增加,同时DSP处理器需要强大编译器支持来实现各种应用程序。采用无损数据压缩技术对经过编译、汇编后生成的二进制机器指令代码进行压缩,可减少指令代码存储空间大小。这样在DSP处理器存储空间有限的条件下可以存储更多指令程序代码,同时增加Cache命中率,提高BWDSP处理器的整体性能。代码压缩技术可以让BWDSP处理器的片上存储空间存储更多程序代码,因片内存储速度比片外存储速度要快几个数量级,从而能更好地满足BWDSP处理器高速实时的信号处理要求。
在BWDSP处理器芯片中,指令存储器大小对芯片性能和成本影响很大。因此,压缩指令代码空间成为BWDSP芯片设计需要考虑的因素。指令代码压缩技术能够减少程序目标代码尺寸和芯片功耗[2-3],并可以提高指令Cache的命中率和改善指令Cache的性能,从而提高BWDSP性能,减少BWDSP芯片的面积。本文采用LZW无损数据压缩技术对经BWDSP处理器的编译器、汇编器后生成的二进制机器指令代码进行压缩,减少指令代码存储空间大小。指令代码压缩和编译器对代码优化都是在BWDSP处理器片上完成,而指令代码压缩是编译器优化代码之后的一个独立过程。指令代码压缩的输入代码是由源程序代码经处理器的软件编译器、汇编器生成的二进制可执行的机器代码,该方法不需要改变处理器的软件编译器、汇编器,不需修改指令集,也不需要增加DSP处理器内核流水线的级数。
在BWDSP处理器代码压缩系统中对指令代码进行压缩和解压,相同尺寸大小的不同原始指令代码在压缩后将占用不同大小的存储空间,这就导致压缩前后指令代码存放的实际物理地址不同,这与无压缩存储系统中指令代码存放的物理地址有很大的差异,从而使压缩后的指令代码无法像在无压缩存储系统中那样被BWDSP处理器内核随机访问。
2 指令代码压缩技术
2.1 指令Cache的代码压缩技术
代码压缩技术是无损数据压缩,其无损压缩是指解压后的指令代码与压缩前的原始指令代码完全相同。代码压缩是对代码进行重编码,以减少输出字符序列。目前常用的编码算法有Huffman编码、Arithmetic编码、Dictionary-based编码和基于域划分的代码压缩方法[5]。
为了解决BWDSP处理器内核速度与指令存储器速度匹配的问题,BWDSP处理器有一级指令Cache,BWDSP处理器取指宽度必须达到512 bit以保证BWDSP处理器流水线不被停顿,从而提高BWDSP处理器性能。因此,要尽力提高指令代码密度来增强指令Cache性能和BWDSP处理器性能。指令Cache与BWDSP处理器内核之间是按512 bit指令包进行取指,指令存储器与指令Cache是按块传递指令的,所以其指令Cache代码压缩算法必须以指令Cache块的大小为压缩单位。
本文提出的指令Cache的代码压缩技术是将解码器放在指令存储器与指令Cache 之间,指令存储器存放的是压缩指令代码,解压后指令代码被存放在指令Cache,只有在指令Cache缺失时才对压缩的指令代码进行解压,每次解压出一个512 bit指令包。BWDSP内核PC(程序计数器)产生的目标地址与原始指令代码中的目标地址相同。当内核PC产生的目标地址不在指令Cache中时,即指令Cache目标指令要在执行前从指令存储器解压到Cache中。如果指令利用转移目标地址来对指令存储器压缩块进行寻址,则可能出现所寻址到的压缩块并不好转移目标指令。因此基本指令块的寻址是指在转移目标所在的原始程序指令块地址与转移目标所在的压缩块地址之间进行地址映射。本文利用指令行地址表来实现指令代码压缩前地址与压缩后地址的这种地址映射。指令行地址表大小也占指令存储器空间,因此行地址表大小会影响指令代码压缩率。 指令Cache行地址表是在不改变BWDSP内核操作和指令集的情况下使用,压缩代码可以被BWDSP内核随机访问,同时使现有的指令程序在被压缩后能够被正确执行。在Cache不命中时,要通过访问行地址表来确定目标代码地址与压缩代码地址间的映射关系。BWDSP处理器每一条32 bit指令都分成寄存器操作和立即数操作,其中最高位表示取指包是否已达到8条指令,第30~27位表示内核中那几个宏组合,第26位表示取指包是一条指令还是多条指令,第25~18位为操作码,低18位为操作数。单字指令基本形式如表1所示。
BWDSP处理器指令Cache行大小为512 bit,未压缩的每条指令为32 bit,若对16条指令进行压缩,重新使用128 bit压缩码来表示,压缩行与Cache行尺寸大小相同,则压缩行可以存放2个取指包。考虑到若将每个指令Cache行的起始地址指针都在LAT中列出来,则LAT会变得非常大,反而会使整体指令代码显示不出被压缩的效果(代码压缩后代码大小包含LAT大小在内)。通过将几个连续行地址映射表的指针打包在一起来减少行地址映射表开销(即基地址加偏移量)的方法对指令Cache行进行依次寻址。如图3所示,指令Cache行有32 B,因此至少需要5 bit(L0~L7)表示压缩后的长度(0~31 B),图中用24 bit的L0基地址就可以表示基地址。因此L1的基地址就是L0的长度加上基地址,同理可得L2、L3、L4、L5、L6、L7。图3所示为行地址映射表(LAT)中的每一项。
2.2 LZW压缩算法
LZW压缩算法[6]是WELCH T A在LZ78算法基础上改进的字典压缩方法,该算法有3个重要的对象,分别是数据流、编码流和编译表。用LZW压缩算法对BWDSP处理器编译后的二进制指令代码进行压缩时,其数据流就是输入对象,编码流就是输出对象。LZW算法在压缩开始,字典中仅包含0和1两种字符及其编码的串表,LZW编码思想是在输入时构成字符串C与字典中已有字符串进行匹配。每输入一个字符就将其接在字符串C的后面, 编码器不断输入指令代码数据流,直到输入某个字符D后,在字典中找不到匹配,然后把字符串CD存入字典。
LZW压缩算法是一种贪婪分析算法,串行地检查输入数据流二进制代码的字符串,并从其中的字符串分解出已经在词典中出现的最长的字符串,输出字符流为其对应的代码,用该字符串加上下一个输入字符C形成新的扩展字符串加到字典中。LZW编码算法的步骤如下:
(1)字典中开始包含代码0和1的两种可能的单个字符值,令当前字符串S:=Null。
(2)当前字符C:=字符流中的下一个字符。
(3)判断字符串S+C是否在字典中,若在,则S=S+C;否则,
①把代表当前字符串S的代码输出到码子流;
②把字符串S+C添加到字典;
③令S=C。
(4)判断输入数据流中的字符是否还要编码,若是,则返回到(2);否则把当前字符串所代表的代码输出到码字流,程序结束。
3 实验仿真
SystemC语言的重要特征是支持系统的建模和验证高性能处理器性能,本文实验平台是利用SystemC语言建立的高性能BWDSP模拟器。高性能BWDSP模拟器内核采用RSIC指令集、按照32 bit寻址方式寻址,11级流水线,内核发射的宽度为16条指令,工作频率为500 MHz,指令存储器为1 Mbit,指令Cache大小为256 Kbit,指令Cache行的大小为512 bit。把LZW字典压缩和解压算法加载在BWDSP100模拟器上构成BWDSP处理器指令代码压缩体系结构。LZW代码压缩算法以指令Cache块为压缩单位,以单个字符作为最小的符号单位,通过对指令存储器每一块上添加两位构成行地址表来建立压缩前指令代码地址与压缩后指令代码地址的对应关系。针对BWDSP处理器10个典型的雷达信号处理程序,通过BWDSP编译并进行汇编后,用LZW压缩算法对机器代码进行压缩,其得到的代码压缩率如表2所示。由表2可知,通过在高性能BWDSP模拟器上对10个典型雷达信号处理程序指令代码的压缩验证,该10个典型雷达信号处理程序的存储空间平均可减少40%左右。
在高性能BWDSP处理器验证平台上,Cache的替换算法为随机替换算法,10个典型雷达信号处理测试程序在无代码压缩处理器上的平均访存时间和Cache命中率及在有代码压缩处理器上的平均访存时间和Cache命中率如表3所示。
从表3可知,10个典型雷达信号测试程序在有代码压缩BWDSP处理器模拟器上的平均访存时间比在无代码压缩BWDSP处理器模拟器上的平均访存时间少0.006个cycle左右。有代码压缩BWDSP处理器模拟器上的Cache命中率比在无代码压缩BWDSP处理器模拟器上的Cache命中率要提高了5%左右。在BWDSP处理器模拟器上的验证结果表明,通过指令代码压缩可使高性能BWDSP处理器的整体性能获得提高。
以10个典型雷达信号处理程序作为测试指令代码,在用SystemC语言建立的BWDSP处理器指令代码压缩模型上,对高性能BWDSP处理器指令代码压缩技术进行实验仿真,其结果表明,指令代码压缩技术可以提高Cache命中率,减少指令代码存储空间,使高性能BWDSP处理器整体性能进一步提高。目前IC制造工艺水平已达到22 nm,为更高复杂度DSP处理器芯片的研制打下牢固的基础。代码压缩技术进一步推动了高性能DSP处理器的发展。高性能DSP发展的差异性和需求的多样性以及广泛性,是我国在现阶段DSP产品的战略和学术研究方向,拥有我国自主知识产权的第一代高性能BWDSP及其开发平台,对加强我国自主研制高性能BWDSP芯片及其产业化发展具有重要战略意义。
参考文献
[1] AGARWALA S.A multi-level memory system architecture for high performance DSP application[C].International Conference on Computer Design,2000:408-413.
[2] COLLIN M,BRORSSON M.Low power instruction fetch using profiled variable length instructions[C].Proceedings of the IEEE International SoC Conference,2003:183-188.
[3] BENINI L.Hardware-assisted data compression for energy minimization in systems with embedded processors[C]. Proc.of the Design, Automation and Test in Europe Conf.(DATE),2002:449-453.
[4] 洪兴勇,洪一.基于BWDSP指令Cache的PLRU替换算法研究[J].电子技术应用,2013,39(1):78-83.
[5] PENNEC E L,MALLAT S.Image compression with geometrical wave—lets[C]. In:Proc of ICIP′2000,Vancouver,Canada,2000:661-664.
[6] WELCH T A.A technique for high-performance data compression[J].IEEE Computer,1984,17(6):8-18.