返回信息流我用ccs,测了一下,两个int类型的数做乘法,要消耗17个时钟周期左右。(两个float类型的,相乘,要500左右个时钟周期。。。)我是用C语言写的。是不是说,把数都乘上一个比较大的系数,比如100000,把浮点数转化为int类型的,然后再计算就比较省时间呢?求指导,万分感谢!
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #12233同步于 2012/5/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
求指导,在定点DSP中,两个float类型的数相乘,代价太大
FengChao
2012/5/12镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
传说DSP能再一个时钟周期完成一次乘法和一次加法?我的2812datasheet上说,是16位*16位的乘法。这种高效的算法,是不是只有用汇编写?
我要在150个时钟周期内,完成一系列的操作,但是我用CCS跑了下,貌似要大概180个时钟周期才能搞定…如果能用那种高效的乘法加法器,应该就能完成了。
求指导~(记得看邮箱。。。)
【 在 nickluchen 的大作中提到: 】
: 对的,没错,先做定点化。定点DSP上就别想着跑浮点程序了……
不是传说啊。。。乘加是基本的DSP指令,如果你的算法很独特又要高效那只好自己调优
了。先用C写逻辑,再看编译出来的汇编,再修改。。。
【 在 FengChao (会当凌绝顶,一览众山小) 的大作中提到: 】
: 传说DSP能再一个时钟周期完成一次乘法和一次加法?我的2812datasheet上说,是16位*16位的乘法。这种高效的算法,是不是只有用汇编写?
: 我要在150个时钟周期内,完成一系列的操作,但是我用CCS跑了下,貌似要大概180个时钟周期才能搞定…如果能用那种高效的乘法加法器,应该就能完成了。
: 求指导~(记得看邮箱。。。)
: ...................
如果是高端的DSP,有比较高效的内联函数可以直接调用,可以选择合适函数,都是做了汇编优化的,做定点乘法很快,freescale dsp有,2812没有用过,不清楚
如果没有内联函数,是不是就要自己看汇编程序,然后再优化?。。。╮(╯▽╰)╭
【 在 coming 的大作中提到: 】
: 如果是高端的DSP,有比较高效的内联函数可以直接调用,可以选择合适函数,都是做了汇编优化的,做定点乘法很快,freescale dsp有,2812没有用过,不清楚
C6000上做乘累加效率较高,虽然DSP没有像ARM那样单独的乘累加指令,但是通过add和mpy指令组合效率也很高(C6000上最好是循环能流水起来效果才明显,因为有多个功能单元要尽量提高并行性)。C2000系列是16位MCU吧,不知道有没有intrinsic,如果有的话,直接在C程序中调用intrinsic函数就很接近写汇编代码运行的效率了。
邮件我刚刚回你了~
【 在 FengChao 的大作中提到: 】
: 传说DSP能再一个时钟周期完成一次乘法和一次加法?我的2812datasheet上说,是16位*16位的乘法。这种高效的算法,是不是只有用汇编写?
: 我要在150个时钟周期内,完成一系列的操作,但是我用CCS跑了下,貌似要大概180个时钟周期才能搞定…如果能用那种高效的乘法加法器,应该就能完成了。
: 求指导~(记得看邮箱。。。)
: ...................