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.

[参考译文] CCS/OMAPL138B-EP:是否存在缓存监控?

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/565649/ccs-omapl138b-ep-is-there-cache-monitoring

器件型号:OMAPL138B-EP
Thread 中讨论的其他器件:OMAPL138

工具/软件:Code Composer Studio

尊敬的所有人:

我们使用 OMAP L138/ DSP、任务非常快(125us)。 我们依赖此任务中的大多数函数仅从 DDR RAM 加载一次并驻留在 L2中。 因此、我们将 L2缓存设置为50%、并将一些函数链接到 L2 RAM。 但是、无法将所有函数链接到 L2、特别是 P。有许多可通过运行时配置参数选择的替代函数。

我得到的效果是、一部分代码涉及多个函数调用、其中只有一些有效代码行花费了3us -通过将其中一个代码链接到 L2、时间减少到500ns 以下。 我认为这是由高速缓存性能或高速缓存缺失问题引起的、但无法证明这一点。

是否有方法在运行时监视高速缓存命中/高速缓存缺失?

是否有通过使用特定链接模式来减少缓存缺失的"良好做法"?

根据我们的配置参数、可以在启动时确定实际配置真正需要的"n out of m"函数。 我们的想法是构建存储器管理、在其中复制必要的函数并通过指针调用它们。 (我知道 gcc 覆盖机制、但我认为我们无法使用它、因为我们需要"n out of m")。 是否已完成此操作/是否有一些提示或示例代码?

感谢您的提示

亚历山大

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

    我们在 CCS 论坛中对 C674x 器件的缓存机制没有太多经验。 但是、我可以提前提供几个答案:

    >>是否有方法在运行时监视高速缓存命中/高速缓存未命中?
    而不是从 CCS 的角度来看。 我们以前在非常旧的版本中使用过此功能、但它不会产生可靠的结果、因此它已停产。

    >>是否有使用特定链接模式来减少缓存缺失的"良好做法"?
    有几个参考可以帮助您完成此操作:
    processors.wiki.ti.com/.../Program_Cache_Layout
    www.ti.com/.../spra756.pdf
    www.ti.com/.../spru656a.pdf
    processors.wiki.ti.com/.../C6000_Compiler:_Recommended_Compiler_Options

    (最后一页在第6节中有一些过时的信息、但总的来说是一个很好的参考)

    我将把您的帖子移至器件论坛、以便那里的专家可以帮助您获得更多见解。

    希望这对您有所帮助、
    拉斐尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    亚历山大

    您需要考虑的一些要点:

    1. L2缓存在数据和程序之间共享,总是倾向于保留最近访问的数据或程序缓存行。

    2. L1P 和 L1D 缓存对这一考虑也非常重要。 实际上、您可能希望将其中一些分配为 SRAM 并将极其关键的函数链接到该位置。 这不是一种常见的做法,而是一种需要考虑的做法。

    OMAPL138上有一个128KB 的共享存储器、可用于更大的内部空间。 与 L2 SRAM 访问相比、我没有对其进行基准测试、但希望其速度慢于 L2 SRAM、比 DDR 访问速度快。

    以及一些不同的意见:

    我相信 C674x 内核支持 CCS 中的高速缓存可见性。 当您打开"Memory Browser"窗口时、有三个复选框指示存储器内容的突出显示、具体取决于这些位置当前是否驻留在 L1P、L1D 或 L2高速缓存中。 您可以取消选中这些复选框以关闭突出显示功能、还可以在物理非缓存存储器位置查看物理内容。 在程序中将地址设置为 DDR 中的目标区域、您可以看到某些位置当前是否缓存在 L1P 和/或 L2中;对数据存储器区域执行相同操作以检查当前缓存状态。

    这可以通过在代码中设置断点、然后获取缓存状态快照来使用。 这可能是一种手动操作、但非常有用、尤其是在只有少数几个特别感兴趣的领域时。

    您可以使用 MAR 位来控制存储器部分的可高速缓存性。 粒度非常粗略、每 MAR 位为16MB。 但是、这可能允许您将一些不太重要的程序段放置在不可缓存的地址中、并确保所有关键程序段均可缓存、并且不太可能在使用之间被驱逐。

    所有这一切在很大程度上取决于算法的确切性质、调用频率、调用代码的次数、每次调用时使用的百分比、使用的数据量、每次使用相同或不同的数据段的次数、 在关键的125us 任务之外、是否还有其他事情会干扰高速缓存。

    此致、
    RandyP