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.

[参考译文] TMS320F2812:使用 CCS v11.20时的软件速度慢于使用 CCS v3.3时的软件速度

Guru**** 657930 points
Other Parts Discussed in Thread: TMS320F2812, CCSTUDIO
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1266649/tms320f2812-sw-slower-with-ccs-v11-20-than-with-ccs-v3-3

器件型号:TMS320F2812
主题中讨论的其他器件: CCStudio

您好!

 希望你能帮我。

我必须从旧工程修改 TMS320F2812的程序。 项目是使用 CCS V3.3编译的、我使用 CCS v11.2.0

我的问题是、使用 CCS v11.2.0编译的相同代码比使用 CCS v3.3编译的相同代码更慢。 为了测试它、我使用使用使用相同编译选项、但仅编译器 cl2000匹配所需版本的脚本。

为了测试我的软件、我在算法执行期间启用了一个 GPIO、这个算法必须在每个20µs 上执行。 对于 CCS V3.3的编译器、我的算法在12µs 中执行、但对于 CCS v11.2.0、我的算法在 30µs 中执行。

我不明白为什么会有这样的差距:我在 CCS v11.2.0中忘记了一个编译选项吗?

 

此致

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

    您好!

    为了测试这个问题,我使用一个使用相同编译选项但只有编译器 cl2000匹配所需版本的脚本。

    您能解释一下这句话吗? 您是否在两个 CCS 版本之间使用完全相同的编译器版本? 您是否在两个版本之间传递相同的编译器选项?

    要测试软件、我在算法执行期间启用了一个 GPIO、而且必须在每个20µs 上执行。 使用 CCS V3.3的编译器、我的算法在12µs 中执行、但使用 CCS v11.2.0时、它在 30µs 中执行。

    您具体是如何进行基准测试的?

    您是否也在 CCS 11.2.0中运行3.3编译的程序?

    谢谢

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

    你好

    感谢您的答复。

    我实际上不使用 CCS。 我只使用通过窗口命令界面启动的脚本。 为了编译我的软件、我从 CCSv3.3安装存储库或 CCSv11.2安装存储库调用 cl2000编译器、如下所示:

    c:/CCSTUDIO_v3.3/c2000/cgtools/bin/cl2000 -g -k -q -ss -pdsw225 -al -as -o2 -include_path="example_path"  --advice:all     - diag_warning=225 --编译_wrap =off --display_error_number --abi=coffabi --c_src_interlist -

    c:/ti/ccs1120/ccs/tools/compiler/ti-cgt-c2000_21.6.0.LTS/bin/cl2000  -g -k -q -ss -pdsw225 -al -as -o2  -include_path="example_path"- -advice:performance=all  --diag_warning=225     - diag_wrap =off --display_error_number --abi=coffabi --c_src_interlist --asm_directory="my_directory="my_list_directory"-"mT_file"-"mt_obj_directory"-"mT_file_directory="mt_file"--"mT_file_directory"--"mt_obj_directory_file_directory"  

    因此、对于这两个版本、只有 v3.3或 v11.2.0和编译器选项之间的编译器路径变化是完全相同的。

    在我的测试中、我在运行算法的同时使用示波器来测量 GPIO 的激活时间。

    更准确地说、我的卡上不提供 JTAG 接口、因此我使用 UART 接口(SCI)对 DSP 进行编程。

    此致

    克默里

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    因此只有编译器路径在 v3.3或 v11.2.0之间发生变化
    C:/CCStudio_v3.3/c2000/Cquote tools/bin/cl2000[/url][#userid=575628"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1266649/tms320f2812-sw-slower-with-ccs-v11-20-than-with-ccs-v3-3/4797552:quote"

    我可以看到您在 CCS 11.2.0中使用的 C2000编译器版本为21.6.0。

    在 CCS 3.3中、您使用的编译器是哪个版本?

    在我的 CCS 3.3安装包中、我可以看到它附带了 CCS 编译器5.2.1版、

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

    您好!

    实际上、对于 CCS v3.3、编译器版本为 v4.1.3、对于 CCS 11.2.0、编译器版本为 v21.6.0

    此致  

    克默里

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    实际上、对于 CCS v3.3、编译器版本的确为 v4.1.3;对于 CCS 11.2.0、编译器版本为 v21.6.0 [/引号]

    这在版本上有很大不同。 可能不同版本之间发生了一些变化、导致出现差异、如某些默认设置。 我会提请编译器专家注意该主题、以便进一步调查。

    谢谢

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

    我单击了错误... 如何重新打开此主题?

    我只想添加:我还使用 TI 网站上提供的旧版本进行了测试,编译器 v5.2.1存在同样的问题。

    此致

    克默里

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

    我想将问题的范围缩小为运行速度更慢的1个函数。  为此、我将使用代码大小作为执行时间的代理。  这不是精确的。  但对于该分析、不需要精确的精度。   

    请按照文章 查找代码大小增加的源代码中的说明查找 大小增加最多的函数。  目视检查编译器生成的汇编代码中的一些函数。  对哪一个速度最慢的问题进行最佳猜测。  有关包含该函数的源文件、 请按照 如何提交编译器测试用例一文中的说明进行操作。  但执行两次。  再使用较旧的编译器、再使用较新的编译器。

    我很抱歉让你做这么多的工作。  但我认为没有更好的方法来解决该问题。

    谢谢。此致、

    -乔治

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

    您好!

    感谢您的反馈。

    我按照您的指示、以*。pp 格式生成了最不同的文件。 在这些文件的开头有许多不同的内容。

    你需要看他们吗?

    谢谢。此致、

    克默里

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

    假设您只挑选了一个源文件进行预处理。  该源文件包含您猜已经减慢大多数编译器速度的函数。  对于该源文件、 请按照 如何提交编译器测试用例一文中的说明进行操作。  不是一次、而是两次。  旧版编译器。  然后、第二次使用较新的编译器。  可产生两种不同的 .pp 文件。  请确保它们具有不同的名称、以反映所用编译器的版本。  将其放入 zip 文件中、然后 将其附加到您的下一篇文章中。

    谢谢。此致、

    -乔治

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

    是的、我按照您的链接中的说明进行操作。  我将以私人消息的形式向您发送 pp 文件。

    此致

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

    感谢您发送两个测试用例。  我无法运行它们。  我将两者都构建成汇编代码、并比较了几种不同的方式。  根据这一比较、我认为执行时间不会有太大差异。  实际上、编译器版本21.6.0.LTS 生成的代码应更快一些。  关键函数具有极少的循环或 IF 语句。  它通常从开始到结束运行一次。  有一大组行没有循环或 IF 语句。  这似乎是函数中计算最密集的部分。  我分离了这些行的指令并进行了比较。  指令总数相似。  读取或写入存储器的指令总数也是类似的。  版本21.6.0.LTS 具有更少的指令。  但效果不是很好。   

    因此、我相信编译器不是造成性能差异的原因。  必须有别的东西。

    考虑从执行的存储器的访问速度、或读取或写入的存储器的访问速度。  此访问速度是否可能有所不同、这也说明了性能差异?

    谢谢。此致、

    -乔治

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

    您好!
    感谢您的分析。
    实际上、为了节省更多的执行时间、我从进程中删除了 for 循环。
    我使用相同的软件代码在同一块电路板上测试我的软件、包括*。cmd 文件。
    由于我的问题是算法执行时间,DSP 是否可能未使用21.6.0 LTS 的算术逻辑单元(ALU)?

    此致、

    克默里

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否可能 DSP 没有使用其算术逻辑单元(ALU)

    否。   

    您已使用编译器选项进行构建、 -ss 。  这会使编译器保留编译器生成的汇编文件。  此文件与 C 源文件同名、扩展名更改为 .asm 。  请对其进行检查、以查看编译器生成的指令。  两个版本的编译器都使用许多 ALU 指令。

    谢谢。此致、

    -乔治