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.

[参考译文] AM2434:了解 AM2434 性能

Guru**** 2869760 points

Other Parts Discussed in Thread: LP-AM261, TMDS243EVM, AM2612, AM2434, AM6442, SYSCONFIG, MATHLIB

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1617634/am2434-understanding-am2434-performance

器件型号: AM2434
主题中讨论的其他器件: TMDS243EVMAM2612、LP-AM261、 AM6442SYSCONFIGMATHLIB

尊敬的支持团队:

我正在评估 AM2612 和 AM2434。 使用相同的代码进行基准测试、并将代码、数据和栈放置在主存储器 (OCSRAM 或 MSRAM) 中、启用缓存、正确配置 MPU、并按照示例演示 (AM2434 R5F 板上为 R5f @500MHz、TMDS243EVM 板上为 800MHz) 提供时钟、我在两个目标上都遇到类似的结果、但我期望 AM2434 R5F 内核具有更高的时钟速度。

我尝试找出两种设置之间的差异:我有相同的代码、相同的编译器、相同的编译器选项 (-O2)、相同的 MPU 配置、不同的 R5 时钟、我认为唯一的因素是 MSRAM/OCSRAM 时钟频率。

我在 AM2612 参考手册中发现 OCSRAM 在 200MHz 时钟(请参阅下面的)、但我找不到有关 AM2434 中 MSRAM 的任何信息(本文中提到:e2e.ti.com/.../mcu-plus-sdk-am243x-sram-clock :

image.png

我只是想弄清楚导致这种差异的原因、因此、如果您至少能提供 AM2434 中的 MSRAM 频率、那就太好了。 在我的工程中、AM24x_GP_EVM.gel 脚本用于初始化电路板(使用 DDR)的 CPU 时钟。

此致

 

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

    您好、Gael、

    您能否发布基准测试结果的屏幕截图? 谢谢!

    此致、

    Stan

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

    尊敬的 Stanislav:

    我的测量值没有屏幕截图、但我可以给出我的程序在两个目标上的平均执行时间:

    - LP-AM261 (R5f 单核@ 500MHz、-O2、OCRAM 中的代码/数据/堆栈、OCRAM 总线宽度和速度:64 位、200MHz):945.6us

    - TMDS243EVM((R5f 单核@ 800MHz、-O2、MSRAM 中的代码/数据、TCMA 中的堆栈;MSRAM 总线宽度和速度:?):1132.9us

    您能否分享一些关于 AM2434 上 MSRAM 的信息、至少时钟速度和总线宽度(64 或 32 位)?

    谢谢、

    Gael

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

    Gael、

    我需要再做一些检查、但看起来 AM243x MSRAM 在具有 64 位总线的 250MHz 上运行。

    您运行的基准测试是什么?

    谢谢、

    Stan

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

    Stanislav、

    如果它在 250MHz 上运行、则我需要进行更深入的挖掘、以了解 SDK 示例软件是否从我开始的位置(它是驱动程序文件夹中的 DDR ECC 示例)正确配置所有时钟。

    在 TRM 中、除了在 500MHz 设置的 MAIN_PLL0-HSDIV0 时钟输出外、我没有找到更多信息、但没有说明使用哪个分频器为 MSRAM 组计时。 如果您能确认 250MHz、那将会很好、谢谢。

    我运行的基准测试代码是我公司的专用应用程序。

    此致、

    Gael

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

    您好、Gael、

    您是否要打开 AM6442 的 SysConfig/时钟树工具(应该也对 AM243x 有效)并查看时钟图?

    稍后我会详细说明。  

    谢谢

    此致

    Anastas Yordanov

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

    您好、Gael、

    以下是在线可用 SysConfig/时钟树工具 ( https://dev.ti.com/sysconfig) 中的图解摘录

    对于 AM6442:  

      

    divider_219_2 是一个 SoC 级集成式固定(不可编程)“/2"分“分频器。 功能时钟 VCLK 输入的这种时钟频分频适用于所有 8x256KB 实例:MSRAM_256K0 - MSRAM_256K7。

    因此,我确认 — MAIN_SYSCLK0_freq/2 = 250MHz 是所使用的 MSRAM 接口时钟。  

    期待您的反馈!

    谢谢

    此致

     Anastas Yordanov

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

    尊敬的 Anastas:

    感谢您的意见。

    使用 SysConfig 在线工具和不同的子工具、我检查了 AM24x 上的内部配置、并比较了不同的分频器和 PLL HSDIV 配置、以尝试了解 500MHz 当我的所有代码都从内部 RAM 运行时、如何在 800MHz 处的 LP-AM261 和 TMDS243EVM 上测量到相同的性能。

    我根据 AM6442 的 SysConfig 工具提供的配置检查了 AM2434 上的 R5f 寄存器、该配置类似于 AM2434、尤其是对于 MSRAM 为 PLL0_HSDIV0、对于 R5f 内核时钟 (800MHz) 为 PLL14_HSDIV0。 我再次检查了整个 MSRAM 的 MPU 区域被配置为“缓存“、我检查了系统控制寄存器是否启用了缓存、I-cache 和 D-cache、我仍然不明白为什么会得到这样的结果。

    你是否有一个线索,我可以检查我可能错过了什么?

    您是否从内部存储器在 AM261 上和从内部存储器在 AM2434 上运行了任何软件、以将性能与您的软件进行比较? 我在在线基准测试下查看了 SDK、但找不到任何具有可比测量值的相同软件、因此无法进行一些比较。

    我还检查了 DDR 配置(对于仅从 DDR 运行代码的基准测试)、并检查了 GEL 脚本是否正确配置。 我检查在 400MHz 处设置的 PLL12_HSDIV0、目前我有一个问题:在 GEL 脚本中、明确写成了我们要在 800MHz 时钟下配置 TMDS243EVM 的 DDR、但 PLL 频率设置为 400MHz。 在参考手册中、我无法找到有关使 DDR 时钟加倍的任何信息。 我想、如果我们想在 800MHz 获得 DDR 时钟、那么我们需要将 PLL 12 HSDIV0 输出设置在 800MHz。

    您能解释一下这一点吗?

    此致

    Gael

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

    您好、

    只是想听听。 我记得,如果基准代码足够小,适合缓存,它将测量纯 CPU/缓存性能。 但这仍然没有解释结果。

    此致、

    Stan

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

    您好、

    实际上、我的基准测试应用的代码足够小、能够适应 AM2612 和 AM2434(不是高速缓存)的内部 RAM。 但如您所说、我只关注这种情况(不涉及 AM2434 的 DDR)、以确保 AM2434 上的纯性能更好。 由于我在使用 500MHz R5 的 AM2612 侧有 MSRAM 的 200MHz 时钟、在使用 800MHz R5 的 AM2434 上有 MSRAM 的 250MHz 时钟、我期望 AM2434 的性能得到改善、但我没有观察到这一点。 因此、如果您有任何软件可以在具有类似措施的处理器上执行、我会很感兴趣。

    我还在代码缓存中添加了启用/禁用、只是为了确保启用了 MPU 属性和缓存、我确认缓存已启用并且 MPU 已正确配置、以便缓存 MSRAM。

    顺便说一下、如果对 AM2612 和 AM2434 感兴趣、当从 MSRAM/OCRAM 执行代码时、  在启用缓存的情况下、应用程序平均执行时间可缩短 40%。

    此致、

    Gael

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

    尊敬的 Gael:

    您可以 在此处参阅 MCU+ SDK 中的基准测试代码:

    https://dev.ti.com/tirex/explore/node?isTheia=false&node=A__AD2nw6Uu4txAz2eqZdShBg__com.ti.MCU_PLUS_SDK_AM243X__AROnekL__LATEST

    而对于 AM621x:  

    https://dev.ti.com/tirex/explore/node?isTheia=false&node=A__AD2nw6Uu4txAz2eqZdShBg__MCU-PLUS-SDK-AM261X__ZKtBu0R__LATEST

    请注意、结果按每 MHz 归一化。

    此外、我还收到了我们的一位专家的一些反馈:

    基本上、如果 R5 由自己的 TCM 运行、那么您会期望接近单周期访问并获得出色的性能。 如果它将进入主 OCSRAM 或另一个 R5 TCM、则会存在一些访问延迟、这可能会影响结果

    谢谢、

    Stan

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

    尊敬的 Stanislav:

    我详细研究了这些基准、确实可以在这两个目标上比较一些共同评论和密钥基准。

    在这两个基准测试中、代码和 BSS 都放置在 MSRAM/OCSRAM 中、数据放置在 TCM 中、因此与我自己的应用程序基准测试设置进行比较。

    在 AM2434 上、SDK 页面显示了以下数字、但我认为“usertime(以秒为单位)“是 错误的、因为它在代码中计算为“user cycle count“除以 cpuClockRate、即 800MHz(如下面的屏幕截图所示)。 那么 144641654  应该是 01808 秒(而不是 0.723208)、对吧?

    我还按原样使用了 drysthone 示例、在未修改任何内容的情况下、从 SDK“motor_control_sdk_am243x_11_00_00_06"中“中进行了测试、并在 TMDS243EVM 电路板上运行该示例。 结果如下:

    我按照 EVM 设置页面进行了操作、因此可以确保已刷写 SBL 空、并根据 SDK EVM 设置页面设置了引导引脚。

    这是否让您认为 在我的设置、时钟配置 SDK ...中可能有任何问题?

    此致、

    Gael

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

    尊敬的 Gael:

    我需要更多的时间来回复您。

    谢谢、

    Stan  

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

    尊敬的 Stan:

    好的、没问题。

    Gael

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

    尊敬的 Gael:

    我需要一两个小时

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

    你好 Stan、没问题。

    谢谢

    Gael

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

    尊敬的 Stan:

    我意识到在默认情况下 CCS THEIA 使用“调试“而不是“发布“构建配置...

    我已在 Release 配置中设置了 drysthone 示例、并获得了这些结果:

    我不知道调试和发布配置之间 在日志的调试函数等方面有何差异... 但是、该结果与 SDK 网站上发布的结果非常接近(“usertime in secs“和“micros for one running“除外)。

    我还  在自己的基准测试应用工程中将编译配置从“调试“更改为“发布“ 、得到 的结果仍然相同(因为正在测量的代码不包含对 SDK  中任何可能隐藏调试配置中调用的函数的调用)。 因此、我仍然不了解这两个目标的接近表现。 我还查看了数据表、AM2612 的 I-cache 和 D-cache(每个 16KB)少于 AM2434(每个 32KB)、这应该 提供比内核速度更多的性能。

    此致、

    Gael

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

    尊敬的 Gael:  

    很抱歉,迟来的答复,我离开办公室了 2 天。

    因此、 对于 144641654、它应该是 01808 秒(而不是 0.723208)、对吧?

    我也很想知道关于 0.723208。 我在 GitHub 中打开了原始的 Dhrystone 基准测试代码、发现这个值是通过除以运行次数(默认为 2000)得出的。  0.723208 完全是 2 分频值、而不是在公式中计入零。  

    因此我仍然不理解两个目标的接近性能

    很抱歉、您已经说过、但您是指自己的基准测试代码中得到了类似的结果、还是同时得到了这两个基准测试代码(您的基准测试代码和 Dhrystone 代码也是如此)?

    此致、

    Stan

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

    Stan、Anil、
    我认为 Gael 是指他自己的专有基准测试(因为 Dhrystone 将结果归一化为 MIPS/MHz,因此您可能不会看到这么大的差异)。

    在一个 R5F 上进行基准测试时 、所有代码、数据和堆栈都放置在 OCRAM 或 MSRAM 中。 未使用外部内存。
    我假设使用相同的 src 代码和编译选项。
    AM243x 性能应远高于 AM261x、因为:

                   AM243x :                                           AM261x

                   32KB 高速缓存                                   16kB 高速缓存

                   800MHz                           CPU 时钟 500MHz CPU 时钟

                   250MHz 时钟 RAM                 200MHz 时钟 RAM


     您是否可以同意在这两个平台上重新运行一些 MCU SDK 11.01.xx 基准测试以比较结果?
    例如、Mathlib 基准测试似乎使用相同的代码库:
    https://dev.ti.com/tirex/explore/content/mcu_plus_sdk_am243x_11_01_00_19/docs/api_guide_am243x/EXAMPLES_MATHLIB_BENCHMARK.html
    https://dev.ti.com/tirex/explore/content/mcu_plus_sdk_am261x_11_01_00_19/docs/api_guide_am261x/EXAMPLES_MATHLIB_BENCHMARK.html 

    提前感谢、
    Anthony

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

    您好 Anthony、

    我可以在明天更新状态。

    此致、

    Anil.  

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

    你(们)好 (我也不在办公室)

    [报价 userid=“54401" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1617634/am2434-understanding-am2434-performance/6254723

    很抱歉、您已经说过、但您是指自己的基准测试代码中得到了类似的结果、还是同时得到了这两个基准测试代码(您的基准测试代码和 Dhrystone 代码也是如此)?

    此致、

    [/报价]

    使用这两个目标上的基准测试代码、我的平均执行时间相似、但我预计 AM2434 上的平均执行时间小于 AM261。 使用 Drysthone、我仅在 AM2434 上运行、并确认它提供的 DMIPS/MHz 与 AM261 上相同、这意味着 drysthone 在 AM2434 上的平均执行时间少于 AM261 500MHz、因为它在 800MHz 上运行、而不是在 AM261 上运行。

    关于重新运行的基准测试:我将重点关注比 Drysthone 代码大的基准测试代码。 在我自己的应用程序基准测试中、代码约为 1MB、我认为这只是 drysthone 基准测试与我的应用程序基准测试之间的区别。 如果代码足够小、可能适合缓存和干式示例测量的性能仅反映了这种特定情况、其中代码主要从缓存运行。 我很好奇 、您的某个应用如果尺寸更大、会对性能产生多大的影响。

    此致、

    Gael

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

    尊敬的 Gael:

    执行基准测试时、使用 Release 编译配置而不是 Debug 编译至关重要。

    这会显著影响测量的性能。

    调试构建特征:
    -禁用编译器优化(通常为-O0 标志)
    -包含调试符号,增加代码大小
    -启用额外的运行时检查和断言
    -更大的代码占用会导致更多的缓存缺失

    发布版本特征:
    -编译器优化已启用
    -更小、更快生成的代码
    -消除无效代码可减小代码大小
    -由于代码紧凑,缓存利用率更高

    内存延迟:  

    63.75ns 延迟图是专门针对我们应用手册 SPRACV1B 中的 AM64x/AM243x MSRAM 测量的。 我们在基准测试文档中没有针对 AM261x OCSRAM 发布的等效延迟测量结果。  

    https://www.ti.com/lit/an/spracv1b/spracv1b.pdf?ts = 1773221759391&ref_url=https%253A%252F%252Fwww.google.com%252F

    AM243x:51 个周期存储器延迟 (800MHz 为 63.75ns)
    AM261x:24 个周期存储器延迟 (500MHz 时为 48ns) 该数据来自内部团队。

    这表明 AM261x 在周期和绝对时间方面具有较低的存储器延迟。

    Dhrystone 分析:  

    您的测量结果显示:  
    - AM243x:800MHz 时为 1.96MIPS/MHz

    https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/11_02_00_24/exports/docs/api_guide_am243x/EXAMPLES_DHRYSTONE.html


    - AM261x:500MHz 为 1.94MIPS/MHz

    https://software-dl.ti.com/mcu-plus-sdk/esd/AM261X/latest/exports/docs/api_guide_am261x/EXAMPLES_DHRYSTONE.html

    归一化性能 (DMIPS/MHz) 在大约 1.95MIPS/MHz 时几乎相同。

    就绝对值而言:
    - AM243x:1.96 × 800 = 1568 DMIPS
    - AM261x:1.94 × 500 = 970 DMIPS

    AM243x 在绝对时间内将 Dhrystone 速度提高了 1.6 倍、同时钟比也匹配 (800/500 = 1.6x)。

    Dhrystone 专门设计用于完全适应 L1 高速缓存。 R5F 具有 32KB I-Cache 和 32KB D-Cache。 Dhrystone 代码加数据足够小(只有几 KB)、可以在第一次迭代后从缓存完全运行。 它只能有效地测量 CPU 和高速缓存性能、而不能测量内存子系统性能。

    代码大小为 1MB 的应用程序是关键区别。 1 MB 代码不能容纳在 32 KB 的指令缓存中。 频繁的缓存会错过从 MSRAM/OCSRAM 强制获取指令的操作。

    存储器损失比较:
    - AM243x:每个缓存未命中 51 个周期
    - AM261x :每个缓存缺失浪费 24 个周期

    AM243x 在每个存储器访问期间浪费超过两倍的周期 (51/24 = 2.125x)。 这种额外的存储器损失几乎抵消了 1.6 倍 CPU 时钟优势、导致存储器限制应用程序的总体执行时间相似。

    建议进行验证的测试

    测试 1 — 测量高速缓存缺失率:
    使用 R5F 性能监控单元 (PMU) 测量缓存未命中。 使用 PMCNTENSET 启用计数器。 事件 0x01 用于 I-cache 重新填充(指令缓存未命中)、事件 0x03 用于 D-cache 重新填充(数据缓存未命中)。 比较 Dhrystone 和 1MB 应用之间的缓存未命中计数。

    测试 2 — 从 TCM 运行子集:
    如果可能、请确定最热的 64KB 代码、并使用链接器放置或段属性将其放置在 TCM 中。 然后测量性能是否显著提高。 这将确认存储器访问延迟是瓶颈。

    此致、

    Anil.

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

    尊敬的 Anil:
    我代表 Gail 发帖:

    “感谢您的详细回答。

    对于建议的测试:我不认为它们是必要的,因为它肯定来自我们的应用程序的 1MB 代码不适合缓存,导致高缓存未命中率。 测试 2 已使用我们的应用程序或 Drysthone 应用程序完成,因为您已确认它专门设计为适合缓存。 不过、它确实可以提供有关 AM261 上与 AM2434 相比 TCM 延迟有任何差异的信息。

    实际上、您提供了指向有关“Sitara AM64x/AM243x 基准测试“的 SPRACV1B 文档的链接、该文档提供了有趣的信息。
    - AM261x(甚至是 AM263Px 或 AM263x)是否有相同的文档?

    话虽如此,我认为这并不解释区别: 51/24 周期因子 (2.125x) 是以周期表示的。 但在绝对时间内、63.75/48 = 1.328x。

    我们的参考应用在 AM2612 上可在 945ms 内运行、在 AM2434 上可在 1133ms 内运行。 945 *(500/800)*(63.75/48)= 785ms、而 I 测量值为 1133ms。

    我考虑了缓存大小、但我认为一旦它已满、我就会在 CPU 和初始缓存代码大小 (16KB 或 32KB) 上有尽可能多的缓存行填充、与执行的代码大小(更像是 700KB)相比、这可以忽略不计。

    我还考虑了 MSRAM/OCRAM 访问延迟是否应适用于整个软件执行时间或其中的一部分、但我认为它适用于全局延迟、因为所有这些都位于 MSRAM(代码,数据和堆栈)中。

    - AM261 和 AM2434 之间在内核、互连和 MSRAM/OCRAM 的集成方面是否有任何差异?
    -是否存在例如 1 个端口(读取/写入)到 MSRAM 仅适用于 AM2434、但 AM261 中有 2 个端口(1 个读取+ 1 个写入)?  

    作为信息、我们参考应用中的代码和内部 RAM 中的数据/栈的测量执行时间为 3030ms、这相当于我们测得的执行时间 (1133ms) 的 2.6 倍。 与预期的持续时间 (785ms) 相比、这代表了 3.96x 系数。 在查看 AM64x/AM243x 基准测试文档以及 DDR (280ns) 与 MSRAM (63.75ns) 延迟时、系数为 4.39x。 就像在我们的方案中、数据和堆栈放置在内部一样、这可以说我们受 DDR 延迟的影响较小。

    此致、

    Gael»ć

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

    谢谢 Anthony。 我不知道为什么我昨天不能发布。

    “盖尔“

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

    您好、Gael、

    我不确定是否存在与 SPRACV1B(Sitara AM64x/AM243x 基准测试)类似的基准测试应用手册。

    我建议 专门为 AM261x 提出新的 E2E 主题、以查询可用的基准测试文档。

     AM261x 和 AM243x 由 TI 内部的不同团队提供支持、其架构存在显著差异。
    这些器件系列的片上 RAM 延迟是不同的:

    |器件|存储器|延迟|
    |----- |----- |------------------------------------ |
    | AM261x | OCRAM |~48ns (24 个周期@ 500MHz)|(该数据取自内部团队)
    | AM243x | MSRAM |~63.75ns (51 个周期@ 800MHz)|

    存储器访问延迟的这种差异可能说明了您在 AM243x 上与 AM261x 上观察到的性能差距。
     

    为了更好地了解您的用例并进一步帮助您:

    1.您期望的性能值是多少? AM261x 和 AM243x 上预计的执行时间是否相同?
    2. TCM 内存选项:如果将代码放在 TCM 内存中可以提高性能,但您的应用程序代码不适合 TCM ,您的代码大小是多少
    应用?
    3.应用程序详细信息:请问您运行的代码/应用程序是什么? 是否可以与我们分享该应用程序以进行进一步分析?

    请提供上述要求的其他信息、我们将继续调查此问题。

    此致、

    Anil.

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

    您好 Anil、

    [quote userid=“525901" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1617634/am2434-understanding-am2434-performance/6267048 您期望的性能值是多少? AM261x 和 AM243x 上的预期执行时间是否相同?

    根据两个芯片的架构、当代码放置在内部 RAM 中时、我希望 AM2434 具有更好的性能。 目前、AM2434 上的全局时间较慢 (1133ms、AM261 上为 945ms)。 另请注意、此参考应用程序在 TMS570 上运行的平均执行时间为 1788ms((300MHz 处的 R5,等效编译器选项,启用缓存) 。  从 TMS570 上的 300MHz 到 AM2434 上的 800MHz (2.6x)、内核频率仅达到 1133ms(1.6x 因数)、这使我 对 AM2434 上的测量结果产生怀疑。 正如我在上一篇文章中所述、如果考虑 AM261 和 AM2434 之间 MRAM/OCSRAM 延迟的绝对时间差、AM2434 上的性能损失比将为 1.3 倍、但内核频率提高 1.6 倍、因此 AM2434 上的 AM2434 执行时间应略低(=更好)。 至少,我是在期待这个。    

    [quote userid=“525901" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1617634/am2434-understanding-am2434-performance/6267048 TCM 存储器选项:如果将代码放在 TCM 存储器中可以提高性能、但您的应用程序代码不适合 TCM、则的代码大小是多少
    应用程序?

     正如我在之前的帖子中所写的那样、我们的参考应用程序的代码大小约为 1MB、数据大小约为 100KB。

    [quote userid=“525901" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1617634/am2434-understanding-am2434-performance/6267048 应用程序详细信息:请问您运行的代码/应用程序是什么? 是否可以与我们分享该应用程序以进行进一步分析?

    我无法提供源代码、因此我问是否会有一些与我们类似的 TI 参考应用。

    此致、
    Gael   

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

    您好、Gael、

    希望您已经使用 Release 编译版本(而不是 Debug 编译版本)进行了测量。

    如果可能、请分享测量方法、以便我可以确认您的操作是否正确。

    我需要与其他专家就上述问题进行咨询。

    目前、我对此没有任何见解。 如果您可以分享该应用程序、我将在我这边运行它、并与内部团队核实以提高绩效。

    此致、

    Anil.

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

    您好、

    我希望您使用 Release Build 而不是 Debug Build 进行测量。

    是的。

    如果可能、请分享测量方法、以便确认您是否正确操作。

    提供了额外的电源保护。 在由 syscfg 生成的 ti_drivers_config.c 文件中、内联对 PMU 进行初始化

    CycleCounterP_init (SOC_getSelfCpuClk ());

    在我的代码中、每次代码执行迭代开始时、我都会使用重置 PMU

    CycleCounterP_RESET ();

    然后,在两个测量点之间,我调用 CycleCounterP_getCount32 ();然后执行以下操作以获得以微秒为单位的数字:( endCounter - startCounter )/ CoreFreq_MHz。

    我需要就上述查询咨询其他专家。

    非常感谢。

    如果您可以共享应用程序、

    我说过,我不能。

    您这边、在为所有 MCU 完成的所有工程中的 TI 代码库中、有示例和演示供 您搜索、没有找到可以使用的应用?

    此致、

    Gael

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

    您好 、Gael、

    上述测量设置很好。

    但是,如果在 FreeRTOS 中运行此测试用例,测量可能会给出错误的值,因为当应用程序空闲挂钩运行 WFI 指令时,PMU 计时器会给出错误的值。

    因此、如果您在 FreeRTOS 上执行此测试用例、则不使用 PMU GTC、因为它是 64 位计时器、并且不会溢出。

    接下来、我已将该问题发送给其他专家、并会在收到任何反馈后更新您。

    此致、

    Anil.

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

    您好、

    感谢您的确认。 我的应用以裸机模式运行、因此不涉及 FreeRTOS。

    下一步、我已将此查询发送给其他专家、一旦收到任何反馈、就会更新您。

    谢谢。

    同时、如果任何人(TI 外部)  已经使用其参考应用评估了 AM2434 和 TMS570、并且该应用程序配置文件与我们的应用程序(不适合高速缓存的大线性代码)类似  、请随时跳转并分享您的结果以进行比较。 在我这边、AM2434(来自 MSRAM 的代码、数据和栈、启用缓存、编译器-O2 -mthumb)是 1.6 倍速度提升 比 TMS570(内部闪存中的代码,数据/栈内部 RAM、启用缓存、编译器-O2 -mthumb)更胜一筹。

    谢谢、

    此致、

    Gael

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

    您好、

    是否有任何更新?

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

    尊敬的 Anil:
    我认为 Gael 需要一个答案的问题是:

    -下面的近似计算是否正确? (如果不是,缺失的内容会降低 AM24x 性能)?
    或者他所做的基准/测量是否正确?

    TI 信息:  

    AM243x

    AM261x

    32KB 高速缓存
    128KB TCM(单核)
    800MHz CPU 时钟

    16KB 高速缓存
    256KB TCM(单核)
    500MHz CPU 时钟

    250MHz 时钟 VBUSM

    2MB OCSRAM (8x256kB)

     

     

    51 周期内存延迟

    (即每次缓存未命中浪费周期)
    800MHz 时为 63.75ns

    200MHz 时钟 VBUSM

    1.5MB OCSRAM (3x512kB)

    (但 VBUSM 上只有 2 个 512KB)

     

    24 周期存储器延迟  

    (即每次缓存未命中浪费周期)
    500MHz 时<48ns

    两个 MCU 上具有相同的专有基准测试(相同的 1MB 代码,相同的构建选项,测量周期数的相同方法):  
    执行时间:

    1133ms

    945 毫秒

    但基于架构差异的假设为:

    945 *(500/800)*(63.75/48)= 785ms

    而不是测量值为 1133ms。

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

    您好、Anber、

    第 1 点—内存访问速度是真正的差异

    AM243x:CPU 等待每次存储器提取 63.75ns (51 个周期@ 800MHz)
    AM261x:CPU 每次存储器提取等待 48.00ns (24 个周期@ 500MHz)

    AM261x 实时获取存储器的速度提高 25%(ns)。

    AM243x 上的较高时钟不会缩短等待时间(以纳秒为单位)。
    CPU 在其自身的更多时钟周期内处于空闲状态。

    第 2 点—原始公式在物理上是错误的

    945 *(500/800)*(63.75/48)= 785ms <-错误

    只有 100%的执行时间是存储器停滞时间和同时计算时间(这在物理上是不可能的)时、此选项才有效。 这两个比例因子适用于执行时间的不同分量。

    T_243 = T_261_compute *(500/800)+ T_261_STALL *(63.75/48)

    计算时间-->随时钟频率调整 (500/800)
    失速时间-->随内存延迟 nS 进行缩放 (63.75/48)

    这些是两个独立的组件、必须单独处理。

    测量结果证实其求解 1133ms:

    1133 = 945 *[0.625 *(1-f)+ 1.328 * f]

    →f = 0.82

    这意味着 AM261x 执行时间的 82%是存储器失速时间。 这就是为什么 AM243x 的更高时钟几乎没有任何好处-- CPU 在两个器件上都处于空闲状态的 82%。


    AM243x 的 CPU 速度更快、但每次获取的存储器访问速度更慢。 由于工作负载有 82%的时间等待内存、而只有 18%的时间执行指令、因此更快的 CPU 时钟在很大程度上被浪费了 — AM261x 在实际性能方面胜出。

    此致、

    Anil.

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

    感谢您的回答、我同意您的公式。

    我知道、对于与 MSRAM 相关的内部架构、AM261 比 AM24x 更高效。

    由于我们的代码无法放入内部 RAM 中、因此我们需要 将其加载到外部存储器中。 我检查了 AM261 上 OSPI DDR 166MHz 中使用 XIP 代码的性能、与从 AM261 上的内部 MSRAM 执行相比、该代码的性能慢 5 倍 (945us 和 4773us)。 在这种情况下、启用了 128KB L2 高速缓存的 RL2。

    我还使用 SDK 提供的 DDR 配置在 AM2434 上通过 DDR4 执行代码、比从内部 RAM 执行慢 2.7x(30us 与 1133us 相比)。

    在 AM261(效率更高)上、您认为值得尝试从 OSPI PSRAM 执行代码吗?  性能是与 OSPI 闪存类似还是更好? 您是否使用 LP-AM261 在演示应用中尝试过此操作?

    此致、

    Gael

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

    您好、Gael、

    我们通过将.text、.data 和.rodata 段放置在 AM243x 器件的不同存储器位置、在不同的存储器上对应用程序进行基准测试。

    我们发现、从 OSPI PSRAM 执行的代码表现出比闪存更好的性能。

    如果您需要 AM261x 器件的这些基准测试详细信息、请提交 e2e 工单。

    相应的工程师可以提供 AM261x 器件特定的详细信息。

    此致、

    Anil.

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

    谢谢 Anil、

    我能否询问此基准测试所用应用程序的代码大小 (.text)?

    我不知道这些基准。 是 在应用手册还是 SDK 网站上记录了这些信息?  

    是的、在 AM261 上进行这些测量也非常有趣、具体情况取决于 RL2 开/关和不同的 RL2 大小(对于闪存场景,因为 OSPI1 控制器上不提供 Optiflash)。 我将提交一个与此相关的 TT: e2e.ti.com/.../am2612-am2612-benchmarks-request

    此致、

    Gael

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

    您好、Gael、

    上述基准测试详细信息尚未在任何地方上传、目前仍在进行中。

    我们计划在 AppNote 中发布这些详细信息。 在此之前、我们需要进行一些额外的测试用例、这将需要更多的时间。

    整个代码从 PSRAM .text、.rodata 和.data 段运行、应用程序大小约为 2.5MB。

    此致、

    Anil.

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

    尊敬的 Anil:

    好的、谢谢。 我认为这 更能反映出我们的应用、就规模而言。

    我知道在航空航天应用中、TMS570 已经并仍用于许多项目中。 考虑到 Sitara 系列代表了 Hercules 系列的演变、您是否认为您的基准测试活动可能包括同一应用中的 TMS570LC(带高速缓存)、至少在代码位于内部闪存中且数据位于内部 RAM 中的情况下是如此?

    我认为 这可以为计划使用 Sitara 系列的用户提供信息、说明从使用 TMS570 的当前项目迁移到使用 Sitara 处理器的较新产品时他们可能希望提高的性能。 在 我方面、我们还使用我们的基准测试应用进行了此测量、因此这是另一种方法来检查 我们对 AM2434 和 AM261 的性能评估是否与您测量的内容类似(与 TMS570 相比)。

    此致、

    Gael

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

    尊敬的 Gael:

    以下是用于对 PSRAM 进行基准测试的示例代码:

    e2e.ti.com/.../ocmc_5F00_benchmarking.zip

    e2e.ti.com/.../xip_5F00_benchmark.zip

    请注意、这些基准测试是在 PSRAM 器件上进行的: APS6408L

    对于引导、修改后的 SBL SD 示例将进行初始化 APS6408L  已使用:

    e2e.ti.com/.../sbl_5F00_sd.zip

    此致、

    Aryamaan Chaurasia

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

    谢谢。

    使用此代码、我只能从上面的表 AM2434 中重现“PSRAM"列“列?

    此致、

    Gael

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

    尊敬的 Gael:

    修改后的 SBL SD 仅用于 PSRAM。

    OCMC 基准测试和 XIP 基准测试可与默认 SBL OSPI 一起使用、以对 MSRAM/片上 RAM、DDR、闪存进行基准测试。

    请确保为 MSRAM、DDR 和闪存正确配置了这两个示例的 linker.cmd。

    此致、

    Aryamaan Chaurasia