user_ourdev 发表于 2013-2-28 15:40:01

为什么DSP的指令执行速度可以高于主频?

一直搞单片机,不太明白这里,以TI C6000系列DSP为例,1000MIPS,主频才300MHZ左右。实际计算指令消耗的时间应该以MIPS为准吧?

mcu5i51 发表于 2013-2-28 15:50:07

流水线,分支预测,并行处理等,一个时钟周期可以处理几个指令,但是编程不好的话可能会影响性能

user_ourdev 发表于 2013-2-28 16:05:00

本帖最后由 user_ourdev 于 2013-2-28 16:08 编辑

mcu5i51 发表于 2013-2-28 15:50 static/image/common/back.gif
流水线,分支预测,并行处理等,一个时钟周期可以处理几个指令,但是编程不好的话可能会影响性能 ...

哦~记得上学时学的有的汇编指令一条可以完成乘法和加法两件事,应该就是这个意思吧?

wye11083 发表于 2013-2-28 16:19:39

一般的DSP都有四条以上并行流水线,即使用手工调整的汇编代码,DSP是可以达到至少4X主频的性能的。但是问题是没几个人会去手工优化,C编译器一般是不支持并行指令的。所以绝大多数你会发现你写的程序是蜗牛。

xuancqu 发表于 2013-2-28 16:33:50

原理我不懂,但是编程的时候设置PLL分频寄存器可以实现
Specify the PLL control register (PLLCR) and divide select (DIVSEL) value.

rodney 发表于 2013-2-28 16:40:19

领教了!

netawater 发表于 2013-2-28 17:01:20

xuancqu 发表于 2013-2-28 16:33 static/image/common/back.gif
原理我不懂,但是编程的时候设置PLL分频寄存器可以实现
Specify the PLL control register (PLLCR) and...

这个是晶振倍频吧。

monkerman 发表于 2013-2-28 17:43:23

哈佛结构 + 特殊的DSP指令 + 指令包(每次取指256位) + 每个时钟周期可并行执行 8 条指令(或6条浮点指令) +深度流水线.

你说 1000MIPS算啥??? C6000系列中最高的可是接近 6000MIPS/1800MFLOPS的.

user_ourdev 发表于 2013-3-1 09:13:31

monkerman 发表于 2013-2-28 17:43 static/image/common/back.gif
哈佛结构 + 特殊的DSP指令 + 指令包(每次取指256位) + 每个时钟周期可并行执行 8 条指令(或6条浮点指令) +...

1000MIPS举个例子而已。我觉得MIPS这个指标(每个周期并行执行多条指令)主要是做些特殊运算时才能达到,如果是单纯的MOV或者加法还是一个周期一条指令。

redroof 发表于 2013-3-1 09:50:04

本帖最后由 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个结果,这样一个时钟就解决了。。。)
当然,人工排这种流水线指令是一种很杀脑细胞的活^_^如果不是绝对必要,尽量少干。。。

siriux 发表于 2013-3-1 10:20:47

水印。。

monkerman 发表于 2013-3-1 10:23:15

user_ourdev 发表于 2013-3-1 09:13 static/image/common/back.gif
1000MIPS举个例子而已。我觉得MIPS这个指标(每个周期并行执行多条指令)主要是做些特殊运算时才能达到, ...

DSP本来就是用于做特殊运算的.

所以.....搞DSP的, 程序优化是门很大很难很有挑战的学问.......不单单是算法层面的...还有语言结构级, 线性汇编/汇编, 编译器........ 都要针对DSP的特殊结构来进行.

ps: MIPS只是一个指标, 宣传作用更大些.

simple_wyj 发表于 2013-4-25 17:17:26

主要还是看指令集结构和处理器结构。比如C6000的一些处理器为超长指令字结构,一个指令包往往包含多条指令,这样的话单位时间内执行的指令条数显然会超过时钟主频

YFM 发表于 2013-4-28 13:03:55

求楼主照片。
页: [1]
查看完整版本: 为什么DSP的指令执行速度可以高于主频?