精华内容
下载资源
问答
  • dsp C优化-(四)

    2014-04-14 15:26:18
    最后还要知道: 第三级优化(-O3),效率不高(经验),还有一些诸如用一条读32位的指令读两个相邻...还有要看看你的c程序怎么编的,如果里面有很多中断的话,6000可以说没什么优势。还有,profiler的数据也不准确的

    最后还要知道:

    第三级优化(-O3),效率不高(经验),还有一些诸如用一条读32位的指令读两个相邻的16位数据等,具体情况可以看看C优化手册。但这些效率都不高(虽然ti的宣传说能达到80%,我自己做的时候发现绝对没有这个效率!65%还差不多),如果要提高效率只能用汇编来做了。还有要看看你的c程序是怎么编的,如果里面有很多中断的话,6000可以说没什么优势。还有,profiler的数据也是不准确的,比实际的要大,大多少不好说。还有dsp在初始化的时候特别慢,这些时间就不要和pc机相比了,如果要比就比核心的部分。

     

    关于profile:

    C6x的Debug工具提供了一个profile界面。在图9中,包括了几个重要的窗口,左上角的窗口是显示出我们写的C语言,可以让我们知道现在做到了哪一步。右上角的窗口显示的是C6x所编译出来的汇编语言,同样的我们也可以知道现在做到了哪一步。左下角的窗口是命令列,是让我们下指令以及显示讯息的窗口。而中间的profile窗口就是在profile模式下最重要的窗口,它显示出的项目如下表:
    表5:profile的各项参数[8]
    字段 意义
    Count被呼叫的次数
    Inclusive 包含子程序的总执行clock数
    Incl-Max 包含子程序的执行一次最大clock数
    Exclusive 不包含子程序的总执行clock数
    Excl-Max 不包含子程序的执行一次最大clock数
    利用这个profile模式我们可以用来分析程序中每个函数被呼叫的次数、执行的时脉数等等。用这个分析的结果,我们就可以知道哪个函数所花费的时脉最多,是可以再改进的,而针对它来作最佳化。

     

    汇编代码级的优化
     在经过C代码的优化之后,还不能满足性能上的要求,则可以通过profile
    clock工具找出效率很低的部分,使用线性汇编重新改写。再通过汇编优化器编译,汇编优化器从输入的线性汇编代码中,完成以下功能:
     ● 寻找可以平行执行的CPU指令。
     ● 在软件流水线期间,处理流水线标号。
     ● 分配寄存器的用法。
     ● 分配功能单元。
     TI提供的汇编优化器可以得到很高的效率,一般可以满足性能上的要求。

    优化中的问题
    在优化过程中,总是要对程序进行一定的改动,这样经常会出现一些问题。
    1) 优化结果的验证
    优化过的程序往往不知道是否运行正确,这就需要加以验证。一般采用的办法就是通过测试序列来验证。测试序列指的是对于不同的算法所取的一组特殊的数据,这些数据可以准确的反映算法的特性。测试序列中每组数据包括输入数据和输出数据,通过对输入数据的运算,把结果与输出数据进行比较,判断程序的正确性。一些常见的算法,一般都提供了测试序列。还有一些,没有测试序列。这时就需要根据算法的特点,自己构造测试序列,进行验证。构造的时候,注意序列最好有几组,数据最好有一定的长度,这样验证的更准确。
    2) 内存泄漏的问题
     C64X系列DSP的内部存储空间有1MB,其中程序和数据还有CPU的二级缓存将共享这片空间,因此当程序的运行不正常时,很有可能就是内存泄漏造成的。因此,在程序设计中,应尽量不用指针,同时注意进行边界检测。

    程序设计的一些方法
    程序设计时,一切以满足实际的要求为目标。在实际的设计中,除了优化能够提高性能以外,还可以采取其他的办法,利用DSP的特性,提高程序的运行性能,满足实际的设计要求。
    1) 把程序和经常要用的数据放入片内RAM
    片内RAM
    与CPU
    工作在同一时钟频率,比片外RAM性能高得多。因此把程序放在片内可以大大提高运行的速度。同时对于一些经常要用到的数据,放入片内,也会节省处理时间。
    2) 通过DMA技术搬移数据
    对于C64X芯片,其片内RAM有1MB,但是对于一些大型的图像处理算法而言,仍可能是不够的,因此经常通过DMA技术,把需要用到的数据搬入片内,把不需要的搬到片外,可以大大的提高程序的运行速度。
    3) 

    CACHE的使用
    增大CACHE,可以明显的提高性能。但是C64X系列DSP中程序和数据还有CACHE共享片内RAM,因此增大CACHE,就减小了实际的片内可用空间,设计中需要注意

    展开全文
  • DSP什么快?

    千次阅读 2013-11-22 10:11:31
    突然想知道DSP为啥快,一直觉得哈佛结构、硬件乘法器等方面导致的,没有较完整的... 原来DSP在硬件结构上优化,使得其运算效率非常高。  下面我从各家DSP硬件共同点、各家硬件特点、和通用CPU共同点来说说D

            突然想知道DSP为啥快,一直觉得是哈佛结构、硬件乘法器等方面导致的,没有较完整的认识,后来上网发现有位大神总结了下,特此粘贴过来与大家分享下,在此感谢那位大神的无私分享

           为什么说DSP特别适合数字信号处理呢?为什么它的运算速度这么快?
         原来DSP在硬件结构上做了优化,使得其运算效率非常高。
        下面我从各家DSP硬件共同点、各家硬件特点、和通用CPU共同点来说说DSP硬件结构。其实你只要掌握了任何一家的DSP硬件结构,就可以触类旁通理解其他厂家的DSP,因为只要是DSP,就有很多共同点。当然,各家也有各自的特色,我们一并对比介绍。通用CPU上也有加快运算速度的优化结构,这里列举的硬件结构主要是指和通用CPU不一样的部分。
        
        1、DSP采用哈佛结构总线,程序存储器和数据存储器分开,取指和数据访问同时进行。通用CPU采用冯.诺依曼型总线,程序和数据总线共享同一总线,取指和数据访问不能并发。
        2、流水线操作(pipeline),取指、译码、寻址、取数、运算、存储流水操作,等效单周期完成指令,而通用CPU通常一条指令需要几个时钟周期才可以完成。当然,流水线操作引入了一些新问题,比如需要在适当位置加NOP空操作指令或者调整指令位置以确保流水操作能顺利完成。
        3、独立的硬件乘法器。卷积、数字滤波、FFT、相关、矩阵运算等算法中,大量重复乘法和累加。MAC指令(取数、乘法、累加)在单周期内完成(通过流水线等效实现),比用软件乘法快很多。
        4、独立的DMA总线和控制器。通用CPU中的总线是共享的,DMA使用了总线则CPU就要等待,而DSP中的DMA使用独立的DMA总线通路,可以和CPU core并发操作。独立的源、目的地址寄存器、长度寄存器,自动计算地址和循环。光DSP处理器运算速度快还不行,还与数据吞吐率有关。
        5、中心算术逻辑单元CALU。DSP中有很多ALU,如DMA控制器、地址发生器中就含有可做乘加运算的ALU,这样他们就不用占用CALU了。DSP中的ALU非常简单,地址、乘法、移位都不管了,只管算术与逻辑运算。
        6、移位:通用CPU每次移动1bit,DSP可在一个机器周期内左移/右移多个比特。可用来对数字定标,使之放大或缩小以保证精度和防止溢出,还可以用来做定点数和浮点数之间的转换。
        7、溢出:通用CPU中,溢出发生后,设置溢出标志位,不带符号位时回绕,带符号位时反相,带来很大误差。此时,溢出已经发生,无法挽回。DSP把移位输出的最高位(MSB)存放在一个位检测状态寄存器中,检测到MSB=1时,就通知下一次会发生溢出,此时溢出还未发生,来得及采取措施防止。
        8、数据地址发生器(DAG)。取数不光要占用数据总线,还要计算地址。通用CPU数据、地址的产生和数据的处理都由ALU来完成。DSP中,设置了专门的数据地址发生器(实际上就是专门的ALU),来产生所需要的数据地址,节省公共的ALU时间。CALU主要做运算而不是做这些辅助的工作。
        9、外设(peripherals)
            时钟发生器、定时器、软件可编程等待状态发生器、GPIO、同步串口与异步串口、JTAG。
        10、CSSU比较、选择、存储单元。用于维特比译码,通信中常用算法,专门设计一个硬件单元用于此算法。
        11、片内具有快速RAM,通常可通过独立的数据总线在两块中同时访问。片内RAM同片外存储器相比,有以下优点:(1)片内RAM的速度较快,可以保证DSP无等待运行;(2)对于C2000/C3x/C5000系列,部分片内存储器可以在一个指令周期内访问两次,使得指令可以更加高效;(3)片内RAM运行稳定,不受外部的干扰影响,也不会干扰外部。 4)DSP片内多总线,在访问片内RAM时,不会影响其它总线的访问,效率较高。
        12、具有低开销或无开销循环及跳转的硬件支持。
        13、快速的中断处理和硬件I/O支持。
        当然,与通用微处理器相比,DSP芯片的其他通用功能相对较弱些。
        
        以上讲的是各家DSP共同点,其实,每家厂商或者同一家厂商的不同系列的DSP都有各自特点。比如:MOTOROLA DSP56系列是24bit(3字节),而TI是16bit(2字节)。MOTOROLA分成X、Y两块数据存储器同时操作,提高速度,而TI是在一个周期内访问2次,异曲同工。TI的C2000(C20x、C24x)侧重于控制;C5000(C54x、C55x)侧重于低功耗、有效性能(手机使用可以省电延长电池寿命,不用风扇散热体积小);C6000(C62xx、C67xx、C64xx)侧重于高性能;OMAP侧重于嵌入式。此外,还有一些专用DSP和多处理器DSP芯片。
        
        CACHE是DSP和通用处理器都使用的技术,就不多讲了。经过前面的讨论,再遇到新的DSP就不怕了。
        
        此外还要注意:
        定点DSP和浮点DSP,定点DSP中经常要考虑溢出问题,浮点基本不用考虑。浮点用指数表示,定点用小数表示。浮点DSP功耗高、设计难度大、价格高,手机里用定点DSP,功耗小、成本低。
        多处理器接口
        VLIW超长指令字,TMS320C6701高达256bit指令要分到8个处理单元去处理,效率高。
        
        预测图表,型号、制程(微米)、MIPS、RAM、Price、Power(mW/MIPS)
        
        DSP的发展受到应用需求多样化和集成电路技术发展的双重推动。更高的运行速度和信号处理速度;多DSP协同工作;更方便的开发环境;DSP Core;更高性价比;更广泛应用。
        
        总之,DSP硬件结构均围绕着怎么样提高数字信号处理器运算速度这个目的设计的。由此可见,DSP的确比通用处理器和单片机MCU更适合更有效地做实时数字信号处理。

    展开全文
  • ----1.SDRAM的burst mode SDRAM一种命令型动作的设备,就算读写资料只有一个也要先下命令才可以用,为了增加工作效率,就产生了一种传送一个命令,写多个数据的模式,这就是burst mode。...为什么precharge
    ----1.SDRAM的burst mode SDRAM是一种命令型动作的设备,就算读写资料只有一个也要先下命令才可以用,为了增加工作效率,就产生了一种传送一个命令,写多个数据的模式,这就是burst mode。 burst mode是一种利用内部列地址发生器来工作的高速读写模式,只要设置最开始的列地址,后面的地址就可以通过内部的列地址发生器来自动生成。 2.为什么要做precharge
    
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 130
精华内容 52
关键字:

dsp优化是做什么