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 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中忘记了一个编译选项吗?
此致
您好!
Unknown 说:为了测试这个问题,我使用一个使用相同编译选项但只有编译器 cl2000匹配所需版本的脚本。
您能解释一下这句话吗? 您是否在两个 CCS 版本之间使用完全相同的编译器版本? 您是否在两个版本之间传递相同的编译器选项?
Unknown 说:要测试软件、我在算法执行期间启用了一个 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 指令。
谢谢。此致、
-乔治