您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [求助]为什么用汇编写一个累加的函数功能需... 
本帖共有432个阅读者
发表帖子 发表投票 回复主题
[求助]为什么用汇编写一个累加的函数功能需要的cycle会比原来的C语言写的长呢?
kiwi2014(论坛新手)
kiwi2014
头衔:社区公民
帮派:无帮无派
帖数:15
金钱:275
积分:27
注册时间:2014/3/4
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助]为什么用汇编写一个累加的函数功能需要的cycle会比原来的C语言写的长呢?

如题所示,其实我把这个累加计算换成了汇编写的,所需要的cycle却变多了。(前提,DSP软件勾选了“Enable optimization”)

for(n = 0; n < 65; n++)
      {
       dctArrayOut+= a[n]*cos_11[n];                                
      }


换成了:

.section program;

.global _a_dot_c_asm;

_a_dot_c_asm:

P0 = R0;
I0 = R1;
P1 = 64;
R0 = 0;
NOP;
R1 = [P0++];
R2 = [I0++];
LSETUP (begin_loop, end_loop) LC0 = P1;

begin_loop: R1 *= R2;
             R2 = [I0++];
end_loop: R0= R0 + R1 (NS) || R1 = [P0++] || NOP;

R1 *= R2;
R0 = R0 + R1;
R0 = R0>>19;
RTS;

_a_dot_c_asm.end:



实在想不通,为什么cycle会变多呢?按理说,汇编比C要快啊?

求各位大神帮忙解答一下谢谢~


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/4/27 2:44:14
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5195
金钱:34806
积分:6378
注册时间:2011/6/7
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
不懂,没用过汇编。以前专门做算法优化的同事,我看都是拿汇编来优化算法,效果明显。

我是OP...
等级:管理员 参考IP地址:*.*.*.*
2014/4/27 7:59:25
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
C语言的被编译器优化了,你编译代码后,鼠标放到该C函数前面,右键选择 Mixed

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/4/27 11:26:44
kiwi2014(论坛新手)
kiwi2014
头衔:社区公民
帮派:无帮无派
帖数:15
金钱:275
积分:27
注册时间:2014/3/4
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
Andy你好,右键选择mixed之后看到了C语言语句相应的汇编语句。我想我的情况就是因为之勾选了“Enable Optimization”,软件自己优化的能力比我强,所以会变慢。我后来试了在没有勾选的情况下自己汇编优化,发现cycle减少了很多。那像我这样汇编的能力比不上软件自身的人,还有自己汇编优化的必要吗?

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/4/28 1:43:49
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
开优化后,C代码的执行顺序会被打乱,所以你单独测试这个函数,看到的cycles值,也可能是不准确的。你可以建一个工程,只包含这个C代码,执行看看效率。可以比较下C编译器生成的汇编和你的有何区别。
通常写代码都是C语言,优化过程是:
1。代码结构调整,这个对执行效率影响很大,代码结构合理,速度会快很多。
2。对内存资源分配,将常用的函数和数组放到L1,其他的分配到SDRAM中。
3。开启优化开关和cache开关。
做完这些后才是汇编。因为DSP最快可以执行4条汇编指令,所以在汇编优化时,将一些可以执行的指令尽量放在一起。说白了,汇编就是在扣时钟。
建议你找汇编优化的一些文档看看,上面会有优化的一些技巧。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/4/30 9:35:56
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159243 Call, 1 Queries, Processed in 0.015625 second(s),