打印

TI DSP实用技巧2-单精度浮点向量乘加

[复制链接]
2673|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
adam02|  楼主 | 2011-9-23 21:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果有长度为512的INT型数组a和b,希望对a和b做乘家,返回和,你会用哪种方法?
大部分人闭上眼睛马上就会想到下面的代码
int i;
float sum = 0;
for(i=0; i<512; i++)
{
    sum += a[i] * b[i];
}
这种方法很好理解,但是效率不高。
推荐以下的做法:对a和b数组采用双精度浮点读取,再按32位高位和低位数值分别处理。因为C6000 CPU的两个数据通路各有一个乘法器,可以在一个cycle内执行两条32位乘法才,所以下面循环的乘累加运算可以在一个cycle中执行完毕,效率显然要优于上面的代码。
int i;
float sum0 = 0;
float sum1 = 0;
for (i=0; i<512/2; i++)
{
    sum0 += _itof(_hi(a[i])) * _itof(_hi(b[i]));
    sum1 += _itof(_lo(a[i])) * _itof(_lo(b[i]));
}
return sum0 + sum1;
类似的做法可扩展至向量的加法、减法、乘法运算。

相关帖子

沙发
lilihua0721| | 2011-9-30 22:53 | 只看该作者
很显然是第二种方式好嘛,但是不好理解

使用特权

评论回复
板凳
黎明前奏| | 2011-10-4 19:55 | 只看该作者
不错很好

使用特权

评论回复
地板
tikelu| | 2011-10-5 13:43 | 只看该作者
没看明白

使用特权

评论回复
5
tikelu| | 2011-10-5 13:43 | 只看该作者
仔细拜读

使用特权

评论回复
6
lfzhou1006| | 2011-10-7 10:40 | 只看该作者
好好学习,天天向上! 感谢您的分享,好资料,收藏了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

27

帖子

0

粉丝