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.

[参考译文] TMS320F280041:编译器优化级别是否会影响算术运算的结果以及如何避免?

Guru**** 2538950 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1026492/tms320f280041-does-the-compiler-optimization-level-affect-the-result-of-arithmetic-operation-and-how-to-avoid

器件型号:TMS320F280041

您好专家、  

客户进行 了以下 算术运算 、 没有进行优化、优化级别分别为3。  

意外的是、上述两种情况的结果是不同的。 如果开启优化、"t_f32Temp552"等于0x3F3DE3DF、而"t_f32Temp55max"等于0x3F3DE3DE、如下图所示。 但是、如果关闭 优化、它们都等于 0x3F3DE3DE。  

 ( 优化级别为3)

顺便说一下、客户 CCS 的版本是 v7.3.0、  CGT 的版本  如下所示:  

客户想知道如何避免这个问题。   

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

    高静、您好。

    优化时的两个值在误差范围内。 我可以想到的一个原因是、在优化时、编译器可能会将"540.0f / Lwin_VOL_RANGE"替换为将加载到 t_f32Temp55max 中的计算值、而编译器可能会将其确定为0x3F3DE3DF。 在关闭优化的情况下、硬件同时对 t_f32Temp552 t_f32Temp55max 进行计算、从而产生相同的十六进制值。

    您可以通过查看生成的装配体来确认这一点。

    谢谢、

    Ashwini

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

    谢谢、Ashwini。 我了解这种差异背后的原因、并已将此原因返还给客户。 但他们希望 进一步了解如何编码、以便在不同的编译优化级别下获得相同的结果。 如有可能、请提供一些建议。 非常感谢!  

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

    你好、

    对迟交的答复表示歉意。 请为两个优化级别发布编译器生成的汇编代码吗? 我将与编译器团队跟进、以获取有关是否可以通过优化生成完全相同的结果的输入。

    谢谢、

    Ashwini

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

    您好、Ashwini、为两个优化级别生成的汇编代码如下所示。 非常感谢!

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

    你好、

    谢谢你。 我将跟进编译器团队。

    谢谢、

    Ashwini

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

    对于包含问题除法表达式 的源文件、请按照文章如何提交编译器测试用例中的说明进行操作。

    谢谢、此致、

    乔治

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

    /cfs-file/__key/communityserver-discussions-components-files/171/8686.main.pp.txt

    您好、George、以上是预处理的源文件、请检查。 顺便说一下、客户的编译器版本是 v16.9.4。

    编译器选项显示在以下链接中、一个用于不进行优化、 另一个用于优化级别3:

    /cfs-file/__key/communityserver-discussions-components-files/171/with-optimization-level-of-3_5F00_-compiler_2D00_option.txt

    /cfs-file/__key/communityserver-discussions-components-files/171/without-optimization-_5F00_-compiler_2D00_option.txt

    感谢你的帮助。  

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

    感谢您提交测试案例。  我能够再现非常相似的结果。  我提交了问题 EXT_EP-10499 以进行调查。  欢迎您访问该链接。

    谢谢、此致、

    乔治

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

    感谢您的帮助、George! 我会跟踪它。  

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

    顺便说一下、 客户想知道是否有一些编码模式或编码标准 来避免这些问题。 他们担心优化的一致性、因此他们需要一种一致性保证编码和编译器设置方法。 如果是、请分享该方法。  

    谢谢。  

    将会  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="493764" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1026492/tms320f280041-does-the-compiler-optimization-level-affect-the-result-of-arithmetic-operation-and-how-to-avoid/3803085 #3803085"]客户想知道是否有一些编码模式或编码标准 来避免这些问题

    我不知道您报告的问题的解决方法。  确定问题的特征后、可能会制定一种解决方法。   

    更概括地说... 使用优化不应导致程序行为的差异。  如果确实如此,我们认为这是一个应该加以解决的问题。

    谢谢、此致、

    乔治

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

    将、

    这不是优化问题。  这是使用--fp_mode 作为宽松而不是严格的问题。 为了避免上述问题、您需要使用严格的 fp_mode。  

    有关严格与宽松的更多详细信息、请参阅 spru514w 编译器用户指南 第2.3.3节、其中列出 了编译器提供的许多放宽选项。   

    这是性能与精度之间的折衷。

    此致、
    Greg

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

    谢谢、Greg。 有道理。  

    此致

    将会