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.

[参考译文] TDA4VH-Q1:在 C7x DSP 上复制 DSPLIB 周期计数所需的帮助

Guru**** 2416270 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1513938/tda4vh-q1-help-needed-to-replicate-dsplib-cycle-counts-on-c7x-dsp

器件型号:TDA4VH-Q1
Thread 中讨论的其他器件:TDA4VH

工具/软件:

我们尝试针对 C7x 上的向量运算复制 DSPLIB 用户指南性能一节中报告的周期计数、但结果不匹配。  我们的问题就在最后 下面是有关 我们设置的详细信息。

  1. 在 Ubuntu 22.04.1 主机上使用 J784S4 RTOS SDK 10.01.00.04
  2. 按照以下链接中的 DSPLIB 构建说明进行了操作: https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-j784s4/10_01_00_04/exports/docs/dsplib/docs/user_guide/build_instructions_linux.html 
  3. 已遵循以下链接中的 CCS 裸机说明: https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-j784s4/latest/exports/docs/psdk_rtos/docs/user_guide/ccs_setup_j784s4.html#debugging-without-hlos-running-on-a72-rtos-only-baremetal 
  4. 使用新的 J784S4XG01EVM 修订版 PROC141E5 (001)

我们  在示例 DSPLIB_ADD (DSPLIB/examples/DSPLIB_add/) 中使用了 TSC 寄存器 DSPLIB_add_examples.cpp ) 如下面的代码片段所示、我们测量了以下内容。

 结果与 DSPBIL 用户指南(此处为 software-dl.ti.com/.../performance_summary.html  

现在有几个问题。

  1. C71x_0 的运行速度始终快于其他 DSP 内核 (C71x_1/2/3)。 这是意料之外的、这是不是? 如果不是、这是 launch.js 脚本的工件吗?  
  2. DSPLIB_ADD 是一个简单的示例、其中大小仅为 14。 因此、根据 DSPLIB 性能摘要、我预计 EVM 周期为~100、但是测量的值大约大 3 倍。 您能否帮助我了解 DSPLIB_add_examples.cpp 或 Build 命令中需要进行哪些更改才能在性能摘要中实现周期计数?

 

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

    您好、
    我正在尝试从我这边重现这个问题 我会在一天内更新您的信息。

    此致、
    Shabary

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

    您好、

    DSPLIB_add 是一个简单的示例、大小仅为 14。 因此、根据 DSPLIB 性能摘要、我预计 EVM 周期为~100、但是测量的值大约大 3 倍。 您能否帮助我了解 DSPLIB_add_examples.cpp 或 Build 命令中需要进行哪些更改以在性能摘要中实现周期计数?

    在该 DSPLIB_add_example 文件中、我们使用 TSC 计算周期计数、此处未启用高速缓存和 MMU 等功能。 但是、探究 d.c 中的 test main、它使用启用了缓存和 MMU 的 TI Profile API、这有助于降低周期数。  TI_profile.h  TI_profile.c 有关性能分析设置的更多详细信息、请参阅和文件。

    您能否通过对 DSPLIB_ADD 测试 c7x_0 并将热周期计数与 DSPLIB 用户指南中提供的计数进行比较来验证这一点。

    此致、
    Shabary

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

    感谢您的答复。 DSPLIB_ADD(代码和数据)的示例看起来可以完全适合 L2、因此如果启用了 L1P 和 L1D、我们应该能够使用更简单的代码库复制理想情况下的性能。 这是目标、因为它使我们能够将基于 TSC 的周期计数技术扩展到其他自定义 DSP 代码。

    关于您的请求、  

    您能否通过打开 DSPLIB_ADD 测试 c7x_0 并将热周期计数与 DSPLIB 用户指南中提供的计数进行比较来验证这一点。

    我在 C7X_0 和 C7X_1 上运行 test_DSPLIB_add(使用您提供的 MSMC 到 L2 的更改)并将输出连接起来。 请展示这些输出的热周期计数(重点是 C7X_0)如何映射到 DSPLIB 用户指南中的性能数据我不知道如何进行关联、因为 CIO 输出仅显示矢量大小、而不会列出每次测试运行的数据类型。 如果我只是查看矢量大小和周期数、我就无法识别哪个测试运行与 DSPLIB 用户指南中的特定行相对应。

    e2e.ti.com/.../test_5F00_DSPLIB_5F00_add_5F00_C71X_5F00_0.txte2e.ti.com/.../test_5F00_DSPLIB_5F00_add_5F00_C71X_5F00_1.txt

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

    您好、

    [引述 userid=“12973" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1513938/tda4vh-q1-help-needed-to-replicate-dsplib-cycle-counts-on-c7x-dsp/5831708 #5831708“] 我不知道如何进行关联、因为 CIO 输出仅显示矢量大小、而不会列出每次测试运行的数据类型。 如果我只是查看矢量大小和周期数、我就无法确定哪个测试运行与 DSPLIB 用户指南中的特定行相对应。

    您可以参阅  test_cases_list.csv(网址为 ti-processor-sdk-rtos-j784s4-evm-10_01_00_04\DSPLIB\test\DSPLIB_idat_gen\DSPLIB_add) 、以识别每次测试运行的数据类型。

    此致、
    Shabary

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

    感谢您指出.csv 文件 Shabary。 这有助于解码测试输出。 另一件事我有一个小疑问在测试输出是测试运行编号 1 到 25 和冷/热循环测试运行编号 0 到 24 之间的相关性。 我假定它们只是偏移 1、以便为测试运行 0 列出的热循环与输出的早期部分的测试运行 1 相对应。  

    我已将结果列示如下、供您参考。 我无法在黄色列中看到蓝色和绿色列中的测试输出与 DSPLIB 用户指南性能周期之间的相关性。 在 TDA4VH EVM 上运行 TEST_DSPLIB_ADD 时、是否会观察到与下面蓝色和绿色列类似的结果、或者这些周期是否与用户指南中的性能值相匹配?

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

    Shabary,

    我对此有了更新。 我已重新运行 TEST_DSPLIB_ADD 的版本构建、现在能够复制 C71X_0 上 DSPLIB 用户指南中的周期计数、如下所示。 之前报告的数字、使用 Debug 编译配置文件可以忽略该值。 我分享了更新后的表格。

    此外、 我们更改了示例源代码以将数据移动到 L2、现在使用 TSC 寄存器的示例还提供了 C71X_0 上的周期计数结果、与 DSPLIB 用户指南性能编号中报告的结果相似。 这现在已解决。  

    但是、我们仍然希望得到您的帮助、了解为什么 C71X_1、2 和 3 的周期计数高于 C71X_0 上的周期计数。

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

    您好、

    为什么 C71X_1、2 和 3 的周期计数高于 C71X_0
    上的周期计数

    我将在内部查看并更新您。

    此致、
    Shabary.

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

    你好 Shabary。 您是否在了解  C71X_1、2 和 3 周期为何高于 C71X_0 上的周期计数方面取得了任何进展? 谢谢你。

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

    您好、

    您是否在了解  C71X_1、2 和 3 周期为何高于 C71X_0 上的周期计数方面取得了任何进展?

    是、所有内核的值应该相同、我正在检查互连级别的优先级。将返回给您。

    此致、
    Shabary

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

    您好、

    我正在检查是否有任何缓存依赖项可能影响 CORE_0 的性能、以更快地获得结果。 但是、即使在禁用高速缓存后、问题仍然存在。
    我将继续调试并更新您。

    此致、
    Shabary



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

    您好、

    与其他内核相比、CORE_0 的运行速度更快、因为链接器脚本中使用的 L2SRAM 和 MSMC 地址属于 Core_0。
    当您在其他内核上运行代码时、这些内核会访问用于 Core_0 的存储器地址、这会引入延迟。

    您可以参阅以下文件来找到每个内核的正确 L2SRAM 和 MSMC 地址:
    ti-processor-sdk-rtos-j784s4-evm-10_01_00_04\vision_apps\platform\j784s4\rtos\(c7x_1、c7x_2、c7x_3、c7x_4)\linker_mem_map。

    此致、
    Shabary.

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

    Shabary、 感谢您追逐此问题的答案。 我为 c7x_2 与 c7x_1 创建了单独的构建配置、并确认了我们对 c7x_2 使用正确的 L2 和 MSMC 地址时获得相同的性能。 请查看下面粘贴的结果、并注意、调试器中的内核编号以 0 偏移开头、因此下面的 C71X_0 映射到您提供的 SDK 参考中的 c7x_2。

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

    Shabary 再次感谢持续的帮助。 回到本主题中的一篇早期文章,我错误地说,我们能够用一个简单的例子来测量类似的循环计数。 虽然我们能够使用 TEST_DSPLIB_ADD 代码重现 DSPLIB 发布的周期计数、但我们通过一个简单的示例无法接近这些周期计数。 我们已尝试按照 DSPLIB 测试中使用的技术、通过多次预运行 DSPLIB_ADD 内核、将操作数预加载到 L1D 和预热 L1D 以及分支预测 H/W、但是当对 256 个浮点使用 DSPLIB_ADD 时、我们仍然测量 274 个周期、而不是 DSPLIB 用户指南中的~100 个周期。 我附加了带有更改的源文件。 如果使用 Example/DSPLIB_add 配置进行构建、则打印给 CIO 的结果为“在 274 中经过的时钟周期数“。

    您能否告知我们、我们可能还需要做些什么来进一步减少周期、以匹配 DSPLIB 测试结果。

    e2e.ti.com/.../DSPLIB_5F00_add_5F00_example_5F00_mods_5F00_256.cpp

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

    您好、
    我将检查并更新它。

    此致、
    Shabary.

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

    您好、

    您能告诉我们、为了进一步减少周期以匹配 DSPLIB 测试结果、我们还需要做些什么

    要将时钟周期进一步减少到用户指南中提到的值、您需要启用缓存、该缓存位于 d.c 文件中的 DSPLIB_TEST_INIT () 中。
    您能否请检查该链接器、并共享与您共享的.cpp 代码相对应的链接器脚本、以便我可以在我的最终尝试它?

    此致、
    Shabary.

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

    谢谢 Shabary。 我没有意识到 DSPLIB 示例中未启用缓存。 在这种情况下、我为预加载 L1D 和 L1P 所做的努力是徒劳的。 我将根据您引用的 DSPLIB_TEST_INIT 代码查看如何启用缓存。 我之前附加的.cpp 文件可以放入 DSPLIB 安装的 examples/DSPLIB_add 文件夹中、并将使用下面的常用 cmake 命令进行编译。 此路径的链接器命令文件位于相对路径“ti-processor-sdk-rtos-j784s4-evm-10_01_00_04/DSPLIB/cmake/linkers/C7120"</s>“  

    cmake -B build -DTARGET_PLATFORM=“"-DBUILD_EXAMP="1"“-DBUILD_EXAMP="1"-DKERNEL_NAME="DSPLIB_ADD"“-DKERNEL_NAME="DSPLIB_ADD"-DSOC="j784s4"“-DSOC="j784s4"-DDEVICE="C7120"“-DDEVICE="C7120"-DDSPLIB_DEBUGPRINT="0"“-DDSPLIB_DEBUGPRINT="0"-DCMAKE_EXPORT_COMPILE_DCCOMMANDS="TRURE"“-DCMAKE_EXPORT_COMPILE_DCCOMMANDS="TRURE"-TYPE="TRUE"“-TYPE="TRUE"</s>“ “““““““

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

    您好、

    。 我之前附加的.cpp 文件可以放入 DSPLIB 安装的 examples/DSPLIB_add 文件夹中、并将使用下面的常用 cmake 命令进行编译。 此处的链接器命令文件位于相对路径“ti-processor-sdk-rtos-j784s4-evm-10_01_00_04/DSPLIB/cmake/linkers/C7120"
    “  

    谢谢,我会从我的结束检查,并更新你.

    此致、
    Shabary.

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

    您好、
    在测试代码中、高速缓存和 MMU 函数均启用、因此我们会观察到如此高的性能。
    示例代码仅用于演示内核中使用的 API 的实现、因此我们不能期望示例或独立代码具有相同水平的性能。
    如果您需要高性能、可以在 CSV 文件中将您的用例添加为测试用例、并将其作为测试代码的一部分运行。

    此致、
    Shabary S Sundar.

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

    谢谢 Shabary。  

    根据您的建议、通过从 DSPLIB/test/common/C71/DSPLIB_test_init.c 中添加以下行并包含以下文件列表、我们可以实现 DSPLIB 示例的高性能:
    C7x_simple_L1_L2_MSMC_DDR_ptc.c
    DSPLIB_TEST_c7xecr.{h、asm}  
    enable_cache_MMU。{h、c}
    inventation_tlb.{h、c}

    我想和其他开发人员分享一下。

    谢谢、
    Ian



     

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

    尊敬的 Ian:
    感谢您分享信息。

    此致、
    Shabary S Sundar.