定点处理器vs浮点处理器:艰难的选择
浮点处理器的优点众所周知。毫无疑问,许多算法的浮点实现执行起来比定点代码占用更少的周期(当然,假设定点代码提供相同的精度)。浮点处理器也往往更容易用汇编代码编程。不过,浮点运算的这两种优势还不足以影响设计师的最终选择。随着编译器质量的日渐提高,人们几乎不再用汇编语言编写代码,无论是定点还是浮点运算,采用C语言写代码几乎同样简单。此外,利用C语言肯定能为定点处理器编写浮点代码,只不过这样做会使性能大幅下降。设计师关心的是最终系统性能、成本以及上市时间。在下面的分析中,将以它们作为衡量标准,决定该使用何种处理器。
目前有各式各样的处理器,既有定点的也有浮点的。如对每个处理器逐一进行分析,本文的长度将抵得上百科全书。因此,我们将分析范围限制在两种ADI处理器上:来自定点阵营的Blackfin处理器和来自其浮点阵营的SHARC处理器。我们将挑选其中两款价位相似的处理器——ADSP-21531 Blackfin和ADSP-21375 SHARC进行比较。截至本文完稿日,它们适量批发单价均为5美元左右。
也许有人会认为,在芯片价格相似的情况下,应该选择浮点处理器,起码可以应付万一需要浮点运算的时候。但是相似的芯片价格并不一定转化成相似的最终系统价格。例如,对于相同的定点运算任务,SHARC的功耗比Blackfin高,这将引起电源设计费用的增加和其它问题。无论如何,对于单一的应用,一种处理器难免会优于另一种。因此,为公平起见,我们将考虑四种单独的应用:
军用雷达
移动电视
专业音效处理器
免提便携式设备中的自动回波抵消器
选择这些应用并不完全是随意的。选择标准是:个别处理器明显占优的应用;答案还不是很明确、需要进行深入分析的应用;以及非常简单但容易引起误导的应用。
另外补充一点,如果没有考虑使用ASIC硬件协处理器(片内或片外)和FPGA来减轻DSP的信号处理任务,那么任何实际分析都是不完全的。有关这些方面的讨论完全在本文的范围之外,但是请记住,以下研究在实际应用中仅仅是更大范围分析的一部分。
军用雷达
我们先从容易选择的应用开始。军用雷达经常使用浮点处理器。为什么?因为在这种应用中浮点性能至关重要。雷达依靠的是测定自模糊(self-ambiguity)函数的最大绝对值。该函数表达的是发出的测试信号和接收的回波之间的交叉相关性,可表达为:
这是一个指数函数的积分,该积分可用FFT技术计算。在计算大型FFT时,浮点十分有用,而且在这里采用浮点处理器没有任何弊端。只要热量能排出(即处理器不会过热),功耗不是大问题。器件成本也不是主要问题,因为处理器成本仅占整个系统成本的很小部分。事实上,一般不大会选择ADSP-21367 SHARC来完成这样的任务,因为该应用的一个目标是尽可能让每平方毫米发挥最大处理能力。因此,ADI公司TigerSHARC产品系列中的高性能ADSP-TS201更适合这一应用。
移动电视
这也很容易选择。移动电视完全没有必要进行浮点处理。大部分的信号链处理是在标准解码器中进行的,如MPEG-2、MPEG-4、JPEG-2000和H.264。这些算法专为定点运算而设计,通常只精确到位,因此更高精度和更大动态范围的浮点运算不仅毫无帮助,而且根本无法使用。
例如,视频编解码器中使用的频域变换是某种形式的DCT(离散余弦变换)。表面上,似乎浮点运算更适合于DCT计算,就像上述FFT计算一样。浮点运算确实会产生更加精确的DCT。不过,视频编解码器中的DCT是专为定点处理器运算而设计的,只精确到位,因此在这里没必要追求更高的精度。
更何况,视频编解码器的大部分工作量都用于控制代码,此处同样不需要浮点运算。例如,视频编解码器中使用的熵编码器占了整个工作量的很大一部分(在H.264算法中使用的CABAC编码器尤其如此)。
对于这里所考虑的两种处理器,以下事实有助于做出正确的选择:Blackfin处理器拥有专为促进视频算法性能而设计的指令。相反,SHARC处理器没有视频特定指令。此外,功耗对于移动市场至关重要,这一点几乎就将浮点处理器排除在外了。因此,最终选择不言而喻。
其余的应用实例需要更加深入的分析,才能做出正确的处理器选择。
专业音效处理器
现在我们将面对一个选择不太明确的应用。这里没有移动应用所需要的严格功耗限制,音效处理器通常是通过外接电源供电的。除非处理器非常热,需要强制冷却(大大增加成本),否则关于功耗的讨论都将归于供电成本。
举例来说,我们要设法为一个双通道系统构建一个能产生斯卡拉歌(La Scala)剧院混响效果的处理器。一种方法是去斯卡拉歌剧院实地测量脉冲响应,直到最后回声听不见为止。或者取巧,从网上下载已经测量到的脉冲响应。笔者就是这样做的,该脉冲响应接近2秒。假设采用96 KHz的采样速率,则该响应可转换成FIR延迟线上的192,000个样本(实际的采样速率可能是48KHz或192KHz,这里取了中间值)。因此,为了准确实现混响效果,我们需要采用192,000抽头的FIR滤波器。
当然,直接做一个192,000抽头FIR滤波器是一个疯狂的想法,这需要对每个输出样本做192,000次乘法运算。每秒采样96,000次意味着每秒将做超过180亿次的乘法运算。考虑到有两个输出通道,还要将这一数字乘2,再加上必需的额外处理,以及为未来扩展留出的空间,每秒将做1000亿次MAC运算!退一步说,即使您能用100个并行处理器来完成这项工作,但是最终产品的售价(及其尺寸)会非常不利于销售。因此,必须进行某种优化,优化方法取决于处理器。
首先考虑浮点实现方案。如前所述,浮点处理适合大型FFT计算,因此我们可以在频域中实现FIR滤波器。常用的一种算法是重叠相加FFT(基本上是一种通过一组小型FFT来计算大型FFT的方法)。对于本例,我们选择1024点窗口来计算重叠相加FFT。
ADI网站显示,ADSP-21367 SHARC能在大约9200个周期内完成1024点复数SIMD FFT计算。这样,为了计算1024个输出样本,必须做一次1024点FFT计算,然后做1024次复数乘法,最后做一次1024点IFFT计算。复数乘法运算要占用SHARC处理器的2048个周期。因此,计算1024个输出需要9200 + 2048 + 9200 = 20,448个周期,即每个输出需要大约20个周期。加上重叠相加FFT计算所需的零填充,预计算脉冲响应FFT所需的外部存储器访问,所有运算因有两个通道所以都要乘以2,这样每个输出需要大约100个周期。每秒采样96,000次,那么每秒需要9,600,000个周期。换句话说,这将只消耗SHARC处理预算的10 MIPS。
现在,让我们用一个定点处理器来完成相同的任务。不幸的是,上述FFT方案将遭遇到重大问题。一个1024点FFT/IFFT组合具有1024倍的增益,即10位。为了避免溢出,在FFT/IFFT的计算过程中,信号必须下移10位。如果希望输出分辨率达到24位,就必须执行34位运算。由于A/D和D/A转换器通常提供少于24位的SNR,因此我们仅采用32位运算以获得22位的性能。一个定点16位处理器要做4次乘法,还有一些移位和相加计算,才能完成一个32位乘法。
假如使用Blackfin处理器,每个32位乘法需要6个周期。结果,在SHARC上需要10 MHz的处理过程在Blackfin上需要60 MHz。出乎意料的是,在这点上Blackfin似乎占有优势。两种处理器都能轻松处理该工作量,所以要靠其它因素,例如功耗,来决定哪种处理器更适合。在这样低的频率下,泄漏功耗在整体功耗中占很大一部分,这就使得频率差异的相关性减小。Blackfin的泄漏功耗要低得多,所以在这种情况下它可能胜出。然而,随着处理负载的增加,动态功耗部分越来越占据主导地位。要不了多久,六倍的频率差异将使SHARC占尽优势。在极端情况下,Blackfin方案会用完全部的MIPS,从而使SHARC成为唯一的选择。
也可以采用不同的方式来实现与所需近似的混响。我们可以仅保留主项,而将其它项归零。假设我们想要保持1%的项非零,这将需要一个1920抽头的FIR。该滤波器不能再用FFT,因为FFT不能选择性地计算项目,它必须计算所有值。因此,我们将直接实现这个FIR滤波器。这意味着每个输出样本需要1920次乘法。为了保持24位精度,这一数字要乘以6。Blackfin每个周期能做两次16位乘法,因此除以2可得到周期数。总而言之,每个输出需要5760个周期。要计算全部的工作量,要将其乘以通道数2,再乘以96000 MHz的采样速率,同时为开销和新功能预留一定的余量。这样,我们得到2GHz的工作频率。将99.9%的脉冲响应项归零后,还需要200 MHz。该频率仍远远高于SHARC基于FFT的解决方案。或许更重要的是,当我们将99.9%的项归零时,滤波器的性能就已经开始受到损害。
在现实生活中,一个专业音效处理器拥有比混响更多的功能。要想全面权衡定点/浮点之间的利弊,您必须全面分析处理过程。这不是一个简单的任务,但是混响实例清楚表明了浮点解决方案的功耗可以低于定点解决方案功耗,尽管数据手册中的功率数据暗示了相反的结果。
免提便携式设备中的自动回波抵消器
自动回波抵消器常常使用FFT来计算与参考信号的相关性。您可能会认为,因为使用了FFT,所以浮点处理器是当然的更好选择。然而,前文实例中的FFT与这里的FFT有一个重要的区别。在前文实例中,您会注意到FFT/IFFT的结果。因此,我们必须保持高质量的SNR。而在回波抵消器中,FFT仅仅用来计算回波的时间延迟,实际上并不更改音频流。所以,可以不执行16位精度的FFT计算。这将大大改变周期计数分析。
此外还必须注意,回波抵消器常用于免提便携式设备中,这就给功率预算提出了严格限制。浮点处理器泄漏功耗过大,因此不是可行的选择。
我们可以看到,对于一些极端情况,定点与浮点处理器的选择很明确。然而,在中间地带,分析可能会变得相当复杂。如果您还有其它方面的考虑,比如用于减轻处理负荷的硬件加速、减小编程复杂度(可影响产品上市时间)、最大dI/dt值(可影响电源去耦的成本)以及电路板布局等,事情就会变得越加复杂。不过,做这类分析是值得的,可以摆脱对于定点和浮点处理器的先入为主观念。也许您会惊讶地发现,原来您一直使用的是错误类型的处理器。
作者简介
Boris Lerner是ADI公司资深DSP应用工程师。他的专业领域是DSP和通信硬件、软件、算法、信号完整度、FPGA设计、电路板级设计和调试。Boris拥有科罗拉多大学博尔德分校数学学士和博士学位,以及佛罗里达大学(盖恩斯维尔)电气工程硕士学位。
暂无评论