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.

[参考译文] 编译器/EVMK2G:性能评测代码。 这些结果是否合理?

Guru**** 2611705 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/582643/compiler-evmk2g-profiling-code-are-these-reasonable-results

器件型号:EVMK2G

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

您好!

我在 EVMK2G 的 DSP 上直接运行一些代码(使用电路板上的 JTAG 仿真器)。  我不是很熟悉 DSP 编程、理论上更少。  但是、我想对一些代码进行配置、以确保它可以进行时序限制。  我正在使用配置文件时钟(CCS 右下角的时钟)。

在执行该操作之前、我想测试一个微不足道的代码行的性能评测。

uint8_t triv = 0;
triv++; 

我很明显地得到了 TRIV++线路的17个时钟周期。  只是增量、没有其他东西。

有人能告诉我这行代码是否合理?

这可能是一个愚蠢的问题、但我在过去看到过一个描述器错误、当时我的时钟结果非常不准确。  由于某种原因、错误似乎是来去的。

在继续分析我们的代码之前、我想100%确定分析器时钟是否正常工作。

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

    我们将对此进行研究。 反馈将发布在此处。

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

    您应该在 L2存储器上获得7个周期(如果 CPU 停止从慢速外部存储器读取数据、它可能会有所不同)。

    CCS 时钟工具不适合为单个语句花费时间。

    当您使用 CCS 测量单个语句时、时钟工具还会测量清除处理器管道所需的时间(嗯、"清除"可能不是最佳定义)、例如、单个 NOP 似乎需要6个周期而不是1个周期。

    例如、尝试测量8个或更多连续增量:您应该看到单个增量周期计数将收敛到7。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Justyn,

    对于 DSP 级基准测试、DSP 有几个计数器寄存器提供非常精确的基准测试。 请查看 TSCH 和 TSCL 寄存器。 有许多应用手册介绍了使用这些寄存器进行基准测试的情况。

    www.ti.com/.../core-benchmarks.page
    www.ti.com/.../sprac13.pdf

    如果您在处理器 SDK 安装中查看 DSPLIB、您应该能够找到${DSPLIB_INSTALL_PATH}/packages/ti/src 下的代码 /C66/*_d.c 文件

    从这些寄存器获得的值将是 DSP 周期计数。

    CCS 时钟在许多情况下都可以得到焊球驻车估计值、但我认为它在一定程度上依赖于主机时钟、因此不是很精确。 您可以在 CCS 论坛上查询时钟的准确性。

    如果您使用的是 TI RTOS、则可以使用 SOC 计时器来测量时钟。 有一个在 CCS 中使用 TI RTOS 进行基准测试的模板、您可以使用以下步骤在 Resource Explorer 中找到该模板:
    processors.wiki.ti.com/.../Processor_SDK_RTOS_Examples

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

    您能否查看汇编代码并验证增量是否确实需要一条指令?

    您可以通过选择 properties->compiler->Advanced Options->Assembly Option 并选中 Keep the assembly 来启用汇编代码。 汇编代码将位于调试(或发布)目录中

    请报告您看到的内容


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

    我真的不知道如何读取汇编语言、但我认为在这里是发生 TRIV++调用的地方。  它周围也有一些背景。

    $C$RL28:;发生呼叫{C6_TIMER_READ}{0};[]|173|
    DADD .L2X 0、A5:A4、B5:B4 ;[B_L66]|173|
    STDW .d2T2 B5:B4、*SP (16) ;[B_D64P]|173|
    .dwpsn 文件"/home/osp/dev/osp-keystone/AUDK2G_loopback/src/main.c、第174行、第2列、IS_stmt、ISA 0
    LDBU .d2T2 *SP (32),B4 ;[B_D64P]|174|
    NOP 4. ;[A_L66]
    添加 L2 1、B4、B4 ;[B_L66]|174|
    STB .d2T2 B4、*SP (32) ;[B_D64P]|174|
    .dwpsn 文件"/home/osp/dev/osp-keystone/AUDK2G_loopback/src/main.c、第175行、第2列、IS_stmt、ISA 0
    $C$DW$91 .dwtag DW_TAG_TI_BRANCH
    dwattr $C$DW$91、DW_AT_LOW_PC (0x00)
    dwattr $C$DW$91、DW_AT_NAME ("c6_timer_read_and_diff")
    dwattr $C$DW$91、DW_AT_TI_CALL
    

    以下是具有正确行号的 c 代码的上下文:

    C6_TIMER_START ();
    TIME = C6_TIMER_READ ();
    TRIV++;
    DIFF = C6_TIMER_READ_AND_DIFF (TIME); 

    我连续执行了一组增量、似乎时钟节拍数趋向于~2、而不是7。

    此外、正如您可能看到的、我找到了这篇关于使用 TSCL 和 TSCH 寄存器进行性能评测的文章、并使用了他的辅助函数。  它们表现得非常好: