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.

[参考译文] AWR1642:如何将代码放置在 L3中并高效运行?

Guru**** 2614265 points


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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/663305/awr1642-how-to-place-code-in-l3-and-run-efficiently

器件型号:AWR1642

你好、冠军、
  在 SDK 中的 MMW 演示中、所有运行时代码都从 L2运行。 只有初始化代码(段.overlay)从 L3运行一次、然后由 L3雷达立方体重叠。 在客户的实际情况下、L2不足以用于代码、他们需要在 L3中放置一些运行时代码。 您能帮助检查如何支持它吗? 尤其是如何从 L3高效运行代码? 启用 L2缓存并更改 MAR 以启用 L3中的代码段缓存是否需要执行此操作?

谢谢、
Adam

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

    启用 L3的高速缓存功能肯定会有所帮助。

    分析代码并分配在 L1或 L2中运行最多的段也会有所帮助。

    谢谢你
    Cesar
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ceasr、
    如果我们不启用 L2缓存并为 L3存储器启用可接通性、L1P 是否可以直接在 L3中缓存代码?

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

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

    您好、Cesar、
      非常感谢。 我现在很清楚。

    此致、
    Adam

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Adam:
    如 mmWave 演示 doxygen 的"EDMA 与基于缓存的处理"一节所述、L3范围对应的 MAR 未启用缓存能力、即保留为芯片默认状态。 您可以从 L3启用它以获得更高的程序执行效率、但这也意味着 L3中的任何数据也将被缓存、并且我们直接从 DSP 访问的任何 L3数据(与使用 EDMA 相比) 当 DSP 写入/读取任何非 DSP 实体(例如邮箱、EDMA、UART)时、可能需要进行高速缓存写备份/失效、即在需要时在软件中处理高速缓存一致性操作。

    在当前演示中、可能(我尚未进行全面评估、因此"可能")似乎没有任何此类情况、因为我们使用 EDMA 访问 L3、而 DSP 仅访问 L1/L2以获取数据 (甚至可以通过这种方式将一些有效负载从 L3发送到 UART、因为 DSP 只是传递指针、而不对 L3数据执行读-修改-写操作)、但只是让您知道、如果客户的应用代码在 L3中可能有不同的数据使用模式。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Piyush、
      非常感谢您的回复。 我现在很清楚:)

    此致、
    Adam

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

    尊敬的 Adam:

     我对这一点的深入了解、因为 MAR 是 L2配置中的寄存器、所以我很好奇 L1D 是否也受 MAR 影响、我的回忆是、它是、但不确定、 超级模块文档(http://www.ti.com/lit/ug/sprufk5a/sprufk5a.pdf) 明确地提到、如下所述、L1D 也会受到 MAR 的影响:

    --------

    4.3.7.3 L1交互
    当 L1P 或 L1D 向 L2请求未保存在 L2 RAM 或 L2高速缓存中的地址时、L2
    控制器查询相应的 MAR 寄存器以获取该地址。 如果中的许可复制(PC)位
    MAR 寄存器为0、L2高速缓存控制器将其视为不可高速缓冲的访问并启动
    远程访问。 如果存取是长距离读取、CPU 会延迟、直到读取数据返回和
    如果 LRU 缓存集中存在与不可缓存存储器匹配的脏数据、L1D 将会写回该数据
    地址。
    关于 L1D 长距离请求、MAR 中 PC 位的最终结果是防止
    L2和 L1D 缓存中存储的不可缓存数据。 因此、在给定的 MAR 中、当 PC = 0时
    L1D 和 L2高速缓存都不会保留在地址范围内访问的数据副本
    该 MAR 涵盖。
    MAR 寄存器对 L1P 没有影响。 如果启用了 L1P、它将始终缓存程序提取
    不考虑 MAR 配置。

    ----------------------------

    另请注意最后一句话、即如果您只关心 L3中没有 L2缓存配置的高效程序访问(而不是数据访问)(演示由于尝试最大化 SRAM 而不启用 L2缓存)、 那么、它已经很高效、即无需对 MAR 进行编程。 从上面(第一个语句"L1P 和 L1D...") 可以看到 MAR 对 L2的程序访问有影响、即如果未为非零 L2高速缓存设置高速缓存能力、则程序访问不会在 L2中高速缓存、它们只会在 L1P 中高速缓存。

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

    您好、Piyash、
      因此、如果 MAR PC 未启用 L3存储器地址、

    1. L1P 或 L2高速缓存不会缓存 L3上的数据。
    2. L3上的代码将由 L1P 缓存、而不是由 L2缓存缓存缓存。

      我是否理解正确?

    谢谢、
    Adam

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

    正确、除了第1点的微小修正、您指的是"L1D 或 L2高速缓存"、而不是"L1P 或 L2高速缓存"。

    此外、在使用字词时有一点细微差别:我们通常使用"代码"一词来表示程序或指令访问、但代码也可以包括将作为数据访问的只读(.const)数据表、这些表通常被视为代码的一部分。 如果未启用 MAR、则此只读数据将不会被缓存(因为它通过 L1D 而不是 L1P)、并可能导致性能下降、具体取决于访问模式。 虽然我们无需担心一致性操作方面的只读数据(无需回写或失效)、但如果未设置 MAR、则性能会下降、这与指令访问不同。 因此,在严格提及 P access 时最好使用“指令”而不是“代码”,但我也在语句中随意使用“代码”一词来表示指令,所以我首先需要遵循我自己的建议:-)。

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

    您好、Piyush、
      是的、这是第1点中的一个拼写错误。  
       很高兴了解代码的详细信息:)非常有帮助。

    谢谢、此致、
    Adam