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.

[参考译文] 编译器:优化程序是否正确

Guru**** 2559610 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/590088/compiler-whether-the-optimized-program-is-correct

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

看看图片。

a=a*b+c*d;two ADDSP.L1 出现在汇编代码中,为什么?它不是两个MPYSP和一个ADDSP?

并且c=c*d+c*d;只显示一个ADDSP。

我使用-O1优化级别。我不知道优化代码是否不正确?

我还想知道我是否可以 同时使用.M1和.M2单位,这样我就可以 将速度提高一倍。(例如,a=b*c,d=e*f,两 倍乘法,我是否可以同时使用.M1和.M2单位同时 执行两倍乘法。 如果正确,请告诉我如何实现。)

最后,如何制作汇编代码"||"(并行??)。

期待您的回复!

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

    I use the -O1 optimization levels.I Wonder if the optimized code is incorrect?[/QUOT]没有看到完整的代码不确定。

    所发布的代码在循环中显示以下表达式:

    a=a*b+c*d;
    c=c*d+c*d; 

    有关编译器优化器生成正确代码的原因,可能有一些解释:

    1)子表达式c*d在每个循环出现三次,优化器已识别该情况,并且每个循环仅执行一次乘法。

    2)如果b的值在循环过程中没有更改,并且b在循环外部被初始化为两个,则优化器可能已将子表达式a*b有效地替换为a+a

    在调试器中运行代码以对其进行测试时,调试器是否显示了变量的正确值?

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

    我使用-O1优化级别。[/QUOT]

    这意味着编译器不使用C6000最重要的优化(称为软件流水线)。  为此,您需要使用--opt_level=2或更高版本。  (等效的短格式选项为-o2或-O2。)  

    我建议您使用-o3 -MW -s构建,然后检查生成的汇编输出。  它出现在与源文件同名的文件中,但扩展名为.asm。  这比在CCS中查看拆卸更容易。  有关这些选项的详细信息,请参阅Wiki文章 C6000编译器:推荐的编译器选项

    谢谢,此致,

    -George