您的位置:控制工程论坛网论坛 » 教程与手册 » DSP优化技术(二)

xilinxue

xilinxue   |   当前状态:在线

总积分:16186  2025年可用积分:0

注册时间: 2008-06-26

最后登录时间: 2020-03-22

空间 发短消息加为好友

DSP优化技术(二)

xilinxue  发表于 2008/10/25 13:10:11      997 查看 0 回复  [上一主题]  [下一主题]

手机阅读

为了进一步改善性能,我们可以使用多个流水线。该方法称作超标量,其进一步利用了平行的概念(见图 2c)。如今某些高性能数字信号处理器(如 Intel i860)就有一个超标量设计。 



图2. 非流水线、流水线和超标量执行时间表
具备多个独立执行单元的 DSP 利用平行同时执行多个独立指令,这将为性能改善提供立竿见影的效果。关键在于找到彼此独立的"n"个不同指令。有时,我们通过硬件完成此工作,有时则通过软件来完成(编译)。超长指令字(VLIW)处理器(如 TI 的 C6200 DSP 系列产品)使用编译技术可以在 8 个独立的处理器执行单元上调度最多 8 个彼此独立的指令。噶罴涞氖菀览敌猿3=讼拗圃谧罡咚俾手拢故悄芄皇迪窒灾男阅堋P矶嗲榭鱿拢颐强梢灾匦鹿菇ㄋ惴ǎ岳眉芄沟挠攀疲佣迪侄嘀葱械ピ挠攀啤?

较之于流水线处理器而言,超标量架构可提供更多的并行处理能力。但是,如果算法或函数不能利用此并行功能的话,那么多余的管道将得不到使用,就会降低能够实现的并行量。编写用作快速运行于流水线处理器上的算法不一定能在超标量处理器上同样高效运行。举例而言,我们可以看看图 4a 所示的算法。该算法的编写利用了流水线处理器的优势。这是在串行处理器上计算多项式的常见方法,因为它不必再计算 p**8, p**7 等。这节约了周期和存储中间值的寄存器。

但就超标量器件而言,这并不是计算表达式的最佳方法。算法中的括号限制了编译器顺序计算表达式的功能。这也使得并行功能无法发挥。如果我们将此表达式分解为几个独立的表达式,那么编译器就可以在超标量器件的并行管道上以任何方便的顺序来安排这些独立的表达式。这样进行的计算利用了较少的指令周期,而采用了更多的寄存器(如图 4b 所示)。

上述实例说明了为什么编程人员必须了解器件架构、编译器以及算法,从而确定执行任何特定函数的最快方法。我们将讨论利用上述高性能设备加速函数计算的其他方法。

rp = (((((((R8*p + R7) * p + R6) * p + R5) * p + R4) * p + R3) * p + R2) * p + R1) * p

                             图 4a)

p2 = p * p
p3 = p * p * p
.
.
p8 = p * p * p * p * p * p * p * p
---------------------------------------------
R1p1 = R1 * p
R2p2 = R2 * p2
.
.
R8p8 = R8 * p8
----------------------------------------------
rp = 0.0F
rp += R1p1
.
.
rp += R8p8

                              图 4b)

图4. a)、编写可快速运行于流水线处理器上的算法。B)、 相同算法经修改后在超标量处理器上快速运行。

直接存储器存取

直接存储器存取 (DMA)是无 CPU 介入情况下访问存储器的一种方式。外设用于向内存直接写入并导出数据,这就减轻了 CPU 的负担。DMA 就是另一种类型的CPU,其唯一作用就是快速移动数据,其优势则在于 CPU 可以向 DMA 发出一些指令移动数据,随后就可以再进行原本的工作。DMA 在 CPU 运行的同时移动数据(图 5)。这实际就是另一种利用器件内置并行功能的方法。DMA 在复制大量数据时非常有用。较小的数据块无法受益,因为还要考虑到 DMA 的设置和开销时间,反倒不如直接使用 CPU 合适。但如果明智使用的话,DMA 可以节约大量时间。



图 5. 使用 DMA 而非 CPU 能够显著提升性能
由于访问外部存储器会带来很大的性能损失,且占用 CPU 的代价不菲,因此只要有可能,就应采用 DMA。最好是在实际需要数据之前就启动 DMA 操作。这让CPU 同时也有工作可做,且不用强制应用等待数据的移动。随后,当确实需要数据时,数据就已经就位了。应用应当进行检查,以确认操作成功,这将要求检查寄存器。如果操作提前完成,这将对寄存器进行一次查询,但不会产生大量工作,占用宝贵的处理时间。

DMA 的常见用法是将数据移入或移出芯片。CPU 访问片上存储器的速度大大快于其访问片外或外部存储器的速度。将尽可能多的数据放于芯片上是提高性能的最佳途径。如果被处理的数据不能全部同时放于芯片上(如大型阵列),那么数据可使用 DMA 成块地移入或移出芯片。所有数据传输都可在后台进行,同时 CPU 对数据进行实际处理。片上存储器的智能管理和布局可以减少数据必须移入、移出存储器的次数。就如何使用片上存储器开发出智能计划,在这项工作上投入时间和精力是值得的。总体而言,规则就是使用 DMA 将数据移入、移出片上存储器并在芯片上生成结果(图 6)。由于成本和空间原因,大多数 DSP 不具备很多芯片上存储器。这要求编程人员协调算法,以高效利用现有的片上存储器。

为使用 DMA 测量代码确实会产生一些性能损失。根据应用使用 DMA 的多少,代码大小会上升。如果全面启用 DMA,我们曾遇到过代码大小增长 50% 的情况。使用 DMA 还增加了复杂性和应用的同步化。只有在要求高吞吐量的情况下才应使用 DMA。但是,片上存储器的智能布局和使用以及明智地使用 DMA 能够消除大多数访问片外存储器所带来的性能损失。

1楼 0 0 回复