打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ccs编译器优化出错
发信人: zd (霞飞), 信区: DSPTech       
标  题: ccs2.0优化会出错吗?
发信站: BBS 水木清华站 (Thu Oct 24 22:17:52 2002), 站内信件

写了一个线性汇编的代码,让ccs自动优化。
-o0优化的时候结果正确,
-o2和-o3就都不对了,自动优化可能会出现这种问题吗?

--

※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 166.111.81.62]
发信人: xiaomin (softsignal), 信区: DSPTech       
标  题: Re: ccs2.0优化会出错吗?
发信站: BBS 水木清华站 (Thu Oct 24 22:49:05 2002)

哦,-O0 其实就没有做优化吧。

个人认为,CCS 的C 编译器其实已经非常excellent 了,无论是从
优化效率还是从对开发者的友好程度而言。但我们知道,编写一个
好的DSP C 编译器难度是很大的。不排除CCS 的C 编译器会发生bug,
这一点,即使是面向指令集非常规范、正交的RISC 芯片的C 编译器
也不能避免。

我曾经遇到过CCS C 编译器优化结果出错的情况,不过那非常特殊,
而且我的程序是纯C 程序。至于含有inline assembly 的程序,倒
没有遇到过。这要看编译器处理inline assembly 语句的策略了。
特别如果包含inline assembly 的函数控制结构比较复杂,比如有
一堆if/else/for ... 等等,也许出问题的概率会大一些。这倒不能
怪编译器,因为要支持灵活的inline assembly 的确比较麻烦。

zd 兄可以试试改写一下你的程序,例如尽量把包含inline assembly 
的函数的控制结构变得简单,如果是单基本块会更好。zd 兄不妨试
试,看看能否解决你的问题呢?

【 在 zd 的大作中提到: 】
: 写了一个线性汇编的代码,让ccs自动优化。
: -o0优化的时候结果正确,
: -o2和-o3就都不对了,自动优化可能会出现这种问题吗?

--
One for all, all for one.






--

※ 修改:·xiaomin 於 Oct 24 22:49:35 2002 修改本文·[FROM: 211.161.41.101]
※ 来源:·BBS 水木清华站 smth.org·[FROM: 211.161.41.101]
发信人: zd (霞飞), 信区: DSPTech       
标  题: Re: ccs2.0优化会出错吗?
发信站: BBS 水木清华站 (Fri Oct 25 14:51:43 2002), 站内信件

非常感谢xiaomin兄的建议,写了这么多真是让我感动。                             
  
不过我的程序不是inline assembly,而是ti手册上说的那种linear assemble语句      
也就是不事先指定具体的寄存器名,而是用变量名来代替寄存器名,也不写并行的语句  
所有指令按照需要的顺序来写。编译优化的时候再由编译器来给各变量分配寄存器等资源
,优化的时候由系统自动调整指令的顺序,自动指定哪些指令来并行处理。我用这样的语
句写了一个完整的函数。                                                        
这样写的目的主要是我为了省事,虽然我也很奇怪优化后运算结果不对,但是试了好几次
都是这样。看了系统优化的结果(输出的.asm文件),-o0的结果诚如你所说没有做优化
,只是分配了寄存器资源,所有语句都不是并行的。-o2和-o3的结果中,系统针对循环
的部分做了优化,语句顺序都被打乱,所以我怀疑是优化的时候因为打乱顺序造成结果
错误。
//btw 我的程序是纯靠软件仿真的,也就是在一台pc机上用ccs来仿真。目的只是要实现 
一种数据解码算法。
【 在 xiaomin (softsignal) 的大作中提到: 】
: 哦,-O0 其实就没有做优化吧。
: 个人认为,CCS 的C 编译器其实已经非常excellent 了,无论是从
: 优化效率还是从对开发者的友好程度而言。但我们知道,编写一个
: 好的DSP C 编译器难度是很大的。不排除CCS 的C 编译器会发生bug,
: 这一点,即使是面向指令集非常规范、正交的RISC 芯片的C 编译器
: 也不能避免。
: 我曾经遇到过CCS C 编译器优化结果出错的情况,不过那非常特殊,
: 而且我的程序是纯C 程序。至于含有inline assembly 的程序,倒
: 没有遇到过。这要看编译器处理inline assembly 语句的策略了。
: 特别如果包含inline assembly 的函数控制结构比较复杂,比如有
: 一堆if/else/for ... 等等,也许出问题的概率会大一些。这倒不能
: ...................

--

※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 166.111.81.62]
发信人: xiaomin (softsignal), 信区: DSPTech       
标  题: Re: ccs2.0优化会出错吗?
发信站: BBS 水木清华站 (Sat Oct 26 22:47:58 2002), 站内信件

>> 不过我的程序不是inline assembly,而是ti手册上说的那种linear 
   assemble语句, 也就是不事先指定具体的寄存器名,而是用变量名来
   代替寄存器名...
   
   哦,其实与inline assembly 等价吧,目的就是为了在C 程序中嵌入
   汇编指令, hehe。看来确实可能是编译器的问题,不过我对TI 的
   并行指令不熟悉,看看各位大侠的意见呢?


【 在 zd (霞飞) 的大作中提到: 】
: 非常感谢xiaomin兄的建议,写了这么多真是让我感动。                             
: 不过我的程序不是inline assembly,而是ti手册上说的那种linear assemble语句      
: 也就是不事先指定具体的寄存器名,而是用变量名来代替寄存器名,也不写并行的语句  
: 所有指令按照需要的顺序来写。编译优化的时候再由编译器来给各变量分配寄存器等资源
: ,优化的时候由系统自动调整指令的顺序,自动指定哪些指令来并行处理。我用这样的语
: 句写了一个完整的函数。                                                        
: 这样写的目的主要是我为了省事,虽然我也很奇怪优化后运算结果不对,但是试了好几次
: 都是这样。看了系统优化的结果(输出的.asm文件),-o0的结果诚如你所说没有做优化
: ,只是分配了寄存器资源,所有语句都不是并行的。-o2和-o3的结果中,系统针对循环
: 的部分做了优化,语句顺序都被打乱,所以我怀疑是优化的时候因为打乱顺序造成结果
: 错误。
: ...................

One for all, all for one.








※ 修改:·xiaomin 于 Oct 26 22:49:24 修改本文·[FROM:  211.161.41.101]
※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 211.161.41.101]
发信人: ToALice (献给艾丽丝), 信区: DSPTech       
标  题: Re: ccs2.0优化会出错吗?
发信站: BBS 水木清华站 (Sat Oct 26 23:04:30 2002), 站内信件

的确存在优化出错的情况
说出错也不确切,只能说
优化器没有准确理解你的代码意图
解决办法是调整代码结构,以及内存使用

【 在 xiaomin (softsignal) 的大作中提到: 】
:    assemble语句, 也就是不事先指定具体的寄存器名,而是用变量名来
:    代替寄存器名...
:    哦,其实与inline assembly 等价吧,目的就是为了在C 程序中嵌入
:    汇编指令, hehe。看来确实可能是编译器的问题,不过我对TI 的
:    并行指令不熟悉,看看各位大侠的意见呢?
: One for all, all for one.
: ※ 修改:·xiaomin 于 Oct 26 22:49:24 修改本文·[FROM:  211.161.41.101]
: ※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 211.161.41.101]


--

※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 211.69.197.65]
发信人: zd (霞飞), 信区: DSPTech       
标  题: Re: ccs2.0优化会出错吗?
发信站: BBS 水木清华站 (Sun Oct 27 19:37:41 2002), 站内信件

多谢各位的指点。确实是因为优化器错误理解了我的意图导致不该放到前面的语句被提前
我做的修改就是多设了一个.reg变量,使得程序的流程更加清晰,再次优化以后就对了。
//真的很感谢大家
【 在 ToALice (献给艾丽丝) 的大作中提到: 】
: 的确存在优化出错的情况
: 说出错也不确切,只能说
: 优化器没有准确理解你的代码意图
: 解决办法是调整代码结构,以及内存使用


--
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
嵌入式C/C++开发中的代码优化(翻译版)
const和inline来代替#define
c 代码优化总结
内联函数
ARM软件优化,从1s到10ms
ESP8266无人机-初始化过程
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服