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.

[参考译文] PROCESSOR-SDK-AM335X:L1高速缓存性能比较

Guru**** 2562120 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/612745/processor-sdk-am335x-l1-cache-performance-comparison

器件型号:PROCESSOR-SDK-AM335X

我正在比较 AM335x (BeagleBone Black 上)与 AM437X (MYIR Rico 板上)的性能。

在两个平台上使用 u-boot、我运行相同的程序(列出了伪程序):

while (1){

 setGPIO()

 clearGPIO()

 对于(ii = 0;ii < 50000;+ii);

确保"for "循环未被优化、并且为两个平台生成了相同的汇编代码。

AM335x 的运行速度比437x 快约2.5倍。  这是预期结果吗?

其他信息:

- GPIO 尖峰用于通过示波器测量时序。

-在437x 上、没有"for (for)"循环的 GPIO 时序要慢大约4-8纳秒(即、几乎没有任何时序差异)

-当"FOR"循环替换为大于256K 的巨型函数以强制处理器访问 DRAM 时

 由于335x 的存储器路径更宽、437x 的性能开始逐渐优于335x。

但重要的问题仍然是、当从缓存运行时、335x 为什么比437x 性能要高?

-李传能

 精密自动化、LLC

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    MPU 频率是多少? 您是否已尝试从内核用户空间运行此操作? 您可以在 以下位置找到 Linux 性能基准:processors.wiki.ti.com/.../Processor_SDK_Linux_Kernel_Performance_Guide
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此外、  您能否在 AM437x 的 L2缓存预取控制寄存器中启用某些位? 使用此代码

           unsigned int val;
           Val = readl (0x48242f60);
           Val |= 0x50000000;
           omap_smc1 (0x113、val);

    我在 board.c 中添加了它、并在 AM437x 中实现了更好的性能。

    Steve K.

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

    感谢您的盛情款待。

    我从 u-boot 运行此操作系统、因此不涉及操作系统。  我一直在使用示波器来测量时序、因为我对频率设置并不完全信服。  现在、我还没有找到直接或间接测量当前 MPU 频率设置的方法。  你能给我一个建议吗?

    谢谢!

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

    遗憾的是,由于我使用 u-boot 而不是 Linux 运行,所以我没有 OMAP_smc1()。 但是、我理解您的意图、即通过 SMC 异常设置控制寄存器、因此我将在 u-boot 中执行等效操作。 谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我提到的代码是 u-boot 中的代码。 有多个 OMAP-SMC 宏。 我想我使用 OMAP-common/lowlevel_init.S 的 OMAP-smc1

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

    Steve、

    感谢您的提示。 我设法在 board.c 中启用 L2高速缓存、其等效项为:
    MOV R12、#0x102
    MOV r0、#1
    SMC #0
    对于中等代码大小(32k <代码大小< 256k)、437x 性能提高了2.5x。

    但是、如果代码大小小于32k、335x 的性能将继续优于437x。

    Steve 和 Biser、
    也许新的问题是:
    -如何通过直接测量或检查寄存器来验证 MPU 速度设置?
    -启用 L2高速缓存时是否可以禁用 L1高速缓存? 我应该检查哪一个寄存器是否存在这种可能性?

    谢谢!

    -李传能

    更新:为了实现良好的测量、为了明确启用 L1高速缓存(以防万一)、我在 board.c 中添加了等效项

    MOV R12、#0x116
    MOV r0、#1
    SMC #0

    但代码大小小于32k 时、性能没有变化

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为了解决此问题、我发现437x 电路板随附的 u-boot 设置了以下值:

    PRCM_CM_CLKSEL_DPLL_CORE = 0x3e817 (即明显为1024MHz)
    PRCM_CM_CLKSEL_DPLL_MPU = 0x25817 (显然是629MHz)

    (感谢 Biser 提供有关查找内容的提示)。

    当两个寄存器都设置为1024 MHz 时、现在437x 比在 L1高速缓存之外运行的整数运算"仅"慢37%。 我相信这也不是比塞尔指出的基准。

    Biser 和 Steve 都指出 u-boot 配置存在不同的问题、因此我将尝试将这两个答案标记为解决我的问题。 谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    实际上、寄存器中的分频器值比实际分频器小1。 那么、对于您拥有的内核
    1000 *24MHz/24=1000MHz

    与您拥有的 MPU 类似
    600*24MHz/24=600MHz

    Steve K.