EDN China > 技术文章 > 微处理器与DSP > 多媒体处理器 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

C6000软件优化经验总结(1)

来源:无忧电子开发网?? 2006年07月05日 ?? 收藏0

?????? 3、优化方法说明:

?????? C6000编译器提供的intrinsic 可快速优化C代码,intrinsic用前下划线表示同调用函数一样可以调用它,即直接内联为C6000的函数。例如,在上例的源代码中没有使用 intrinsics,每一行C代码需多个指令周期,在改编后的代码中,每一行代码仅需一个指令周期。例如,

?????? “aReg_ll = (Word40)_mpyu(L_var1, L_var2)>>16”中“_mpyu”就是一个intrinsics函数,它表示两个无符号数的高16位相乘,结果返回。C6000支持的所有intrinsics指令及其功能参见《TMS320C6000系列DSP的原理与应用》一书的第265、266页,该书还提供了另外的例子。这些内联函数定义在CCS所在的C6000\CGTOOLS\Include目录下

的C6X.h文件中。下面这个例子是C6000的 “Programmer's Guide”上提取的使用intrinsics优化C代码的例子。

?????? 源代码:

int dotprod(const short *a, const short *b, unsigned int N)

{

??? int i, sum = 0;

??? for (i = 0; i < N; i++)

??????? sum += a[i] * b[i];

??? return sum;

}

?????? 改编后代码:

int dotprod(const int *a, const int *b, unsigned int N)

{

??? int i, sum1 = 0, sum2 = 0;

?

??? for (i = 0; i < (N >> 1); i++)

??? {

??????? sum1 += _mpy (a[i], b[i]);

??????? sum2 += _mpyh(a[i], b[i]);

??? }

???? return sum1 + sum2;

}

?????? 技巧:

?????? 在C语言的调试全部通过以后,可以尝试将尽可能多的语句使用intrinsics函数加以改编,尤其在循环体内,这种改编可以大幅度减少执行时间。


上一页123456下一页
?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

软件优化? C6000? 总结?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈