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.

[参考译文] TMS320F280025C:"if a <= B)"消耗19个系统时钟

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1461791/tms320f280025c-if-a-b-consumes-19-system-clocks

器件型号:TMS320F280025C
Thread 中讨论的其他器件:C2000WARE

工具与软件:

请使用随附的可直接在280025演示板上运行的测试用例。  使用具有编译器 V21.6的 CCS11.1。  

结果是 :

如果(VAC_rms_fil_DS3 <= PR_VL1_DS3)     共占用 13个系统时钟

 

++VAC_PR_VL1_cnt_ds3;  消耗 12个系统时钟

 

如果(VAC_rms_fil_DS3 >= PR_VH1_DS3)  消耗19个系统时钟

我尝试将变量类型从 float32_t 更改为 float、也尝试更改为常量(例如更改为  if (VAC_rms_fil_DS3 <= 574.6)  )、并且执行时间仍然相同。

请说明为何执行一个简单的比较行会消耗13或19个系统时钟。 谢谢!

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

    e2e.ti.com/.../Quentin_5F00_CompareLineTime_5F00_280025.zip

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

    上面附有测试用例

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

    感谢您提交测试用例。  要浏览...

    如果(vac_rms_fil_ds3 >= PR_VH1_DS3)  消耗19个系统时钟

    我添加了构建选项 -- src_interlist .  这会使编译器保留自动生成的汇编文件、而不是将其删除。 它与源文件具有相同的名称、但文件扩展名更改为 .asm .  添加注释以便于理解。  检查该文件显示...

    ;----------------------------------------------------------------------
    ; 129 | if (VAC_rms_fil_DS3 >= Pr_VH1_DS3)                                     
    ;----------------------------------------------------------------------
            MOV32     R0H,@||Pr_VH1_DS3||   ; [CPU_FPU] |129| 
            MOV32     R1H,@||VAC_rms_fil_DS3|| ; [CPU_FPU] |129| 
            CMPF32    R1H,R0H               ; [CPU_FPU] |129| 
            MOVST0    ZF, NF                ; [CPU_FPU] |129| 
            B         ||$C$L20||,LT         ; [CPU_ALU] |129| 

    我无法解释为什么 MOVST0 需要说明。  但我相信这是必要的。  至于其余指令、编译器没有其他方法来计算此表达式。

    额外的周期可能是由于内存等待状态、或者条件分支如何影响流水线等原因造成的  我不是 C28x CPU 这些细节方面的专家。  因此、我将通知这些专家有关该主题的信息。

    谢谢。此致、

    -George.

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

    您好、George:

    非常感谢您的答复。 请参阅以下内容:

    1.能否详细说明"如何 添加构建选项  -- src_interlist  " 以保留.asm 文件?

    2.如何缩短执行时间?

    昆廷

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

    您好、George:

    非常感谢您的答复。 请参阅以下内容:

    1.能否详细说明"如何 添加构建选项  -- src_interlist  " 以保留.asm 文件?

    2.如何缩短执行时间?

    昆廷

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

    Quentin,

    MOV32、CMPF32和 MOVST0是单周期指令(spruhs1c)

    如果采用分支、b 为7周期指令;如果未采用分支、则为4周期指令(spru430)

    因此、根据 George 粘贴的汇编代码片段、如果获取分支、这会需要4 + 7 = 11个周期。

    没有办法缩短这种情况。 我们有2个负载、1个比较器和1个分支。

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

    尊敬的 Sira:

    感谢您的答复。  

    1. 能否详细说明一下"如何 添加构建选项  -- src_interlist  " 以保留.asm 文件? 乔治在他的帖子中提到了这一点。
    2. 我想更改编译器优化级别以查看是否可以缩短执行时间。 "3-过程间优化"和"4-整个程序优化"之间有何区别?

    谢谢!

    昆廷

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

    尊敬的 Sira:

    这是同一线程的问题
    现在我正在用  Quentin 调试这个问题、我们经历了一个奇怪的现象。 我们向 C2000ware 示例代码中添加了一些代码(如 Quentin 的测试用例项目)。 当我们第一次测试时、一切都很顺利、"如果 A <= B"消耗了12个系统时钟。 然而、当 我们单击"reset device"、然后在 CCS 中单击"Restart" 时、相同的代码"if A <= B"需要69个周期、这比第一次测试明显要多。

    Quentin 将在稍后发送测试图片。 您能帮助分析一下吗? 谢谢!

    此致、

    Julia

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    详述"如何 添加构建选项  -- src_interlist  " 要保留.asm 文件?[/QUOT]

    请参阅 在 CCS 中查找编译器选项一文。  其中讨论了如何在 CCS 构建对话框中查找编译器选项。  使用了 -- src_interlist .

    我想更改编译器优化级别以了解它是否可以缩短执行时间。

    在大多数情况下、添加 -- opt_level=3. 或者 -- opt_level=4. 提高性能。  但是、对于该特定的比较表达式、这些选项不会影响生成的代码。

    谢谢。此致、

    -George.

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

    您好、George:

    谢谢你给我写文章。

    昆廷

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

    大家好、George 和 Sira、

    正如 Julia 所述、CCS 展示了一个简单的"如果(VAC_rms_fil_DS3 <= PR_VL1_DS3)"、有时会 消耗12个系统时钟、但其他时间会消耗69个系统时钟。 请查看连接的屏幕截图并提供建议。

    谢谢!

    昆廷

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

    昆廷,朱莉娅,

    如果正在评测同一代码时、该数字应保持一致、但这种差异可能意味着 CCS 中的器件复位后 CCS 时钟会出现一些差异。 这是 CCS 团队必须要评论的问题。

    边注-启用优化后、通常不能在 C 代码中的任意点放置断点。

    谢谢!

    SIRA