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.

[参考译文] 编译器/OMAP-L137:激活优化时编译器8.x不再工作

Guru**** 2578975 points
Other Parts Discussed in Thread: MATHLIB

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/629217/compiler-omap-l137-compiler-8-x-no-longer-works-when-activating-optimization

部件号:OMAP-L137
主题中讨论的其他部件:MATHLIB

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

大家好,

我有一个相当复杂的信号处理项目。 到目前为止,我使用的是编译器版本7.4 .x (最新版本是7.4 .23)。 我开发了代码,但没有优化编译器来跟踪功能。 然后,我激活了编译器优化,同样的功能可以在较低的测量负载下工作-一切都正常。

最近,我不得不从编译器版本7切换到版本8。 现在,在没有使用优化时,代码就可以工作。 但是,在打开优化时,代码不再按预期工作(o2级-全局优化)。 我已经更改了一些代码片段,并取消激活了某个特定文件的优化,使代码再次正常运行,但我认为这不是一个真正可取的解决方案。

代码是中断服务例程中的连续操作流程-不涉及对多线程的依赖。 此外,不使用restrict关键字。 我使用TI mathlib和DSPLIB。 另外,如果使用8.1 4或8.2 1版本的编译器,则会有不同:显示的不需要的行为不同。 我还尝试激活各种编译器选项,例如,保持浮点运算顺序的选项。 这些都没有真正解决问题。

其他用户是否知道这类问题? 如何跟踪故障原因? 也许,编译器版本8所做的优化被破坏了?

此致

Hauke

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

    虽然您不是特别说,但我可以从编译器的版本号中得知您在使用C6000编译器时遇到了问题,而不是ARM编译器时遇到了问题。

    不幸的是,这里没有足够的细节说明可以采取具体行动。  我们需要您进一步缩小问题的范围。

    请对原因保持开放心态。  这可能是编译器中的错误。  但我也看到过这样的情况,最终导致用户错误。  有时,错误始终存在,但只能通过不同的编译器版本或生成选项暴露。

    我已更改了一些代码片段并取消激活了某个特定文件的优化,以使代码再次正常运行[/QUOT]

    在这种情况下,请重点关注这一特定文件。  使用常规优化构建所有内容,包括此文件。  但只禁用一个功能的优化。  使用#pragma function_options(function_name,“--opt_level=off”)执行此操作。  请在 C6000编译器手册中阅读有关该pragma的更多信息。  然后测试。  希望这是可行的,您最终将发现只有一个功能在优化后会导致问题。  然后,您可以使用该文件创建测试用例,并将该函数作为焦点。  为此,请按照文章 How to Submit a Compiler Test Case中的说明进行操作

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,George,
    感谢您回答我的问题。 是的,您说得对,我谈到了C6000编译器版本8。 很抱歉不清楚。

    我找到了针对所述问题的解决方法。 当编译器跨多个for循环进行优化时,似乎会出现问题,例如,

    void myFunction()函数

    对于(i=0;i < 512;i++)

    //做一些事情
    }

    对于(i = 0;i < 512;I++)

    //执行其他操作
    }
    }

    我已经看到了输出值偏差和nan输出,并且确实在调试模式下跟踪了正确的代码功能。 但你说得对,我不能保证不会有任何未被发现的错误。

    对我有效的解决方案是将部分功能放入专用功能中,以细分优化长度。 与编译器7相比,跨循环优化是否是编译器8的新功能? 我在编译器7中没有发现这些问题。

    遗憾的是,由于代码高度机密,我没有机会准备编译器测试用例。

    谢谢,顺祝商祺

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

    不幸的是,这...

    void myFunction()

    对于(i=0;i < 512;i++)

    //做一些事情
    }

    对于(i = 0;i < 512;I++)

    //执行其他操作
    }
    }

    .仍然过于模糊。  没有足够的细节可供采取行动。   

    很遗憾,由于代码高度机密,我没有机会准备编译器测试用例。[/QUOT]

    我理解。  但是,测试案例是解决此问题的唯一方法。  请记住,您不必发送所有内容,只需预处理一个密钥文件的形式。  您不必将其发布到论坛上。  你可以把它发送给我。

    谢谢,此致,

    -George