EDN China > 技术文章 > 电源技术 > 显示驱动 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

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

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

四、

?????? 1、源代码:

void fir_fxd1(short input[], short coefs[], short out[])

{

??? int i, j;

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

??? {

????? for (j = 0; j < 16; j++)

??????????? out[i*16+j]= coefs[j] * input[i + 15 - j];

?? }

}

?????? 2、改编后的代码:

void fir_fxd2(const short input[], const short coef

s[], short out[])

{

?? int i, j;

?

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

??? {

????? for (j = 0; j < 16; j++)

??????????? out[i*16+j]= coefs[j] * input[i + 15 - j];

?? }

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

?????? C6000编译器如果确定两条指令是不相关的,则安排它们并行执行。 关键字const可以指定一个变量或者一个变量的存储单元保持不变。这有助于帮助编译器确定指令的不相关性。例如上例中,源代码不能并行执行,而结果改编后的代码可以并行执行。

?????? 4、技巧:

?????? 使用const可以限定目标,确定存在于循环迭代中的存储器的不相关性。

五、

?????? 1、源代码:

void vecsum(short *sum, short *in1, short *in2, unsigned int N)

{

??? int i;

?

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

??????? sum[i] = in1[i] + in2[i];

}

?????? 2、改编后的代码:

void vecsum6(int *sum, const int *in1, const int *in2, unsigned int N)

{

??? int i;

??? int sz = N >> 2;

?

??? _nassert(N >= 20);

?

??? for (i = 0; i < sz; i += 2)

??? {

??????? sum[i]?? = _add2(in1[i]? , in2[i]);

??????? sum[i+1] = _add2(in1[i+1], in2[i+1]);

??? }

}


上一页1234下一页
?? ?? ??


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

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

软件优化? C6000? 总结?

相关文章

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