dsk6711线性汇编奇怪的问题(去掉一条存储指令能快10倍)

来源:互联网 发布:男友追踪器软件 编辑:程序博客网 时间:2024/04/30 11:01

 发信人: admireO (新学期新形象), 信区: DSPTech       


我的数据处理完后,在算法循环里有一条指令:
||    STW     .D2T1 ImgRet,*DestAddr--
存储数据到内部RAM中,我用的是两层循环,外部1024次,内部256次。
现在的问题是,如果我的算法注释掉这条存储指令,时间上要提高10倍!!
仔细考虑了一下,两者的差别不可能有这么大,不知道是怎么回事!请大虾们指点。
我算法时间计算方法是,通过设置CPU定时器来实现的。这样计算应该没什么问题吧
请大虾指点!!!!



发信人: Naicen (天行者), 信区: DSPTech     

  
   这种结果并不奇怪,C6000优化器对多层循环的优化能力本来就差,在循环中访问
存储器容易产生存储器依赖性(Memory Dependency),是优化之大忌,会严重影响循环
展开和指令的并行安排。


发信人: admireO (新学期新形象), 信区: DSPTech       

那请问大虾该怎么处理呢?遇到这种问题?
可是我已经在线性汇编开头部分加上了这句:
.no_mdep   ;no memory dependency
是不是就表示没有存储器依赖性?
请大虾指教!!!


发信人: floatwind (游戏人生), 信区: DSPTech       

这个好理解,不过他得那个
STW  后面的几个参数怎么我在6000里没见过啊?


发信人: floatwind (游戏人生), 信区: DSPTech       

呢这个.no_mdep是那里的指令啊?
怎么我在6000里没见过啊?


发信人: admireO (新学期新形象), 信区: DSPTech       
线性汇编里不用指定寄存器名的,用labels可以,编译器会自动映射

发信人: Naicen (天行者), 信区: DSPTech       
   .no_mdep是在你确定你的程序中没有存储器依赖性的时候,用它来告诉优化器不需要
考虑存储器依赖,允许优化器进行更大胆的优化,但如果你的程序中存在存储器依赖性,
用这个指令就可能产生错误的优化结果。
    你的问题恐怕没有什么简单的解决办法,你可以看看Programmer's Guide或C Compi_
ler User's Guide中关于解决这种问题的解释,这通常需要具体分析你的代码上下文和
执行环境,难度可能会很大。老实说,我也没什么经验。

转自http://www.smth.edu.cn/bbsanc.php?path=%2Fgroups%2Fsci.faq%2FDSPTech%2Fprograming%2Fsoftyouhua%2F6711youhua谢谢这几位