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

[复制链接]
3602|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 | 显示全部楼层
没看明白
tikelu 发表于 2011-10-5 13:43 | 显示全部楼层
仔细拜读
lfzhou1006 发表于 2011-10-7 10:40 | 显示全部楼层
好好学习,天天向上! 感谢您的分享,好资料,收藏了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

27

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部