【问题标题】:Can i check if a chunk of memory (e.g., allocated using malloc) stays in the cache?我可以检查一块内存(例如,使用 malloc 分配的)是否留在缓存中?
【发布时间】:2016-04-21 17:56:01
【问题描述】:

假设我使用 malloc 分配了一些空间。 我可以在运行时检查这个连续内存是否保留在 CPU 的缓存中(或者更好的是在 L1、L2、L3 等缓存级别内)吗?

【问题讨论】:

    标签: c++ c caching memory-management malloc


    【解决方案1】:

    不可以,但您可以使用预取指令在使用前将其从内存移动到缓存。如果数据已经在缓存中,这些指令应该很快(有一些特定于架构的警告,但我不知道您使用的是哪个平台)。

    您可以查询内存是否在缓存中的原因是硬件将其管理在您可以轻松观察到的级别以下。在具有硬件管理 TLB 的体系结构上,内存将被无处不在的虚拟地址跟踪。

    【讨论】:

      【解决方案2】:

      一般来说,至少对于大多数实际目的而言,不会(即使您可以,但当您尝试使用这些信息时,它很可能已经过时了)。

      如果您重复读取数据,则可以相当容易地测量长期平均访问时间,这通常可以很好地表明数据的来源。

      有一些(主要是嵌入式)处理器可以让您将一些数据锁定在缓存中,或者将缓存的一部分留作您手动管理的可寻址内存。

      【讨论】:

        【解决方案3】:

        确定 CPU 缓存的内容是非常低级的,超出了 C 的能力。事实上,缓存对于您可能正在编写的代码是完全透明的,因为 CPU 几乎可以决定要缓存的内容,并且不能在复杂的逻辑上浪费时间。在谷歌上快速搜索了特定工具,得出了英特尔调优指南和性能分析论文:https://software.intel.com/en-us/articles/processor-specific-performance-analysis-papers。 显然,这将是特定于供应商的。 AMD 可能会有特定的工具。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-12
          • 2010-10-27
          • 1970-01-01
          • 2019-08-13
          • 2017-02-04
          • 2019-06-10
          • 2013-11-16
          相关资源
          最近更新 更多