This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/TMS320F2808:C2000:优化级别-02

Guru**** 2587365 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/607686/compiler-tms320f2808-c2000-optimization-level--02

器件型号:TMS320F2808

工具/软件:TI C/C++编译器

你好

在我们的其中一个产品中、我们最近将编译器 C2000版本从3.09更改为 v6.4、对于该版本、编译器开关方面的唯一显著变化与优化相关(均使用-O2级别)。 新版本添加循环展开(SPRU514H 第55页显示了-O2的编译器选项)。
我的问题是、是否可以在特定优化级别中禁用一个优化选项?

在这种情况下、禁用循环展开、同时仍使用-O2。

此致
Bob 熏肉  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    总的来说、展开由-opt_for_speed 编译器选项控制。 --opt_for_speed=2、1或0将禁止完全展开。 --opt_for_speed=3可能会谨慎展开(我不是100%确定 C2000的功能)。 --opt_for_speed=4是默认值,由于它侧重于速度而不是大小,因此将以相当积极的方式展开。 --opt_for_speed=5更加激进。

    在源代码本身中、您可以 在单个循环之前添加"#pragma UNROLL (1)"以禁止其展开、或提供不同的数字以准确控制其展开的方式。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您对本主题的反馈、这似乎是 我们 想要的。

    但是 、我们 仍然不确定这对优化级别2 (-O2)的使用有何影响。

    实际上 、我们想要的是以绿色突出显示优化选项、但以红色突出显示优化选项。

     

    •-opt_level=off 或-Ooff

    –不执行优化

    •-opt_level=0或-O0

    –执行控制流图简化

    –将变量分配给寄存器

    –执行循环旋转

    –消除未使用的代码

    –简化表达式和语句

    –扩展对内联声明的函数的调用

    •-opt_level=1或-O1

    执行所有-opt_level=0 (-O0)优化、此外:

    –执行本地复制/常量传播

    –删除未使用的赋值

    –消除本地常用表达式

    •-opt_level=2或-O2

    –执行所有-opt_level=1 (-O1)优化、此外:

    –执行循环优化

    –消除全局通用子表达式

    –消除全局未使用的分配

    –执行循环展开

     

    根据您之前的答复、我们了解我们可以优化速度、最终 可以消除循环展开、但这会如何影响其他优化选项?

    这是否可以与特定的优化级别(例如-O2)一起使用?

     

    此致
    Bob 熏肉

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不可以、没有命令行选项专门用于禁用独立于其他大小/速度折衷的展开。

    什么问题是展开导致您?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是一个航空电子设备项目、涉及大量软件验证和认证。

    因此、问题与向后兼容性相关 、并尝试在分析…方面节省一些精力

    此致
    Bob 熏肉

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    --opt_for_speed 可以视为调制--opt_level,方法是在使用给定级别时指明您希望更喜欢速度或代码大小。 --opt_level=2 --opt_for_speed=2 (这似乎是我们的目标)将执行常规的-O2优化、但会避免某些会增加代码大小的情况。 尤其是、它可以抑制展开、但也不会对除法、CSE 和控制流执行某些特定的子集。 (在其他目标上、但不是在 C2000上、它也会影响内联的完成量。)

    我们没有单独控制特定通道的选项。

    如果您*真的*希望避免展开,您可能会考虑6.2.11版,因为首先为6.4.x 启用了展开 不过、这两个版本都是旧的;最旧的完全支持的版本是15.12.x