为什么DSP的指令执行速度可以高于主频?
一直搞单片机,不太明白这里,以TI C6000系列DSP为例,1000MIPS,主频才300MHZ左右。实际计算指令消耗的时间应该以MIPS为准吧? 流水线,分支预测,并行处理等,一个时钟周期可以处理几个指令,但是编程不好的话可能会影响性能 本帖最后由 user_ourdev 于 2013-2-28 16:08 编辑mcu5i51 发表于 2013-2-28 15:50 static/image/common/back.gif
流水线,分支预测,并行处理等,一个时钟周期可以处理几个指令,但是编程不好的话可能会影响性能 ...
哦~记得上学时学的有的汇编指令一条可以完成乘法和加法两件事,应该就是这个意思吧? 一般的DSP都有四条以上并行流水线,即使用手工调整的汇编代码,DSP是可以达到至少4X主频的性能的。但是问题是没几个人会去手工优化,C编译器一般是不支持并行指令的。所以绝大多数你会发现你写的程序是蜗牛。 原理我不懂,但是编程的时候设置PLL分频寄存器可以实现
Specify the PLL control register (PLLCR) and divide select (DIVSEL) value. 领教了! xuancqu 发表于 2013-2-28 16:33 static/image/common/back.gif
原理我不懂,但是编程的时候设置PLL分频寄存器可以实现
Specify the PLL control register (PLLCR) and...
这个是晶振倍频吧。 哈佛结构 + 特殊的DSP指令 + 指令包(每次取指256位) + 每个时钟周期可并行执行 8 条指令(或6条浮点指令) +深度流水线.
你说 1000MIPS算啥??? C6000系列中最高的可是接近 6000MIPS/1800MFLOPS的. monkerman 发表于 2013-2-28 17:43 static/image/common/back.gif
哈佛结构 + 特殊的DSP指令 + 指令包(每次取指256位) + 每个时钟周期可并行执行 8 条指令(或6条浮点指令) +...
1000MIPS举个例子而已。我觉得MIPS这个指标(每个周期并行执行多条指令)主要是做些特殊运算时才能达到,如果是单纯的MOV或者加法还是一个周期一条指令。 本帖最后由 redroof 于 2013-3-1 09:53 编辑
user_ourdev 发表于 2013-3-1 09:13 static/image/common/back.gif
1000MIPS举个例子而已。我觉得MIPS这个指标(每个周期并行执行多条指令)主要是做些特殊运算时才能达到, ...
C6000每个时钟8条指令好像是这样分配的:可以做4个普通ALU指令(MOV,加减,逻辑操作等等),加上2个Load/Store,加上2个乘法/MAC,因为内部8个功能单元就是这样设计的。
浮点型的好像有2个功能单元只能做整数运算,另外6个单元可作浮点,所以浮点的MIPS是乘6,而整数MIPS乘8
如果你能把指令排成跟它要求的一样,并且无依赖性,就可以一个时钟执行,如果排不出这样的指令,只能空掉某些执行单元。
平常实际上如果能平均并发4条指令,已经是很NB的了。。。
笨一些的算法,最坏情况下只能当作单指令来执行,比如你读入一个数据,对它计算,然后写回,然后读入下一个数据......
(聪明的做法是在一个循环核心里面处理多个数据:读入第3个数据,算第2个数据,写回第1个结果,这样一个时钟就解决了。。。)
当然,人工排这种流水线指令是一种很杀脑细胞的活^_^如果不是绝对必要,尽量少干。。。 水印。。 user_ourdev 发表于 2013-3-1 09:13 static/image/common/back.gif
1000MIPS举个例子而已。我觉得MIPS这个指标(每个周期并行执行多条指令)主要是做些特殊运算时才能达到, ...
DSP本来就是用于做特殊运算的.
所以.....搞DSP的, 程序优化是门很大很难很有挑战的学问.......不单单是算法层面的...还有语言结构级, 线性汇编/汇编, 编译器........ 都要针对DSP的特殊结构来进行.
ps: MIPS只是一个指标, 宣传作用更大些. 主要还是看指令集结构和处理器结构。比如C6000的一些处理器为超长指令字结构,一个指令包往往包含多条指令,这样的话单位时间内执行的指令条数显然会超过时钟主频 求楼主照片。
页:
[1]